2025年9月10日 星期三

yfinance 基本下載資料

1️⃣ yfinance 基本下載資料

import yfinance as yf # 選股票 ticker = "2330.TW" # 下載歷史股價(原生欄位 OHLCV) data = yf.download(ticker, period="3mo", interval="1d", auto_adjust=True) # 檢查資料型態 print(type(data)) # pandas DataFrame print(data.columns) # ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
  • 用途:取得日線或其他週期股價資料

  • 常用參數:

    • period:資料時間範圍,例如 "1mo", "3mo", "1y"

    • interval:時間頻率,例如 "1d", "1h", "1wk"

    • auto_adjust:是否自動調整股價(拆股 / 股息)


2️⃣ 原生欄位說明

欄位說明
Open開盤價
High最高價
Low最低價
Close收盤價
Adj Close調整後收盤價(考慮拆股 / 股息)
Volume成交量

這些是 API 下載回來就有的,不需要自己計算。


 


3️⃣ 衍生欄位/計算

# 移動平均線 data['MA5'] = data['Close'].rolling(5).mean() data['MA20'] = data['Close'].rolling(20).mean() # 日報酬率 data['Return'] = data['Close'].pct_change() # 交易訊號 data['Signal'] = 0 data.loc[data['MA5'] > data['MA20'], 'Signal'] = 1 data.loc[data['MA5'] < data['MA20'], 'Signal'] = -1
  • 說明:

    • rolling(n).mean() → 計算 n 日移動平均

    • pct_change() → 計算報酬率

    • loc[...] → 條件篩選賦值


4️⃣ 其他底層 API 函數

Function / 屬性用途範例
yf.Ticker("2330.TW")建立股票物件ticker = yf.Ticker("2330.TW")
ticker.info取得股票基本資料info = ticker.info
ticker.dividends歷年股利資料divs = ticker.dividends
ticker.financials歷年損益表fin = ticker.financials
ticker.balance_sheet歷年資產負債表bs = ticker.balance_sheet
ticker.cashflow歷年現金流量表cf = ticker.cashflow
ticker.splits拆股歷史splits = ticker.splits

5️⃣ 資料檢查與轉換(pandas 基礎用法)

# 確保成交量是 Series if isinstance(data['Volume'], pd.Series): volume = data['Volume'] else: volume = data['Volume'].squeeze()
  • 用途:避免型態不一致造成計算錯誤

  • 說明:

    • isinstance() → 判斷型態

    • squeeze() → 把 DataFrame 轉成 Series

       

      補充

    • 時間索引 (data.index)

      • 每一列的日期或時間點(DateTimeIndex)

      • 可以做 x 軸圖表、時間篩選

    • 自訂欄位

      • 你可以在原始 DataFrame 上加自己的欄位,例如:

        data['MA5'] = data['Close'].rolling(5).mean() data['Return'] = data['Close'].pct_change()
      • 這些都是你自己計算的,但基礎數據來源還是 yfinance API 下載的欄位

    •  

 

沒有留言:

張貼留言