1. 课程导入与目标设定

盘口交易的回测与普通K线策略回测有一个根本差别:它关心的不是“收盘价有没有穿过均线”,而是“在某一毫秒的买一卖一队列里,我的委托能不能排到、能不能成交、成交后滑点多少”。这意味着回测的输入粒度必须细到逐笔委托与逐笔成交,输出也不能只是一条净值曲线,而要能回答“信号在什么盘口状态下触发、撮合假设是否成立、成本侵蚀了多少收益”。本课程要解决的,正是把这条从原始逐笔数据到一份可读、可复核、可复用的回测报告的全过程自动化。

先明确核心价值。手工做一次盘口回测,典型工作量分布大致是:数据清洗与对齐占四成,撮合逻辑与成本建模占三成,指标计算与图表整理占两成,撰写结论占一成。其中前三项高度重复、规则明确,最适合脚本化;最后一项虽然需要人判断,但可以把“指标—阈值—结论”的映射固化成模板,让机器生成初稿、人来复核。自动化的收益不只是省时间,更在于可复现:同一份逐笔数据、同一套撮合参数,任何时候重跑都得到同一份报告,避免“上次那个结果是怎么算出来的”这类无法追溯的问题。

整体认知框架:四层数据流

把整个系统拆成四层来看,理解会清晰很多。最底层是原始数据层,包括逐笔成交(时间戳、价格、数量、买卖方向)、逐笔委托(委托序号、价格、数量、方向、类型)和行情快照(十档或一档盘口)。往上是撮合仿真层,它按队列位置模型判断委托能否成交、成交价是多少、部分成交如何处理。再往上是指标计算层,把成交记录聚合成收益、回撤、胜率、换手、滑点分布、盘口状态分组统计等。最顶层是报告生成层,负责排版、绘图、填充结论模板并输出文件。

盘口回测报告自动生成:四层数据流与交付物 ① 原始数据层 逐笔成交 时间/价/量/方向 逐笔委托 序号/价/量/类型 行情快照 买一卖一/十档 清洗与对齐 去重/补缺/时区统一 ② 撮合仿真层 队列位置模型 前序量/撤单估计 成交判定 部分成交/排队等待 成本建模 手续费/滑点/冲击 成交明细 逐笔成交记录 ③ 指标计算层 收益与回撤 累计收益/最大回撤 交易质量 胜率/盈亏比/换手 滑点分布 分位数/均值/极值 盘口分组 按价差/深度统计 ④ 报告生成层 图表渲染(净值/滑点直方图) 结论模板填充(指标→判断) 交付物:HTML/PDF 回测报告 + 参数快照

这张图里最容易被低估的是“清洗与对齐”和“参数快照”两处。逐笔数据常见的坑包括:同一笔成交在成交表与快照中被重复计入、集合竞价时段的委托类型与连续竞价不同、时间戳精度不一致导致撮合顺序错乱。参数快照则是把本次回测用到的所有假设(队列前序量估计方式、手续费率、滑点模型参数、样本区间)随报告一起存档,这是报告能被复核的前提。

学习路径与最终交付物

课程按“先跑通、再校准、后扩展”的顺序推进。第一阶段建立最小闭环:用一小段真实逐笔数据(例如某只流动性较好的股票连续三个交易日的逐笔成交与快照),实现一个只考虑“排队位置=前序委托量”的简化撮合器,算出成交明细并输出一份含净值曲线和基础指标的HTML报告。这个阶段的目标不是准确,而是链路打通——数据能进、撮合能出、报告能看。

第二阶段做校准。把简化撮合器的结果与已知的成交回报或人工核对样本比对,重点看三类偏差:成交率是否偏高(常见原因是忽略了撤单导致的队列前移)、滑点是否偏乐观(常见原因是假设总能以对手价成交)、成本是否漏算。校准的抓手是参数,例如把“前序量估计系数”从1.0调到0.6~0.8区间做敏感性测试,观察成交率和收益如何变化,并在报告中记录这组测试结果。

第三阶段做扩展与工程化:支持多标的批量回测、把报告模板参数化、加入盘口状态分组统计(例如按买卖价差大小分桶,比较不同价差环境下的策略表现),最终形成一个可以“给一份数据目录,产出一套报告”的脚本入口。

建议在课程开始前准备好一份可用的逐笔数据样本和Python环境(pandas、numpy、matplotlib即可起步)。样本不必很大,但必须包含完整的委托与成交字段,否则后续撮合环节会缺少判断依据。

本节要建立的三个判断

第一,明确“报告自动生成”不等于“结论自动生成”。机器负责把指标算准、把图画对、把模板填满;人负责判断这份回测是否可信、参数是否合理、结论是否越界。第二,明确撮合假设是盘口回测的误差主源,后续所有校准工作都围绕它展开,而不是围绕画图美化。第三,明确交付物的形态:一份结构化报告(含指标表、图表、参数快照、结论段落)加上可重跑的脚本,二者缺一不可。