博客 / 詳情

返回

行情API的正確使用方式:從接口調通到系統設計

行情 API 的正確使用方式:從接口調通到系統設計

在行情繫統開發中,常見的問題不是"接口調不通",而是"接口能調通,但系統設計不合理"。本文從工程實踐角度,講解如何正確理解和使用行情 API。


常見問題:接口能調通,但系統設計不合理

在行情繫統開發中,常見以下問題:

  • 首頁行情列表每秒輪詢 K 線接口獲取最新價
  • 所有頁面都建立 WebSocket 連接以實現"實時更新"
  • 系統啓動時直接訂閲 WebSocket,但未獲取可用品種列表
  • 頁面切換時舊的 WebSocket 連接未關閉

這些問題的根源在於缺乏正確的使用心智模型,即不清楚在什麼階段該使用什麼接口。

大多數 API 文檔會説明接口返回的數據結構,但不會説明接口的適用場景和使用時機。


行情 API 的本質:數據分層

行情 API 不是接口的集合,而是一套數據分層系統。

構建行情繫統時,系統在不同階段對數據的需求完全不同:

1. 數據使用階段

  • 啓動階段:系統需要獲取可交易品種列表
  • 展示階段:頁面需要顯示當前價格
  • 實時階段:需要在價格變化時主動推送

2. 數據類型

  • 快照:當前時刻的價格、漲跌幅(適合列表、首頁)
  • 歷史:過去一段時間的價格走勢(適合圖表、回測)
  • 持續流:價格變化時主動推送(適合實時盯盤、交易執行)

3. 系統複雜度

  • REST API:簡單、穩定、易維護,需要主動輪詢
  • WebSocket:實時、高效,但需要處理連接管理、重連、心跳

理解這三個維度,可以明確每個接口的適用場景。


行情 API 的分層設計

1. 可用交易品種(Symbols)

系統啓動的第一步是獲取可用品種列表。

硬編碼品種代碼會導致以下問題:

  • 退市品種無法及時移除
  • 新上市品種無法及時添加

建議在系統啓動時調用品種列表接口,並緩存結果。

多市場統一命名的價值

統一的命名規則可以用同一套代碼邏輯處理不同市場的數據:

  • 港股:700.HK9988.HK
  • 美股:AAPL.USTSLA.US
  • 外匯:EURUSDGBPUSD

這避免了為每個市場編寫適配層。

接口示例

GET /v1/symbols/available?market=HK&limit=10

使用建議

  • 系統啓動時調用一次,緩存結果
  • 不要在每次查詢行情前調用此接口
  • 定期更新建議頻率為每天一次

多市場統一 symbol 示意圖


2. Ticker(實時快照)

Ticker 接口適用於大部分"顯示當前價格"的場景:行情列表頁、首頁概覽、定時刷新的看板。

使用 K 線接口獲取最新價存在以下問題:

  • K 線接口返回的數據結構更復雜
  • 需要處理時間對齊問題
  • 無法一次查詢多個品種

Ticker 接口的優勢:

  • 返回數據輕量
  • 一次請求可查詢多個品種(通常支持 50 個左右)
  • 不需要處理時間對齊問題

接口示例

GET /v1/market/ticker?symbols=700.HK,AAPL.US

返回數據

{
  "code": 0,
  "message": "success",
  "data": [
    {
      "symbol": "700.HK",
      "last_price": "602.5",
      "volume_24h": "16003431",
      "high_24h": "606",
      "low_24h": "598",
      "timestamp": 1768982936000
    }
  ]
}

使用建議

只要不是需要實時價格跳動的場景,Ticker + 定時刷新(5-10 秒)即可滿足需求。

Ticker 適用場景示意圖


3. K 線(結構化歷史)

K 線接口的核心參數是 interval(時間間隔),決定了數據的顆粒度。

不同的分析場景對數據顆粒度的要求不同:

  • 1m:1 分鐘 K 線,適合短線交易、實時圖表(數據量大,精度高)
  • 1h:1 小時 K 線,適合日內分析(數據量適中)
  • 1d:日 K 線,適合中長期分析、回測(數據量小,適合長週期策略)

接口示例

GET /v1/market/kline?symbol=AAPL.US&interval=1d&limit=30

使用建議

  • 圖表展示:使用 limit 參數(如"顯示最近 30 天")
  • 歷史回測:使用時間範圍參數(如"2023 年 1 月到 3 月的數據")

K 線 vs 實時數據對比圖


4. WebSocket(實時流)

WebSocket 的代價包括:

  • 維護長連接(心跳、重連、異常處理)
  • 處理訂閲管理
  • 處理消息隊列
  • 處理網絡波動

適用場景

  • 實時盯盤(延遲要求在秒級以內)
  • 價格預警(價格觸發閾值時需要立即通知)
  • 高頻數據監控(需要毫秒級數據更新)

不適用場景

  • 行情列表頁
  • 歷史圖表
  • 低頻監控

以上場景使用 REST API + 定時刷新即可。

接口示例

const ws = new WebSocket('wss://api.example.com/v1/realtime?api_key=YOUR_API_KEY');

ws.onopen = () => {
  ws.send(JSON.stringify({
    cmd: 'subscribe',
    data: { channel: 'ticker', symbols: ['700.HK'] }
  }));
};

設計限制

外匯品種通常僅支持 ticker 頻道(不支持 depth 和 trade),因為外匯市場是 OTC 市場,沒有集中的訂單簿。股票和加密貨幣支持 ticker、depth、trade 三種頻道。

REST vs WebSocket 使用邊界圖


完整使用路徑示例

以港股行情監控系統為例:

Step 1:啓動時拉取可用品種

GET /v1/symbols/available?market=HK&limit=100

目的:獲取系統支持的港股品種,緩存到本地。


Step 2:頁面展示用 Ticker + K 線

首頁行情列表

GET /v1/market/ticker?symbols=700.HK,9988.HK,3690.HK

圖表展示

GET /v1/market/kline?symbol=700.HK&interval=1d&limit=30

刷新策略:每 5-10 秒刷新一次 Ticker,K 線按需加載(用户切換圖表時才加載)。

刷新頻率建議:

  • 太快(如每秒刷新)會增加服務器壓力
  • 太慢(如 30 秒)數據實時性不足
  • 5-10 秒是平衡點

Step 3:關鍵模塊用 WebSocket

僅在需要實時推送的場景建立 WebSocket 連接:

ws.send(JSON.stringify({
  cmd: 'subscribe',
  data: { channel: 'ticker', symbols: ['700.HK'] }
}));

退出實時監控頁面時,必須取消訂閲並關閉連接。否則會導致連接數超限,影響新用户建立連接。

完整使用路徑流程圖


工程小結

使用行情 API 時,需要明確以下要點:

  • 啓動階段:調用 symbols 接口獲取可用品種,緩存結果
  • 展示階段:使用 Ticker 接口獲取實時快照,K 線接口獲取歷史數據
  • 實時階段:僅在必要場景使用 WebSocket,其他場景使用 REST API + 定時刷新
  • 刷新頻率:Ticker 建議 5-10 秒,K 線按需加載
  • 連接管理:WebSocket 連接必須在頁面退出時關閉

常見錯誤

1. 過度使用 WebSocket

錯誤做法:系統啓動就建立 WebSocket,訂閲所有品種。

問題:首頁顯示 50 個品種的行情,訂閲所有品種會導致用户量上升時服務器連接數超限。

正確做法:大部分場景使用 REST API,僅在需要實時推送的模塊使用 WebSocket。


2. K 線接口濫用

錯誤做法:每秒調用 K 線接口獲取最新價。

問題:K 線接口是為歷史數據設計的,不是為實時價格設計的。頻繁調用浪費資源,且可能因時間對齊問題導致數據不準確。

正確做法:K 線用於歷史數據和圖表,實時價格使用 Ticker 或 WebSocket。


3. Symbol 不緩存

錯誤做法:每次查詢行情前都調用 /v1/symbols/available

問題:可用品種列表通常不會頻繁變化,每次都查詢是浪費。

正確做法:啓動時調用一次,緩存結果,定期(如每天)更新。


4. Interval 選擇不當

錯誤做法:不管什麼場景都使用 1m(1 分鐘 K 線)。

問題:1 分鐘 K 線數據量大,如果只是查看"最近一個月的走勢",使用日 K 線即可。使用 1 分鐘 K 線浪費帶寬,增加前端渲染壓力。

正確做法

  • 實時圖表:1m5m
  • 日內分析:1h
  • 中長期分析:1d

5. 混淆行情 API 與交易 API

錯誤做法:直接使用行情數據做下單決策,不考慮延遲和數據完整性。

問題:行情 API 提供的是市場數據,主要用於展示和分析。交易操作(下單、撤單)需要對接交易所的交易 API。

正確做法:行情 API 用於數據展示和策略分析,交易操作使用交易 API。

常見錯誤示意圖


系列説明

本文是「行情 API 的工程化使用方式」系列的第一篇,後續將繼續講解:

  • WebSocket 實戰:連接管理、心跳機制、數據補償
  • K 線數據的正確使用方式:interval 選擇、時間對齊、數據緩存策略
  • 行情繫統的性能優化實踐:從接口調用到前端渲染的完整優化方案
  • 多市場行情數據的統一處理:如何用一套代碼處理港股、美股、外匯的差異

參考資料

本文基於 TickDB API v1.0.0 撰寫。完整接口參數説明、錯誤碼處理、API 參考:

  • GitHub:https://github.com/TickDB
  • 文檔:https://docs.tickdb.ai
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.