簡體   English   中英

Python yfinance - 為多個代碼和每個代碼的所有到期時間拉取期權鏈

[英]Python yfinance - Pulling option chains for multiple tickers and all expirations per ticker

我正在嘗試使用 yfinance 從代碼列表中提取每只股票的期權鏈以及每個代碼的所有可用到期時間。

所以我的代碼應該遍歷每個代碼,獲取到期日期,遍歷每個日期,獲取選項鏈,然后跳轉到下一個代碼並重復。

下面的代碼有時可以正常工作,但並非總是如此,尤其是當我添加代碼時,變量似乎在每個循環中都被重新分配了? - 例如,當它到達 RKT 時,RKT 的到期日期看起來與它的實際到期日期完全不同。 它可能發生在第一個代碼或接近尾聲,或隨機發生,但總有一些代碼到期錯誤,特別是隨着列表的增長。

這是我的第一個 go 並嘗試使用類似的示例進行調試,但沒有任何效果,或者我沒有正確應用它們。

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 的package 免責聲明:我是 package 的作者。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM