如何使用Python取得歷史股價,簡介yfinance、ffn、FinMind

文章推薦指數: 80 %
投票人數:10人

顧名思義,yfinance 的資料來源是Yahoo Finance API,以國外股市來說, ... 實測美股大盤28年 · 看懂回測績效,如何評價一個交易策略或投資組合的好壞 ... 跳至主要内容havocFuture網路資源部落格繁體中文繁體中文简体中文最近的文章用AI預測股價?實測FacebookProphet預言家Saul美股持股投資績效追蹤2022-08Saul美股持股投資績效追蹤2022-07國安基金進場護盤歷史資料數據整理2022上半年投資市場報酬率回顧整理Saul美股持股投資績效追蹤2022-06QQQvs20年前的QQQ,回測歷史數據談再次崩盤八成的可能性GoogleColab(Colaboratory)簡易教學端午變盤?回測台股加權指數25年端午節後漲跌變化Saul美股持股投資績效追蹤2022-05其實捉歷史股價的工具很多,這篇文章只介紹我正在使用的函式庫yfinance​如果要捉國外股價,首選是yfinanace顧名思義,yfinance的資料來源是YahooFinanceAPI,以國外股市來說,大概是目前我找的到最完整的資料來源使用起來也很簡單安裝pipinstallyfinance舉例要捉SPY2021年以後的資料,只需要一行code就可以取得資料importyfinanceasyf#yfinance取得股價df=yf.download("spy","2021-01-01")df是dataframe格式,可自行再去運用ffn​官方網站ffn其實用的也是yfinance的資料,不過它提供了不少很好用的function,現在我捉股價幾乎直接都使用ffn取代yfinance(反正是一樣的資料)安裝pipinstallffn舉例要捉SPY2021年以後的資料,同樣只需要一行code就可以取得資料importffn#ffn取得股價prices=ffn.get('spy',start='2021-01-01')ffnfunction介紹​rebase⇒將初始價格改為100,可以比較兩個以上的股價漲跌變化prices=ffn.get('spy,tlt',start='2021-01-01')#rebase股價繪圖%matplotlibinlineprices.rebase().plot()就可以看到在2021這兩支ETF的走勢變化to_drawdown_series⇒看最大的虧損#MaxDrawdown最大虧損prices.to_drawdown_series().plot()從這張圖就可以看出今年的SPY真的強,一路向上不回頭的calc_stats⇒統計報表#統計報表stats=prices.calc_stats()stats.display()我沒貼全部的資料,統計數據其實蠻完整的,我想看的差不多都有..display_monthly_returns⇒月報酬print(stats['spy'].display_monthly_returns())不僅有年報酬率,連每個月的報酬率都算出來了...這是google廣告FinMind​yfinance是有台股資料的,但並不是很齊全,舉例0050這檔ETF是在2003年就成立了,但是yfinance從2008年才有資料,此外,yfinance只有上市股票,是沒有上櫃股票價格的,所以要捉台股資料yfinance並不是好選擇。

原本我的作法是直接去爬證交所的網站,一直到後來發現FinMind官方網站一樣要先安裝pipinstallFinMind舉例捉0050資料,開始時間寫2000-01-01(0050上市時間是2003-06)fromFinMind.dataimportDataLoaderstock_no='0050'dl=DataLoader()stock_data=dl.taiwan_stock_daily(stock_id=stock_no,start_date='2000-01-01')stock_data.head()很好,第一筆資料是2003-06-30,看起來資料是完整的再測試一下捉上櫃股票6539(台康生技)fromFinMind.dataimportDataLoaderstock_no='6539'dl=DataLoader()stock_data=dl.taiwan_stock_daily(stock_id=stock_no,start_date='2000-01-01')stock_data.head()也成功的捉到資料FinMind可以說完美的補足yfinance台股資料不足的缺點FinMind整合ffn​既然ffn這麼好用,我們可以用FinMind取得資料後,然後直接用ffn的function嗎?答案是可以的,不過資料需要做些處理ffn的index是日期,但是FinMind的index是流水號,date是其中一個欄位而且是string格式,所以我們要將FinMind的index改成日期格式的datestock_data.set_index("date",inplace=True)stock_data=stock_data.set_index(pd.DatetimeIndex(pd.to_datetime(stock_data.index)))然後就可以用ffn的function了stats=stock_data[["close"]].calc_stats()stats.display()成功取得0050的統計資料延伸閱讀GoogleColaboratory(Colab)簡易教學如何取得美國歷史總體經濟數據,簡介Fred網站PythonAPI股票市場多少是合理的投資報酬率?實測美股大盤28年看懂回測績效,如何評價一個交易策略或投資組合的好壞如何破解網站驗證碼,實測證交所買賣日報表分享加入fb粉絲團!第一時間取得網站更新訊息HavocFuture版權聲明,轉載請註明出處本文連結:https://havocfuture.tw/blog/python-stock-history這是google廣告較新一篇Saul美股持股投資績效追蹤2021-10較舊一篇網站開張yfinanceffnffnfunction介紹FinMindFinMind整合ffn



請為這篇文章評分?