1. 课程导入与偏差全景
盘口量化回测,指的是用逐笔成交、委托队列快照、盘口档位变化等高频数据,去检验一个依赖订单簿状态的策略在历史行情中能否盈利。它和普通日线回测最大的区别在于:策略的输入不是一根K线,而是某一时刻的买一卖一价格、各档挂单量、撤单与成交的先后顺序。正因为输入如此细粒度,任何一处数据或撮合假设的偏差,都会被放大成完全不同的收益曲线。所谓回测偏差,就是回测所模拟的交易环境与真实交易环境之间的系统性差异,导致回测结果不能代表实盘表现。
初学者常把偏差理解为“代码写错了”,其实不然。代码正确但假设错误,同样会产生偏差。例如用收盘价成交、用未来一秒的盘口判断当前信号、忽略排队等待、忽略手续费与滑点,这些都不是语法错误,却会让回测虚高。因此本课程把偏差定义为可复现、可定位、可量化的环境失真,排障的目标不是追求回测与实盘完全一致,而是把偏差控制在可解释、可接受的范围内。
偏差的四大来源分类
把三十个案例归入统一框架,是后续排障的基础。按失真发生的环节,偏差可分为四类:
- 数据层偏差:行情快照缺失、时间戳错位、复权处理不当、逐笔数据与快照不同步、涨跌停与停牌处理错误。典型表现是回测在某些时段出现无法解释的跳空或成交。
- 撮合层偏差:成交假设过于乐观,如信号出现即按对手价成交、忽略排队位置、忽略部分成交、忽略撤单失败。典型表现是回测成交率远高于实盘。
- 成本层偏差:手续费、印花税、过户费、滑点、冲击成本建模缺失或参数过时。典型表现是小额高频策略回测盈利、实盘亏损。
- 逻辑层偏差:未来函数、参数过拟合、样本内外划分不当、幸存者偏差。典型表现是回测曲线过于平滑、参数在样本外迅速失效。
这四类并非孤立。数据层的时间戳错位会伪装成逻辑层的未来函数;撮合层的乐观假设会掩盖成本层的真实损耗。排障时先定位偏差属于哪一层,再决定用哪种手段验证,能显著减少盲目调参。
排障思维框架:先分层,再对照
面对一条“回测很好、实盘很差”的策略,最忌讳直接改参数。推荐的排障顺序是:复现 → 分层定位 → 最小对照实验 → 量化偏差 → 修正与回归。复现要求固定数据版本、随机种子和撮合配置,确保同一份代码每次跑出相同结果;分层定位则用排除法,先关掉成本模型看收益是否仍异常,再换用保守撮合看成交率是否骤降,从而判断偏差主要落在哪一层。
最小对照实验是这套框架的核心。举例来说,某盘口策略回测年化收益 35%,实盘约 8%。第一步固定数据与参数复现 35%;第二步把“信号出现即按对手价全额成交”改为“按排队位置估计成交比例”,若收益降到 20%,说明撮合层贡献了约 15 个百分点;第三步再补上双边手续费与 1 个最小变动价位的滑点,若收益降到 10%,说明成本层又贡献约 10 个百分点。此时剩余 2 个百分点的差距才值得去逻辑层找原因。每一步只改一个假设,偏差才能被归因,而不是混在一起。
一个可执行的分层检查表示例
下面这份检查表可直接用于新策略的首次偏差体检,字段按盘口策略的实际需要设计,示例数值仅作演示:
| 层级 | 检查项 | 示例观察值 | 判断依据 |
|---|---|---|---|
| 数据层 | 快照时间戳与逐笔成交是否同源对齐 | 错位约 200ms | 信号使用了成交之后才可见的盘口 |
| 撮合层 | 限价单成交率 | 回测 92%,实盘 61% | 未建模排队位置,成交过于乐观 |
| 成本层 | 单边综合成本 | 回测 0.03%,实盘 0.08% | 滑点与冲击成本被低估 |
| 逻辑层 | 样本外收益衰减 | 样本内 35%,样本外 9% | 存在过拟合或未来函数 |
需要强调的是,偏差不可能被完全消除。盘口数据本身是离散快照,真实撮合涉及交易所队列的微观顺序,回测只能逼近。排障的真正目标是让每一处偏差都有明确来源、有量化估计、有修正记录,从而使回测收益与实盘收益之间的差距稳定在可解释的区间内。后续三十个案例,正是沿着数据、撮合、成本、逻辑四条线索逐一展开,每个案例都对应本图中的一个具体位置。