文件

資料存取

所有資料透過一致的 REST API 提供,設計重點在於穩定性、可預測性與可組合性。每一個 endpoint 都遵循相同的回應結構與欄位命名規則,讓資料可以直接接入研究流程、策略系統與自動化 agent。

資料主題分類#

平台的目標不是提供一次性的資料查詢,而是建立一個可以長期維運的資料層。當你的系統需要跨資料主題整合、回測、或進入 production 環境時,資料存取方式必須保持一致且可追溯。

資料依照主題(dataset)進行組織,每個主題對應一組 API endpoints。不同主題之間共用相同的 request / response 結構,避免在整合時需要針對每個資料來源做客製解析。

目前主要資料主題包括:

  • 行情資料:即時與歷史價格、成交資訊與市場指標
  • 財報資料:損益表、資產負債表與現金流量表
  • 營運資料:月營收與公司揭露的營運數據
  • 公司基本資料:公司資訊、產業分類與基礎識別資料
  • 公司事件:公告、重大訊息與事件型資料
  • 籌碼與資金流向:法人資金流與市場資金動向
  • 利率與總體資料:利率快照與部分總體指標

endpoint 使用模式#

每個 dataset 都可以獨立查詢,也可以在同一個流程中組合使用。這樣的設計可以降低跨資料整合的成本,並避免資料結構不一致帶來的風險。

API 設計偏向可組合,而不是高度封裝的單一功能接口。建議的使用方式如下:

  • 先以單一 ticker 與短時間範圍進行驗證,確認欄位與回應結構符合預期後,再擴大查詢範圍
  • 將不同 dataset 的查詢拆成多個 request,在應用層做整合,而不是依賴單一複雜 endpoint
  • 對於大規模資料需求,使用分批查詢(batch)與適當的速率控制,避免觸發限制
  • 避免把 API 當作資料庫查詢語言;API 的設計是資料傳輸層,而不是即時分析引擎

一致的回應結構#

所有 API 回應都遵循同一個結構,讓資料可以被統一處理:

這個設計讓你可以在 parser 或資料處理層先統一處理 metadata(dataset、freshness、lineage),再針對 data 欄位做具體解析。當系統規模擴大時,這種分層會大幅降低維護成本。

  • dataset:資料集識別名稱
  • source_role:資料來源角色(canonical / fallback / helper)
  • freshness:資料更新時間或有效時間
  • lineage:資料來源與處理流程資訊(可用於追溯)
  • data:實際資料內容

查詢與擴展策略#

當資料需求從單一查詢成長為系統級使用時,建議採用以下策略:

這些策略能讓 API 從「查資料工具」升級為「資料基礎設施」。

  • 建立中間層(data access layer),將 API 呼叫集中管理,而不是散落在不同服務中
  • 統一 ticker 與時間格式,避免不同資料源使用不同 key 導致錯誤匹配
  • 對常用查詢做快取(cache),降低重複請求與速率壓力
  • 將長期資料(如歷史價格、財報)落地;API 適合做資料同步,不適合每次即時查詢
  • 對重要流程加入資料版本與時間標記,確保回測與實際交易使用相同資料狀態

錯誤處理與限制#

在實務使用中,最常見的問題來自於速率限制與資料邊界。

建議在系統中對不同錯誤類型做分類處理,對 rate limit 加入 retry 或 backoff 機制,並對關鍵流程加上監控與警示。

  • 請求過於頻繁:會觸發 rate limit,需要調整節奏或分批處理
  • 查詢範圍過大:可能導致回應時間增加或資料不完整
  • 使用未授權的 dataset:不同方案可用資料範圍不同
  • 資料尚未更新:freshness 欄位應作為判斷依據,而不是假設資料即時

實務建議#

在開發初期,可以直接從 API 讀取資料進行實驗。但當進入穩定運行階段,建議將資料存取納入整體系統設計。

當資料存取被正確設計後,後續的策略開發、分析與產品化會變得更穩定。

  • 將 API 當作資料來源,而不是最終資料存放位置
  • 為不同用途建立明確的資料流(research / backtest / production)
  • 保留 lineage 與 freshness,用於驗證與排錯
  • 避免在 production 流程中依賴不可預測的即時查詢