Я пытаюсь использовать 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
Это не обязательно должно происходить с первым тикером в списке, и не совсем понятно, что вызывает ошибку, но обычно чем длиннее список тикеров, тем больше несоответствий с датами истечения срока действия. - Любая помощь приветствуется.