风险指数超出范围



我看到过很多帖子处理同一个问题,但没有找到我具体问题的答案。

我正在运行两个循环:-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 = [],那将为您提供有关错误发生原因的线索。

祝你好运!

最新更新