一、回放系统概述

做量化交易这些年,我越来越觉得——历史数据回放系统,是整个量化体系里最容易被低估的模块。

很多人一上来就搞策略、调参数,结果实盘一跑就崩。为什么?说白了,你连历史都没跑明白,怎么敢拿真金白银去试?

今天我们就聊聊,什么是历史数据回放,它到底能干什么,以及我们设计这套系统时,心里得装着哪些目标。

1.1 什么是历史数据回放

历史数据回放,就是把过去某段时间的市场数据,重新“播放”一遍。

你想想看,就像看比赛录像。比赛已经打完了,但你可以在录像里反复研究某个关键球是怎么丢的。回放系统也一样——它把行情数据、订单簿、成交记录,按时间顺序重新推送给你的策略。

我习惯把它比作“时光机”。你带着现在的策略,回到过去的市场里跑一圈,看看它到底行不行。

核心定义:历史数据回放 = 用历史行情数据 + 时间推进引擎 + 策略执行引擎,模拟真实交易环境的过程。

1.2 核心应用场景

回放系统不是玩具,它有实打实的三个战场。

场景一:策略回测

这是最常用的场景。你写了一个策略,想知道它过去三年能赚多少钱。

回放系统会逐笔、逐Tick地跑你的策略。遇到买入信号就下单,遇到卖出信号就平仓。最后给你一张成绩单:收益率、最大回撤、夏普比率……

我在项目中遇到过一件事:有个同事用简单的K线回测,策略看起来年化50%。结果一上Tick级回放,发现滑点吃掉了一半利润。嗯,这就是回放精度的重要性。

我的建议:回测至少要用Tick级数据跑一遍。日线级别的回测,很多时候是“自欺欺人”。

场景二:异常复盘

实盘出了事故怎么办?比如某天策略突然巨亏,或者系统宕机了。

回放系统可以帮你“倒带”。把出事那天的数据重新跑一遍,看看策略在哪个时间点出了问题。是行情突变?还是代码bug?还是网络延迟?

我曾经用回放系统复盘过一次“闪崩”事件。那天某只股票3秒内跌了8%,我的策略在跌到5%时触发了止损,但成交价却比止损价低了2%。

回放一看,原来是订单簿深度不够,市价单直接吃到了空单。从那以后,我所有的止损单都改成了限价单。

场景三:仿真交易

策略写好了,但不敢直接上实盘?那就先跑仿真。

仿真交易和回测最大的区别是:回测是“事后诸葛亮”,仿真交易是“实时模拟”。

回放系统把历史数据按真实时间速度推送,你的策略完全不知道下一秒会发生什么。这种环境,最接近实盘。

我一般会跑至少一个月的仿真交易,才敢上实盘。别嫌慢,这钱省不了。

场景 数据速度 核心目标 典型时长
策略回测 极速(可加速) 验证策略有效性 数分钟~数小时
异常复盘 可控(可暂停/慢放) 定位问题根因 数十分钟
仿真交易 实时(1:1速度) 模拟实盘环境 数天~数月

1.3 系统设计目标

聊完场景,我们说说设计这套系统时,我心里装着哪些目标。

目标一:高精度

回放精度决定了你的回测结果有多可信。

我见过有人用1分钟K线做高频策略回测,结果年化收益算出来30%,实盘直接亏到姥姥家。为什么?因为1分钟K线里,你根本看不到订单簿的微观结构。

我个人习惯,做高频策略至少用Tick级数据。做中低频,也至少用秒级快照。

注意:精度越高,数据量越大。一天的全市场Tick数据,可能就有几十GB。存储和读取速度,是另一个要解决的问题。

目标二:高性能

回放速度要快。你想想看,回测三年的数据,如果跑一天才出结果,那还怎么调参?

我一般要求:Tick级回放,至少能达到10倍速。也就是说,一天的数据,1小时内跑完。

怎么做到?内存映射文件、并行计算、数据预加载……这些后面章节会细讲。

目标三:高仿真

回放环境越接近实盘,结果越可信。

这包括:

  • 模拟真实的撮合逻辑(不是简单按收盘价成交)
  • 考虑滑点和手续费
  • 模拟网络延迟和交易拥堵
  • 支持多品种、多账户同时回放

我曾经踩过一个坑:回测时没考虑交易所的“熔断机制”。结果策略在极端行情下,回测显示赚了钱,实盘却因为熔断无法成交。嗯,从那以后,我的回放系统里加了一个“市场状态模拟器”。

目标四:可扩展

市场在变,数据格式在变,策略也在变。回放系统不能写死。

我习惯用插件化的架构:数据源可以插拔、撮合引擎可以替换、策略接口标准化。这样,换一个交易所,或者换一种策略语言,都不需要动核心代码。

1.4 核心指标

怎么衡量一个回放系统好不好?我一般看这几个指标:

  1. 回放速度:每秒能处理多少笔成交?多少条行情?
  2. 时间精度:能精确到纳秒级吗?还是只能到秒级?
  3. 数据完整性:有没有丢数据?有没有数据错乱?
  4. 结果可复现:同样的参数跑两次,结果是否完全一致?
  5. 资源占用:CPU、内存、磁盘IO,是不是在合理范围内?

一句话总结:好的回放系统,就是让你在“过去”里,看到“未来”可能踩的坑。

1.5 知识体系总览

下面这张图,是我对回放系统整体架构的理解。你可以把它当作整个课程的地图。

历史数据回放系统知识体系 数据层 Tick数据 | 快照数据 | K线数据 | 订单簿数据 | 成交数据 引擎层 时间推进引擎 加速/减速/暂停/跳转 撮合引擎 限价单/市价单/撤单 策略执行引擎 信号生成/订单管理 应用层 策略回测 | 异常复盘 | 仿真交易 | 绩效分析 输出:回放报告 | 交易日志 | 绩效指标

这张图展示了回放系统的四层架构。数据层在最底下,往上依次是引擎层、应用层和输出层。每一层都依赖下一层提供的能力。

我习惯从数据层开始搭建。数据不牢,地动山摇。后面我们会花大量篇幅讲数据怎么存、怎么读、怎么保证质量。

好了,这一章就到这里。记住一句话:回放系统不是锦上添花,而是量化交易的“安全气囊”。没有它,你就是在裸奔。


公众号:蓝海资料掘金营,微信deep3321