
美股工具:SimFin API 簡介
深入探討 SimFin 這個主打平民化與高品質財務數據的平台,學習如何透過 Python 快速獲取並分析海量美股基本面資料。
WRITTEN BY

- Name
- Harry Chang
當你開始進行進階的量化基本面分析,或者想要一次性掃描全美股市場的財報數據時,你會發現 API 請求的次數限制與高昂的訂閱費用成為最大的阻礙。這時,SimFin 就是你的最佳解方。
在之前的文章中,我們介紹了提供即時深度數據的 FMP API 以及輕量免費的 yfinance。今天,我們要介紹一個在量化財金圈備受推崇的數據平台:SimFin。它以「平民化、高品質」為宗旨,提供了一套極其適合進行大規模歷史數據回測的 Python 工具。
什麼是 SimFin?
SimFin (Simple Financial Data) 是一個致力於將原本只有華爾街機構才能負擔得起的財務數據,以極低成本(甚至免費)提供給散戶投資人與開發者的平台。
SimFin 的三大核心特色:
「整包下載」的 Bulk 數據模式 有別於傳統 API 需要一檔一檔股票發送請求(例如:請求 AAPL,再請求 MSFT),SimFin 允許你直接將全市場(例如超過 2000 檔美股)的過去十幾年財務報表,以 CSV 壓縮檔的形式一次性下載到你的電腦裡。這對於訓練機器學習模型或建構全市場選股策略來說,效率有如天壤之別。
官方維護的強大 Python 函式庫 (
simfin) SimFin 官方提供了一個極度優化的 Python 套件。它不僅能幫你自動處理數據下載與快取(Cache),還能直接把海量的財報數據加載成結構完美的pandas.DataFrame,甚至內建了許多計算財務比率與成長率的函數。極高的數據清洗品質 SimFin 的數據經過標準化處理。不管是一般企業還是金融業,它們的財報科目都被統一映射到標準模板上,解決了不同公司財報格式不一的痛點。
實戰範例:使用 SimFin Python 套件
要開始使用,首先需要安裝官方套件,並前往 SimFin 官網 註冊一組 API Key(有提供免費方案)。
pip install simfin
1. 基礎設定與下載全市場損益表
這段程式碼將會展示如何設定 API Key,並一次性載入全美股的年度損益表(Income Statement)。如果本地端沒有資料,它會自動幫你從伺服器下載並緩存。
import simfin as sf
import pandas as pd
# 1. 設定你的 API Key
sf.set_api_key('你的_SimFin_API_Key')
# 2. 設定本地數據庫的儲存路徑(下載的 CSV 會存在這裡)
sf.set_data_dir('~/simfin_data/')
# 3. 載入全美股的「年度損益表 (Income Statement)」
# variant='annual' 表示年度數據,market='us' 表示美股
df_income = sf.load_income(variant='annual', market='us')
# 查看資料結構
print(df_income.head())
執行後,你會得到一個以 Ticker (股票代號) 和 Report Date (財報日期) 為 MultiIndex 的龐大 DataFrame,包含了市場上所有公司的營收、毛利、淨利等數據。
2. 抓取特定股票的數據與計算
既然資料已經在本地端了,我們要查詢特定股票(例如微軟 MSFT)的歷史營收,速度將會是微秒級的。
# 從載入的全市場數據中,篩選出 MSFT 的歷史損益表
msft_income = df_income.loc['MSFT']
# 印出 MSFT 過去幾年的「營收 (Revenue)」與「淨利 (Net Income)」
print(msft_income[['Revenue', 'Net Income']])
3. 一鍵計算財務比率與成長率
SimFin Python 套件最迷人的地方在於其內建的信號處理模組。你可以毫不費力地計算出所有股票的獲利成長率或財務比率。
# 載入額外的數據集:資產負債表與歷史股價
df_balance = sf.load_balance(variant='annual', market='us')
df_prices = sf.load_shareprices(variant='daily', market='us')
# 使用 SimFin 內建函數,自動幫全市場的股票計算財務比率 (例如 ROA, ROE)
import simfin.derived as sf_derived
# 這行代碼會自動對齊日期並計算所有公司的基本面信號
df_signals = sf_derived.fin_signals(df_income_ttm=df_income,
df_balance_ttm=df_balance)
print("=== 微軟 MSFT 的歷史 ROA 與 ROE ===")
print(df_signals.loc['MSFT'][['ROA', 'ROE']].tail())
⚠️ 特別注意:免費版的「一年時間落差 (Time Lag)」
SimFin 雖然提供了極具誠意的免費數據庫(Basic 方案),但在使用前必須了解它的一個核心限制:免費版下載的財務數據,預設會有 12 個月的時間落差。
也就是說,假設現在是 2026 年,你透過免費方案抓取下來的最新財報數據,最高只會更新到 2025 年的資料。
- 誰適合免費版? 想要研究長期歷史趨勢、進行量化模型回測、或者單純練習資料清理的開發者。對這些人來說,一年的延遲並不影響策略邏輯的驗證。
- 誰需要付費版 (SimFin+)? 如果你的策略是基於最新財報發布的短線交易(Earnings Momentum),或是需要最即時的合理價估值,那麼就需要升級付費方案,才能獲取無延遲的實時數據。
比較:SimFin vs FMP API vs yfinance
| 工具名稱 | 最佳使用場景 | 優點 | 缺點 |
|---|---|---|---|
| yfinance | 快速看個股歷史股價、隨手查資料 | 完全免費、免註冊、容易上手 | 大量請求會被封鎖、數據偶有缺漏 |
| FMP API | 即時報價、深度個股分析、需要 TTM 與估值模型 | 數據極度豐富、提供現成的 TTM 與估值數據 | 呼叫次數受限、需付費解鎖更深歷史 |
| SimFin | 全市場選股、機器學習回測、量化策略開發 | 本地端 Bulk 下載速度極快、資料標準化品質高 | 免費版數據有延遲 (通常延遲一年)、主要聚焦歐美市場 |
結語
如果你是一位喜歡在 Jupyter Notebook 裡用 Pandas 處理數據的開發者,SimFin 會讓你有一種相見恨晚的感覺。它解決了傳統 API 「一次只能拿一間公司數據」的痛點,讓你能夠真正在自己電腦的硬碟裡,擁有一座屬於自己的華爾街數據庫。
不管是想要回測過去十年的價值投資策略,還是訓練 AI 尋找市場上的隱藏寶石,SimFin 都是一個不可多得的神器。