我看到过很多帖子处理同一个问题,但没有找到我具体问题的答案。
我正在运行两个循环:-loop 1 获取一堆不同的股票名称并将它们添加到雅虎财经 API URL 以获取它们的期权数据。因为每只股票都有很多期权,所以我正在运行循环 2,它在范围内循环 i(len(来自互联网的期权价格((以访问每只股票的每个期权的每个价格。 整个事情适用于大约 15 只股票,然后停止并显示错误消息"列出指数超出范围">
有人知道我做错了什么吗?提前谢谢。
法典:
stock_list = ['TREE', 'TSLA', ...]
y = len(stock_list)
while True:
for x in range(0,y):
link =("https://query2.finance.yahoo.com/v7/finance/options/" + stock_list[x])
try:
optionchain = requests.get(link).json()
except:
optionchain = 0
L = len(optionchain['optionChain']['result'][0]['options'][0]['calls'])
while True:
for i in range (L+1):
try:
arbitrage = optionchain['optionChain']['result'][0]['options'][0]['calls'][i]['lastPrice'] - (optionchain['optionChain']['result'][0]['options'][0]['calls'][i]['strike'] + optionchain['optionChain']['result'][0]['options'][0]['calls'][i]['ask'])
except:
arbitrage = 0
if arbitrage > 0:
print(stock_list[x])
print('pay: ')
print(100*optionchain['optionChain']['result'][0]['options'][0]['calls'][i]['ask'])
print('for a risk free profit of: ')
print(100*arbitrage)
print('info:')
print(optionchain['optionChain']['result'][0]['options'][0]['calls'][i])
print(' ')
else:
print(stock_list[x], i, ' No arbitrage')
break
过了一会儿,壳牌回来了:
LOXO 13 No arbitrage
LOXO 14 No arbitrage
Traceback (most recent call last):
File "/Users/owner/Desktop/arbitrage option.py", line 18, in <module>
L = len(optionchain['optionChain']['result'][0]['options'][0]['calls'])
IndexError: list index out of range
这不是一个完整的答案,但这里有一些解决你的问题的建议。
请注意,错误出现在以下行中:
L = len(optionchain['optionChain']['result'][0]['options'][0]['calls'])
这为您提供了有关哪个列表和哪个索引可能是问题的线索。
现在,我看到该行中的两个位置可以访问列表:
L = len(optionchain['optionChain']['result'][0]['options'][0]['calls'])
^ ^
| |
Here Here
所以,其中之一一定是问题所在。但是哪一个呢?
要找出答案,请尝试将长线分成两行较短的行:
part_1 = optionchain['optionChain']['result'][0]
L = len(part_1['options'][0]['calls'])
现在,当您运行它时,您将获得一个更具体的错误行号。
假设,例如,错误发生在第一行(part_1 =
(。
为什么会发生错误?
了解更多信息的一种方法是在访问列表之前打印出来:
list_1 = optionchain['optionChain']['result']
print('list_1 = ', list_1)
part_1 = list_1[0]
L = len(part_1['options'][0]['calls'])
现在,如果您看到该list_1 = []
,那将为您提供有关错误发生原因的线索。
祝你好运!