一、回放系统概述
做量化交易这些年,我越来越觉得——历史数据回放系统,是整个量化体系里最容易被低估的模块。
很多人一上来就搞策略、调参数,结果实盘一跑就崩。为什么?说白了,你连历史都没跑明白,怎么敢拿真金白银去试?
今天我们就聊聊,什么是历史数据回放,它到底能干什么,以及我们设计这套系统时,心里得装着哪些目标。
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 核心指标
怎么衡量一个回放系统好不好?我一般看这几个指标:
- 回放速度:每秒能处理多少笔成交?多少条行情?
- 时间精度:能精确到纳秒级吗?还是只能到秒级?
- 数据完整性:有没有丢数据?有没有数据错乱?
- 结果可复现:同样的参数跑两次,结果是否完全一致?
- 资源占用:CPU、内存、磁盘IO,是不是在合理范围内?
一句话总结:好的回放系统,就是让你在“过去”里,看到“未来”可能踩的坑。
1.5 知识体系总览
下面这张图,是我对回放系统整体架构的理解。你可以把它当作整个课程的地图。
这张图展示了回放系统的四层架构。数据层在最底下,往上依次是引擎层、应用层和输出层。每一层都依赖下一层提供的能力。
我习惯从数据层开始搭建。数据不牢,地动山摇。后面我们会花大量篇幅讲数据怎么存、怎么读、怎么保证质量。
好了,这一章就到这里。记住一句话:回放系统不是锦上添花,而是量化交易的“安全气囊”。没有它,你就是在裸奔。
公众号:蓝海资料掘金营,微信deep3321