解决方案 · 配套工具

行情基础设施:转发、回放、指标计算与品种元数据

当越来越多团队使用行情时,几个共享服务就很值得建设:一个 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 起步,接入系统增多后再提升限额。