免費與自架的股票資料 API 替代方案(給 Trading AI Agent 用)

如果你正在找 FMP(Financial Modeling Prep)的免費替代品,或想自架(self-host)解決方案來降低成本,目前市面上已經有不少選項。以下整理免費 API 服務與開源自架方案,方便你依 Agent 的需求做選擇。

免費 API 服務比較

不同供應商在額度、資料範圍上差異很大,選擇時要特別注意 rate limit 是否符合你的 Agent 呼叫頻率。

服務 免費額度 資料涵蓋 主要限制
FMP(現有) 250 次/天 全球基本面 + 價格,30年+ 財報 價格資料是快照式
yfinance(Python 套件) 無官方限制,實務約 2000 次/小時 全球股票、選擇權、基本面,20年+ 日線 非官方、無 SLA,格式可能隨時變動
Finnhub 60 次/分鐘 全球股票、另類資料,30年美股歷史 免費層有 15 分鐘延遲
Alpaca 200 次/分鐘 美股、加密貨幣,5年+歷史 需開券商帳戶才能用
Alpha Vantage 25 次/天 全球股票、外匯、加密貨幣、技術指標 額度太低,難做跨股票分析
Polygon.io 5 次/分鐘 美股 歷史資料僅約2年
Eulerpool 1000 次/天 即時+歷史股價、基本面、外匯、大宗商品、經濟指標 較新服務,穩定性待觀察

其中 yfinance 是 quant 社群最常用的免費資料源,因為它完全免費、不需要 API key,且涵蓋範圍廣,非常適合拿來當 Trading AI Agent 的資料層 。但要注意它是非官方套件,抓取 Yahoo Finance 網頁資料,格式可能隨時改變,正式生產環境建議加上容錯機制。

如果你的 Agent 需要較高頻率的呼叫(例如同時追蹤上百檔股票),Finnhub 或 Alpaca 的免費層會比 FMP 更寬鬆,Alpaca 的 200 次/分鐘額度在免費方案中最為大方,只是需要開一個 Alpaca 券商帳戶(不強制要真實交易)。

開源 Self-Host 方案

自架方案能避免供應商端的 rate limit 問題,且資料主權掌握在自己手上,適合長期經營的 Trading Agent。

  • OpenBB Platform:目前最完整的開源金融資料整合平台,可用 pip install openbb 安裝,一支程式碼就能串接數十個資料供應商(含免費源),並提供 FastAPI 後端讓 AI Agent 直接呼叫,支援股票、選擇權、加密貨幣、宏觀經濟等資料 。這是目前社群最活躍、擴充性最好的方案。
  • Equibles:專為 AI Agent 設計的自架「迷你 Bloomberg Terminal」,整合 SEC 申報文件、機構持股、內部人交易、國會議員交易與放空資料,走的是替代資料(alternative data)路線,適合想做更深入基本面/事件驅動策略的 Agent 。
  • yfinance + 自建快取層:最簡單的自架做法是用 yfinance 抓資料,寫入本地資料庫(如 SQLite/PostgreSQL)做快取,這樣可以繞開 Yahoo 端偶發的封鎖問題,同時降低重複呼叫的次數。

選擇建議

如果你只是要驗證策略邏輯、還在 prototype 階段,yfinance 幾乎是零成本且最快上手的選擇 。若已進入正式部署、需要穩定 SLA 與更高呼叫額度,OpenBB Platform 因為能同時串接多個免費/付費資料源並統一介面,長期來看維護成本最低 。若你的策略需要另類資料(內部人交易、國會交易等),Equibles 這類專門為 AI Agent 設計的自架方案會比單純股價 API 更有價值 。

你的 Trading AI Agent 主要是做即時交易決策,還是偏向歷史資料回測分析?這會影響該優先考慮 rate limit 還是歷史資料深度。


OpenBB Platform 整合 AI Agent 的實作方式

OpenBB 目前提供三種主要方式讓 AI Agent 使用其金融資料:作為 Python 函式庫直接被 LLM function calling 呼叫、透過 OpenBB AI SDK 建立相容 OpenBB Workspace 的自架 Agent 服務、以及透過 MCP(Model Context Protocol)server 讓 Claude 等任意支援 MCP 的 Agent 直接存取資料 。以下分別說明三種實作路徑與範例程式碼。

方式一:Function Calling 驅動的 OpenBB Agent

OpenBB 官方有一個實驗性專案 experimental-openbb-platform-agent,示範 LLM 如何透過 function calling 自動呼叫 OpenBB Platform 的資料函式,來回答自然語言問題 。設定好資料供應商的憑證後(存在 ~/.openbb_platform/user_settings.json 或用 OpenBB Hub 的 PAT),就能這樣使用:

from openbb_agents.agent import openbb_agent

result = openbb_agent("What is the current market cap of TSLA?")
print(result)
# 輸出:TSLA 目前市值約 $695,833,798,800.00,
# 依據最新股價與流通股數計算得出

這種設計特別適合處理跨多步驟的複雜查詢,例如先查詢同業清單再依市值排序,Agent 會自動拆解子問題並依序呼叫對應的 OpenBB 資料函式 。也提供 async 版本 aopenbb_agent,方便整合進非同步的 Trading Agent 架構中。

方式二:自架相容 OpenBB Workspace 的 Agent 服務

如果你想讓自己的 AI Agent 直接顯示在 OpenBB Workspace 介面中(而不只是後端呼叫資料),需要用 OpenBB AI SDK 建立一個符合 HTTP 合約的 FastAPI 服務 。核心邏輯是提供兩個端點:/agents.json 描述 Agent 資訊,/v1/query 處理實際對話並以 SSE(Server-Sent Events)串流回應 。

from fastapi import FastAPI
from fastapi.responses import JSONResponse
from sse_starlette.sse import EventSourceResponse
import openai

app = FastAPI()

@app.get("/agents.json")
def get_copilot_description():
    return JSONResponse(content={
        "financial_prompt_optimizer": {
            "name": "Financial Prompt Optimizer",
            "endpoints": {"query": "http://localhost:7777/v1/query"},
        }
    })

@app.post("/v1/query")
async def query(request):
    client = openai.AsyncOpenAI()
    async def execution_loop():
        async for event in await client.chat.completions.create(
            model="gpt-4o", messages=[...], stream=True,
        ):
            if chunk:= event.choices[^2_0].delta.content:
                yield message_chunk(chunk)
    return EventSourceResponse(content=execution_loop())

部署完成後,只要在 OpenBB Workspace 的 Copilot 設定裡輸入你的服務網址,Workspace 會自動抓取 /agents.json 並開始對話 。OpenBB 也提供完整範例庫 agents-for-openbb,涵蓋讀取 widget 資料、產生圖表、產生表格、處理 PDF 並加註引用、根據 workspace 功能設定動態調整行為等九種以上的可運行範例,非常適合直接改寫成 Trading Agent 的資料讀取層 。

方式三:透過 MCP Server 直接串接 Claude 等 Agent

若你的 Trading AI Agent 是用 Claude、Claude Code 或其他支援 MCP 協定的框架建構,OpenBB 的 Open Data Platform(ODP) 可以直接以 MCP server 的形式暴露股票、固定收益、宏觀經濟指標等結構化資料,不需要額外寫轉接程式 。只要在 MCP client 端設定 ODP 的 server 位址,Claude 就能直接呼叫這些金融資料函式,等同於把 OpenBB 變成 Agent 的「資料工具箱」。這種方式最省工程量,因為不需要自己維護 HTTP 合約,只要 Agent 支援 MCP 標準即可接上。

三種方式怎麼選

實作方式 適合場景 主要限制
Function calling(openbb_agents 純後端 Trading Agent,需要自動拆解多步驟查詢 目前標記為實驗性專案,穩定性待觀察
OpenBB AI SDK 自架服務 想要在 OpenBB Workspace 介面中操作 Agent、產生圖表/表格 需自行維護 FastAPI 服務與 SSE 串流邏輯
MCP Server(ODP) 已用 Claude/MCP 生態系開發 Agent,想快速接上資料 需另外設定 ODP 資料供應商憑證

如果你的 Trading AI Agent 是純程式化交易(沒有對話介面需求),方式一的 function calling 模式會是最直接的整合方式,因為它讓 LLM 自主決定何時查詢哪些資料 。若你未來想加上人機互動的分析儀表板,方式二能讓策略解釋、圖表輸出直接呈現在 OpenBB Workspace 上 。若你的技術棧本身就建立在 Claude 或其他 MCP 相容框架上,方式三的 ODP MCP server 會是接線最少的做法 。

你的 Trading Agent 目前是用哪個 LLM 框架開發(例如 LangChain、純 OpenAI function calling,還是 Claude/MCP)?這會決定哪種整合路徑最省工。