美股工具:SimFin API 簡介

美股工具:SimFin API 簡介

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


當你開始進行進階的量化基本面分析,或者想要一次性掃描全美股市場的財報數據時,你會發現 API 請求的次數限制與高昂的訂閱費用成為最大的阻礙。這時,SimFin 就是你的最佳解方。

在之前的文章中,我們介紹了提供即時深度數據的 FMP API 以及輕量免費的 yfinance。今天,我們要介紹一個在量化財金圈備受推崇的數據平台:SimFin。它以「平民化、高品質」為宗旨,提供了一套極其適合進行大規模歷史數據回測的 Python 工具。


什麼是 SimFin?

SimFin (Simple Financial Data) 是一個致力於將原本只有華爾街機構才能負擔得起的財務數據,以極低成本(甚至免費)提供給散戶投資人與開發者的平台。

SimFin 的三大核心特色:

  1. 「整包下載」的 Bulk 數據模式 有別於傳統 API 需要一檔一檔股票發送請求(例如:請求 AAPL,再請求 MSFT),SimFin 允許你直接將全市場(例如超過 2000 檔美股)的過去十幾年財務報表,以 CSV 壓縮檔的形式一次性下載到你的電腦裡。這對於訓練機器學習模型或建構全市場選股策略來說,效率有如天壤之別。

  2. 官方維護的強大 Python 函式庫 (simfin) SimFin 官方提供了一個極度優化的 Python 套件。它不僅能幫你自動處理數據下載與快取(Cache),還能直接把海量的財報數據加載成結構完美的 pandas.DataFrame,甚至內建了許多計算財務比率與成長率的函數。

  3. 極高的數據清洗品質 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 都是一個不可多得的神器。