Skip to content

建立 2026-09-15 更新 2026-09-15

快取與請求頻率

Yahoo 沒有對外公布精確的速率上限,但短時間大量請求會得到 HTTP 429,yfinance 會以 YFRateLimitError 呈現。批次作業要降速、快取,並接受免費資料本來就不穩。

本頁說明內建快取、自訂 session,以及實務上怎麼少打幾次 API。

套件自己會快取什麼

yfinance 會把時區對照、cookie 等中繼資料存在本機 SQLite(預設在使用者快取目錄的 py-yfinance)。這不是把整段股價歷史存成檔案,只是少重複打中繼請求。

時區快取位置可改:

import yfinance as yf

yf.set_tz_cache_location("/path/to/cache")

在唯讀環境(例如某些雲端函式)若寫入失敗,套件會退化成不寫盤,功能通常仍可用,只是每次都要重查時區。

自訂 session:快取 HTTP 與限速

官方進階文件示範把 requests_cache 傳給 Ticker,同一 URL 短時間內不會再打網路:

import yfinance as yf
import requests_cache

session = requests_cache.CachedSession("yfinance.cache")
session.headers["User-agent"] = "my-program/1.0"
ticker = yf.Ticker("MSFT", session=session)
ticker.history(period="1mo")

若還要限制頻率,可把 cache 與 rate limiter 組成同一個 session(官方文件有 CachedLimiterSession 範例)。重點是:每秒不要狂送,批次之間加間隔。

實務建議

  1. 能用一次 yf.download(list_of_tickers) 就不要迴圈 history()
  2. 下載後存成 CSV 或 Parquet,分析階段讀本地檔,不要每次開 notebook 都重抓五年日線。
  3. 遇到 429:停一下再試,不要立刻重跑整批。
  4. yf.config.debug.logging = True 可看實際請求是否異常。

官方安裝與進階說明:InstallationAPI Reference