做量化交易,尤其是日内和高频策略,大家都明白一个道理:回测的优异表现如果不能被实盘复现,大概率是数据和环境差异造成的。 我们作为为多家对冲基金和私募管理人提供数据科学支持的团队,无数次验证过一个结论——行情数据源的质量问题,往往首先反应在 tick 级延迟和数据完整性上。今天就从量化实战出发,系统分享我们用性价比视角评估数据源的方法。
从回测的“隐形偏差”说起
很多量化研究员都有这种体验:因子回测 IC 很高,但在模拟盘或小资金实盘里,信号时准时不准。我们排查到最后,发现根子常出在行情时间轴上。一个 tick 数据源的延迟如果存在系统性漂移,那么你信号触发的时刻其实是“过去”的,价格已经跑掉,滑点无法用历史数据回测出来。同样,tick 缺失会导致回测器错误地跳过某些成交机会,或者虚构出流动性的假象,这使得策略容量和冲击成本的估算完全失真。
因此我们在为一个新策略配数据源时,第一个动作不是看它能拉多长的历史,而是对它进行从 tick 到分钟级别的完整性和延迟压力测试。
量化质量的核心维度
我们构建了一套面向量化场景的评测矩阵,这也是每次接洽新数据商时必填的内部记分卡:
| 判断方向 | 重点关注 |
|---|---|
| 时间戳 | 交易所原始成交时间是否完整保留,精度是否达毫秒 |
| 数据连续性 | 交易时段内是否存在未报告的 tick 缺失,突发断线后的恢复机制 |
| 更新速度 | tick 生成到本地接收的全链路延迟,以及在不同活跃度下的分位数表现 |
| 字段稳定性 | 接口字段定义是否稳定,复权因子、分红拆股等信息的同步时间 |
这四点决定了数据源能否直接用于生成可交易的因子。特别是时间戳,如果数据源做了二次封装或时间重整,我们就很难还原真实的到达顺序,这对于订单簿重建和排队策略是致命的。
实盘测试方案与代码
在量化社区,WebSocket 推送是比较理想的实时行情获取方式。我们在做 A/B 测试时,会同时订阅目标数据源和一个经过长期验证的基准行情(作为参考,我们曾将 AllTick API 的行情通道作为对照标的之一,利用其稳定的时间戳帮助我们标定其他源头的相对偏移)。然后统一计算延迟序列,并对齐生成 1 分钟和 tick 级别的一致性报告。
以下是延迟监控的核心代码逻辑:
import websocket
import json
import time
def on_message(ws, message):
data = json.loads(message)
# 解析 tick 数据字段
symbol = data.get("symbol")
price = data.get("price")
volume = data.get("volume")
timestamp = data.get("timestamp")
# 记录本地接收到的时间
receive_time = int(time.time() * 1000)
# 输出延迟值供后续统计分析
print(
symbol,
price,
volume,
"delay:",
receive_time - timestamp
)
def on_open(ws):
# 构建实时成交订阅请求
request = {
"action": "subscribe",
"symbol": "AAPL",
"type": "trade"
}
ws.send(json.dumps(request))
ws = websocket.WebSocketApp(
"wss://api.alltick.co/stock/websocket",
on_open=on_open,
on_message=on_message
)
# 持续运行以收集长期样本
ws.run_forever()
把采集到的延迟数据保存为 CSV,我们就能在收盘后快速分析 P50、P95、P99 延迟,并按时间片段分组观察开盘效应和盘中稳定性。同时,我们还会统计 tick 数量与交易所公布的成交量进行比对,检测是否存在未被补全的缺口。
量化级数据源的隐秘陷阱
几个在券商研报或数据商介绍中不会主动告诉你的问题:
- 复权算法黑洞:历史后复权和实时前复权所使用的因子可能在不同时间点计算,导致因子值在回测与实盘衔接处出现跳变;
- K线聚合偏差:自己从 tick 聚合分钟线,与数据源直接提供的分钟线不一致,源头在于时间窗口边界定义不同;
- 特殊事件标记缺失:拆股、分红、代码变更等事件若未在数据中及时反映,策略可能对价格突变产生错误信号;
- 时区与夏时令:美股的夏令时切换点,tick 时间戳可能产生 1 小时偏移,导致日内策略时间判断错误。
这些对低频策略或许只是“噪音”,但对持仓周期在分钟级别以内的策略,足以让一条原本盈利的曲线变得平庸。所以我们的原则是:能用原始 tick 自己聚合,就绝不依赖数据源二次加工的分钟线;所有依赖事件的信息,都要求数据源提供原始的事件表而非内嵌标记。
性价比视角下的选择建议
对于量化团队,选择数据源其实是在选择一条长期可靠的“信息高速公路”。我们不会为用不上的衍生字段付费,但愿意为高稳定性、一致且精确的时间戳支付合理的溢价。建议大家在接入前务必做一个涵盖完整交易周、包含重大财经事件日的压力测试,并在接入后建立持续的行情健康度监控。唯有这样,才能让我们的回测结果尽可能靠近实盘,让策略的Alpha真正落袋。


