解决方案 · 配套工具
行情基础设施:转发、回放、指标计算与品种元数据
当越来越多团队使用行情时,几个共享服务就很值得建设:一个 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
iTick 行情
WebSocket 实时数据,REST 历史与代码列表。
- 2
转发服务
按品种发布到 Redis 或 Kafka Topic。
- 3
共享服务
回放、指标与元数据接口。
- 4
消费方
策略、风控、前端、存储与分析。
Python 构建模块
转发、回放与指标服务,几分钟即可改造使用。
- 免费获取 API Token
- 在 MQ 旁部署转发服务
- 所有消费方改为订阅内部 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 自建统一指标服务以完全掌控口径,见上方示例。
品种元数据从哪里来?
代码列表接口按市场返回代码、名称与交易所,再结合交易所交易时段日历即可获得交易时间。