目錄
    Add a header to begin generating the table of contents

    yfinance 攻略!Python 下載股票價格數據無難度

    yfinance 攻略!Python 下載股票價格數據無難度
    Share on facebook
    Share on twitter
    Share on linkedin
    Share on whatsapp
    目錄
      Add a header to begin generating the table of contents

      要說 Python 裡其中一個最適合訓練手勢(沒錯,Python 編程像沖咖啡一樣,有手藝可言)的 Library,莫過於 yfinance 。

      yfinance 是一個可以下載股票數據的 Library。由於股票數據,例如價格、交易等頗為大眾化,無論您是一個投資老手、投資初哥、或是完全不懂投資,都可以把 yfinance 視作 Python 修道館!

      YFinance 與 Yahoo! Finance API

      顧名思義,yfinance 這個 Library 的功能是一個 Python 獲取 Yahoo Finance API 的好用小夥伴。

      這裡我們先科普一下 API 的概念。

      凡人的 API 解釋

      API 就像一個餐廳的服務生,而他只懂得端出餐廳菜單上有的料理。

      我是廣告 ^o^

      我們每次跟他點菜時,要告訴他我們想要哪一道菜,以及個人的口味,例如比較鹹、甜等。

      API 也是這樣運作的。他是伺服器的服務生,只懂得處理既定類型的請求。透過一個請求,我們便可以提取需要的數據。

      Yahoo! Finance API

      有玩過股票的朋友就會知道 Yahoo! Finance 是其中一個最為方便的數據庫。

      譬如我們想知道台積電(TSM)的股價,在網頁可以到移動到「歷史數據」。我們可以透過更改「時段」等的參數獲取不同的數據。

      我們這次運用到 Yahoo! Finance API,基本上與這個網頁版無異。只要我們時刻提醒自己這個數據的來源,就更能掌握 API 的語法了。

      我是廣告 ^o^

      YFinance 使用教學

      這次我們繼續用 Google Colab 教學。有興趣了解 Google Colab 可以到這裡:新手 1/3:5 分鐘免安裝學習 Python?Google Colab Notebook 幫緊您!

      在 Google Colab 環境安裝 YFinance

      由於 yfinance 不是 Google Colab 預設安裝的元件,所以我們需要先告訴 Google Colab 安裝 yfinance。

      !pip install yfinance
      import yfinance as yf 

      透過以上 2 行的指令,我們要求我們的 Python Library 管理員,pip,去安裝 yfinance 這個 Library。安裝成功後,我們再匯入整個 Library。

      如果您不太了解 Library,可以到這一邊看看喔:新手 2/3:Google Colab 如何製做互動表格和圖表?快來學 Import library/Jupyter

      獲取單一股票的數據

      接下來我們先學如何深入提取 1 隻股票的數據。

      我是廣告 ^o^

      定義 Ticker 物件

      yfinance 運作的方式是透過我們定義一個 Ticker 的物件(Object),而透過這個物件,我們存取 Yahoo! Finance 的數據。

      tsm = yf.Ticker(‘TSM’)
      tsla = yf.Ticker(‘TSLA’)

      定義一個 Ticker 的方法十分簡單,就是 yf.Ticker(’SYMBOL’)

      Ticker 物件的指令

      Ticker 物件有許多功能(methods/functions),但我們集中討論一下常見的幾個指令。注意:以下使用 TSM 作例子,而我們已經定義 tsmyf.Ticker('TSM')

      指令回傳
      tsm.info股票的基本資料,例如公司名、行業、市值、以及一系列的財務比率(Financial Ratios)如 P/E, P/B 比率等。
      tsm.financials公司的損益表(Income Statement),一次可以獲取 4 年的數據。
      tsm.earnings公司 4 年間的總收入(Revenue)與盈虧(Earnings),即 Top-line 與 Bottom-line 數據
      tsm.actions公司的企業行動(Corporate Action)資料,例如股息(Dividend)和拆股(Stock Split)
      tsm.history()股票價格和企業行動的歷史。包含 OHLC(開盤 Open、最高 High、最低 Low、收市 Close)、成交量(Volume)等的重要數據。

      有興趣了解每一個指令的回傳,可以在文末的 Google Colab Notebook 看看噢。

      獲取多個股票的交易數據

      這是 yfinance 的最主要用途之一。我們投資股票時總會先看看股價的走勢,再決定投資額、時期等。

      我是廣告 ^o^

      Start/end 模式

      # 語法是 yf.download(
      #    股票代號,
      #    start=開始日期,
      #    end=完結日期
      #    )
      yf.download('TSM TSLA',start='2016-01-01',end='2021-01-01')

      最常用的方法是使用所謂的 Start/End 模式來獲取數據,即是指定數據開始和結束日期。

      透過以下的 3 個參數(parameters),我們提取到一個含有 OHLC 及交易量的 pandas dataframe。

      參數描述
      股票代號(例如 ‘TSM TSLA’)列舉所需的股票代號(可以在 Yahoo! Finance 的搜索找到每隻股票的代號)。除了以空格分開每隻股票代號,您亦可以直接使用一個列表,如 [‘TSM’, ‘TSLA’]。
      開始日期(例如 ‘2016-01-01’)以 YYYY-MM-DD 的格式輸入數據的開始日期。如果日期不是交易日(trading days),那麼回傳的數據會以最近的下個交易日開始。
      完結日期(例如 ‘2016-01-01’)以 YYYY-MM-DD 的格式輸入數據的完結日期。如果日期不是交易日(trading days),那麼回傳的數據會以最近的上個交易日開始。

      Period 模式

      # 語法是 yf.download(
      #    股票代號,
      #    period=日期範圍 (1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max)
      #    interval=頻率 (1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo)
      #    )
      yf.download('TSM TSLA',period='6mo',interval='1mo')

      另外一個常見的用法是 Period 模式,指定數據的日期範圍,例如 3 個月前、6 個月前、1 年前等至今的數據。

      Period 模式常見會聯合 interval 參數使用,提取到的 pandas dataframe 與 Start/End 模式差不多:

      參數描述
      日期範圍(例如 ‘6mo’)3 個月、6 個月前的數據,適用於計算投資時間回報(3 個月回報,今年至今回報等)。
      頻率(例如 ‘1mo’)數據的頻率,可用於計算單月(1mo)、3 個月(3mo)等的回報。

      企業行動

      留意在以上的圖片例子裡,固然有 2021-01-01、 2021-02-01 等的數據,但怎麼會有 2021-03-17 等非月份的數據?

      我是廣告 ^o^

      這是因為在那些日期,出現了如股息(Dividends)、拆股(Stock Split)等的企業行動。您可以上個環節提及的 tsm.actions 等的指令查看。

      提取高頻股票數據(High Frequency)

      最後我們來說一下高頻數據的提取方法。

      高頻數據(High Frequency Data)是近年興起的一個概念,透過分析非常細膩、日內(Intraday)的股票走動,例如每分鐘的股票跳動,再以電腦作交易。這種交易方法特別見於外匯市場(Foreign Exchange)。

      yf.download('TSM TSLA',period='7d',interval='1m')

      細心一看,這個語法是 Period 模式的語法的延伸。

      Yahoo! Finance 提供最近 7 天的日內(Intraday)數據。透過指定頻率(interval)為 1m/5m/10m/90m 等(m 代表分鐘),可以提取到高頻率的股票價格數據。

      我是廣告 ^o^

      教學完整代碼

      最後送給大家這篇教學的 Google Colab 完整代碼。如果您不懂得使用免安裝又好用的 Google Colab Notebook,記得閱讀這篇教學了:新手 1/3:5 分鐘免安裝學習 Python?Google Colab Notebook 幫緊您!

      結語

      希望您透過以上教學了解更多透過 yfinance 存取 Yahoo! Finance 股票數據的方法。記得繼續看看我們下一篇有關使用 pandas dataframe 來分析 yfinance 提取到的數據的技巧!

      人氣文章

      快讓我學更多

      small_c_popup.png
      想學習 Python 嗎?
      快來訂閱我們的電子報!