解決方案 · 配套工具

行情基礎設施:轉發、回放、指標計算與品種元數據

當越來越多團隊使用行情時,幾個共享服務就很值得建設:一個 iTick 訂閲轉發給所有內部系統,按需回放歷史,統一計算指標,並在全公司保持一致的品種元數據。

  • 轉發到 Redis / Kafka,減少訂閲配額佔用
  • Tick 與 K線回放,用於 EA 測試與壓力場景
  • MA、MACD、BOLL、ATR 統一指標服務
  • 交易所、交易時段與品種元數據
# iTick -> Redis Pub/Sub (or Kafka): one subscription, many internal consumers
import json, websocket, redis           # pip install redis websocket-client

r = redis.Redis()

def on_message(ws, msg):
    d = json.loads(msg).get("data") or {}
    if d.get("s"):
        r.publish(f"md.{d['s']}", msg)        # consumers: risk, UI, strategies, storage
        r.hset("md:last", d["s"], msg)        # latest snapshot for late joiners

websocket.WebSocketApp("wss://api.itick.org/stock", header={"token": "YOUR_API_TOKEN"},
    on_open=lambda ws: ws.send(json.dumps({"ac": "subscribe",
        "params": "AAPL$US,TSLA$US,700$HK", "types": "quote,tick,depth"})),
    on_message=on_message).run_forever(ping_interval=20)
# Kafka: replace r.publish with producer.send("market-data", key=sym, value=msg)
1 → N訂閲分發
N 倍回放速度
1 套指標口徑
50+交易所元數據

四個配套服務

讓其他所有系統都更簡單的小服務。

行情轉發服務

iTick → 內網 MQ(Redis/Kafka),多業務共用一個上游連接,減少訂閲配額佔用。

行情回放服務

回放歷史 Tick 與 K線,復現行情、測試 EA、做風控壓力測試。

指標計算服務

基於原始 Tick / K線統一計算 MA、MACD、BOLL、ATR 等指標對外輸出,各團隊口徑一致。

品種元數據管理

交易所、交易時間、合約乘數、最小變動價位與交易時段日曆。

權限控制

由網關決定各團隊可見的市場,iTick 憑證集中管理。

可觀測性

在單一入口統計消息速率、斷檔與延遲。

共享行情層

一個上游,為所有消費者提供一致數據。

  1. 1

    iTick 行情

    WebSocket 實時數據,REST 歷史與代碼列表。

  2. 2

    轉發服務

    按品種發佈到 Redis 或 Kafka Topic。

  3. 3

    共享服務

    回放、指標與元數據接口。

  4. 4

    消費方

    策略、風控、前端、存儲與分析。

Python 構建模塊

轉發、回放與指標服務,幾分鐘即可改造使用。

  1. 免費獲取 API Token
  2. 在 MQ 旁部署轉發服務
  3. 所有消費方改為訂閲內部 Topic
# iTick -> Redis Pub/Sub (or Kafka): one subscription, many internal consumers
import json, websocket, redis           # pip install redis websocket-client

r = redis.Redis()

def on_message(ws, msg):
    d = json.loads(msg).get("data") or {}
    if d.get("s"):
        r.publish(f"md.{d['s']}", msg)        # consumers: risk, UI, strategies, storage
        r.hset("md:last", d["s"], msg)        # latest snapshot for late joiners

websocket.WebSocketApp("wss://api.itick.org/stock", header={"token": "YOUR_API_TOKEN"},
    on_open=lambda ws: ws.send(json.dumps({"ac": "subscribe",
        "params": "AAPL$US,TSLA$US,700$HK", "types": "quote,tick,depth"})),
    on_message=on_message).run_forever(ping_interval=20)
# Kafka: replace r.publish with producer.send("market-data", key=sym, value=msg)

基礎設施常見問題

為什麼要在內部轉發行情?

一個上游訂閲經 Redis 或 Kafka 分發,可避免觸達連接數與訂閲數上限,並讓所有服務使用相同時間戳。

能回放 Tick 而不僅是K線嗎?

可以,適用於提供 Tick 歷史的市場。從 WebSocket 存儲 Tick 或拉取歷史後,按原始時間間隔回放。

iTick 提供技術指標嗎?

技術指標在套餐功能中提供;很多團隊也會基於原始 OHLCV 自建統一指標服務以完全掌控口徑,見上方示例。

品種元數據從哪裏來?

代碼列表接口按市場返回代碼、名稱與交易所,再結合交易所交易時段日曆即可獲得交易時間。

建設全團隊共享的行情層

免費 Key 起步,接入系統增多後再提升限額。