python - Python yfinance - 为多个代码和每个代码的所有到期时间拉取期权链
问题描述
我正在尝试使用 yfinance 从代码列表中提取每只股票的期权链以及每个代码的所有可用到期时间。
所以我的代码应该遍历每个代码,获取到期日期,遍历每个日期,获取选项链,然后跳转到下一个代码并重复。
下面的代码有时可以正常工作,但并非总是如此,尤其是当我添加代码时,变量似乎在每个循环中都被重新分配了?- 例如,当它到达 RKT 时,RKT 的到期日期看起来与它的实际到期日期完全不同。它可能发生在第一个代码或接近尾声,或随机发生,但总有一些代码到期错误,特别是随着列表的增长。
这是我第一次尝试并尝试使用类似的示例进行调试,但没有任何效果,或者我没有正确应用它们。
import yfinance as yf
import pandas as pd
yf.pdr_override()
stocklist =['DIS','GM','HD','BABA','AAPL','APPS','PLTR','EXPR','MARA','BABA','SPCE','GME','RIOT','BB','RKT','HD','NIO']
optionsX = pd.DataFrame()
for x in stocklist:
print(x)
tk = yf.Ticker(x)
exps = tk.options #expiration dates
try:
for e in exps:
print(e)
opt = tk.option_chain(e)
opt = pd.DataFrame().append(opt.calls).append(opt.puts)
opt['expirationDate'] = e
opt['Symbol'] = x
optionsX = optionsX.append(opt, ignore_index=True)
except:
pass
optionsX
错误示例:如果我按原样运行代码,它似乎运行良好,我得到了 DIS:
DIS
2021-03-19
2021-03-26
2021-04-01
2021-04-09
2021-04-16
2021-04-23
...
但是,如果我尝试将另一个代码添加到列表中,例如 TSLA,我现在得到了 DIS:
DIS
2021-03-19
2021-04-16
2021-06-18
2022-01-21
2022-06-17
2023-01-20
它不必发生在列表中的第一个代码上,也不确定是什么触发了错误,但通常代码列表越长,与到期日期的不一致就越多。- 任何帮助表示赞赏。
解决方案
我找不到您的代码有任何问题 - 似乎来自该端点的数据正在发生变化,这就是您从每个请求中获得不同结果的原因。
不过,我可以提供一个替代解决方案(它更快,更容易实现)。这是一个名为yahooquery的包。免责声明:我是包的作者。
from yahooquery import Ticker
stocklist =['DIS','GM','HD','BABA','AAPL','APPS','PLTR','EXPR','MARA','BABA','SPCE','GME','RIOT','BB','RKT','HD','NIO']
t = Ticker(stocklist, asynchronous=True)
df = t.option_chain
df.columns
Index(['contractSymbol', 'strike', 'currency', 'lastPrice', 'change',
'percentChange', 'volume', 'openInterest', 'bid', 'ask', 'contractSize',
'lastTradeDate', 'impliedVolatility', 'inTheMoney'],
dtype='object')
df.index.unique(level=0)
Index(['AAPL', 'APPS', 'BABA', 'BB', 'DIS', 'EXPR', 'GM', 'GME', 'HD', 'MARA',
'NIO', 'PLTR', 'RIOT', 'RKT', 'SPCE'],
dtype='object', name='symbol')
df.shape
(22360, 14)
推荐阅读
- c# - 为什么不能使用 is 运算符来区分 bool 和 Nullable
? - mysql - 从数据库中选择日期时,我想将 5:30 添加到数据库中的 created_at 日期
- r - 如何在 ggpot2 中为接近 0 的数据在对数刻度 y 轴上绘制条形图
- vue.js - this.options 未定义。我没有任何名为 this.options 的字段
- java - 如何使用 Spring Security 和 RESTful 进行 POST 请求?
- excel - 根据单元格值将行从两个或多个 Excel 工作表复制到另一个工作表
- laravel-query-builder - 将 Zend 查询转换为 laravel 并有条件地使用 when,然后按 order by
- symfony - Symfony autowire:为什么服务注入为空?
- c# - 删除 DateTime.Now C# 中所有周末的扩展方法
- r - xaringan::summon_remark() 没有来自 R 的互联网连接