1. 课程导入与问题界定
在量化交易回测中,限价单是最常见的委托类型之一。它规定了“最多愿意付出的买价”或“最少愿意接受的卖价”,看似只是一个价格参数,却直接决定了策略在历史行情中能否成交、以什么价格成交、以及成交后承担了多大的机会成本。很多回测结果之所以在实盘中“失真”,根源并不在信号本身,而在于对限价单未成交情形的处理过于乐观或过于粗糙。
本节作为全课程的开篇,先不急于写代码,而是把问题界定清楚:限价单未成交到底会怎样扭曲回测?常见的错误处理有哪些?本课程将沿着什么路径把这个问题彻底解决?只有先把“问题边界”画清楚,后续的撮合建模、数据对齐、参数敏感性分析才有落脚点。
一、限价单未成交为什么是回测中的“隐形偏差源”
限价单与市价单的根本差别在于:市价单几乎必然成交(在流动性充足前提下),而限价单是否成交取决于价格是否触及委托价、以及触及后市场是否还有足够的对手盘。回测引擎如果简单地假设“价格穿过委托价即成交”,就会系统性地高估策略收益,因为真实市场中,价格触及委托价往往只意味着“有成交可能”,而不是“一定成交”。
这种偏差在两类策略中尤其明显。第一类是挂单型做市或网格策略,它们依赖在价格回调时被动成交,若回测假设“触及即成交”,会凭空多出大量本不存在的成交笔数。第二类是突破后回踩入场策略,限价单挂在回踩位,若价格只是瞬间刺穿又迅速离开,真实成交概率很低,而回测却照单全收。结果是:回测曲线平滑、胜率高、回撤小,实盘却频繁踏空或成交在更差的位置。
更隐蔽的是,未成交不仅影响“有没有这笔交易”,还会改变后续的仓位状态、资金占用和信号触发序列。一笔本该未成交的买单被错误成交后,后续的止盈止损、加仓减仓都会连锁偏移,最终整条净值曲线都建立在错误的状态之上。
二、常见误区:四种典型的错误处理方式
在实际回测代码中,限价单未成交的处理常出现以下四类误区,值得逐一对照自查。
- “价格触及即成交”:只要当根K线的最低价低于买入限价(或最高价高于卖出限价),就判定成交。这忽略了排队、瞬时刺穿和流动性不足,是最常见的乐观偏差。
- “收盘价穿越才成交”:用收盘价判断是否穿越委托价,虽然更保守,但会漏掉盘中真实可成交的机会,导致低估成交率,同样失真,只是方向相反。
- “未成交就静默丢弃”:订单到期未成交后直接从订单簿删除,不记录、不统计、不反馈给策略。这使得策略无法感知“挂单失败”,也无法据此调整后续挂单位置。
- “用未来数据补判成交”:在回测中事后查看后续几根K线再决定当时是否成交,引入了前视偏差,是最严重的一类错误。
这四类误区的共同点是:它们都没有把“未成交”当作一个需要显式建模的状态,而是当作一个可以忽略的边角情形。本课程的核心主张正是——未成交不是异常,而是限价单的常态之一,必须被显式表达、记录和统计。
三、本节核心关系图:从委托到成交判定的状态与偏差路径
下图把一笔限价单从提交到最终处置的关键分支画出来,重点标出“未成交”这一支路如何被不同处理方式放大为回测偏差。图中左侧是订单生命周期,右侧是对应的回测偏差来源,便于把抽象问题落到具体判定节点上。
四、把问题量化:一个可对照的示例
为了说明偏差的量级,这里给出一个明确标注为“教学假设”的示例。假设某策略在一年内发出 500 笔买入限价单,委托价统一设在当日开盘价下方 0.5%。回测数据中,有 300 笔的当日最低价低于委托价,若采用“触及即成交”,则成交率 60%。但若引入更贴近现实的判定——要求价格触及后至少停留一根分钟K线、且成交量不低于该分钟均量的 30%——假设其中只有 180 笔满足条件,真实成交率约 36%。
这 24 个百分点的差距,意味着回测中多出了 120 笔本不存在的持仓。若每笔平均盈利 0.8%、平均持仓 3 天,粗算会虚增约 0.96 个百分点的年化收益(120 × 0.8% ÷ 500 笔的加权口径,仅为示意,非实测)。更重要的是,这 120 笔“幽灵成交”会改变资金占用曲线,使回测的最大回撤被低估,从而误导仓位管理参数的选择。这个示例说明:未成交处理不是精度问题,而是会改变策略评价结论的结构性问题。
五、本课程的目标与学习路径
基于上述界定,本课程设定三个递进目标。第一,建立正确的成交判定模型:区分“价格触及”“可成交”“实际成交”三个层次,明确每层需要的数据字段与判定条件。第二,实现可复现的未成交处理逻辑:包括订单状态机、部分成交拆分、有效期管理与撤单反馈,使回测引擎能如实记录每一笔未成交订单。第三,评估未成交对策略指标的影响:通过成交率、滑点分布、资金占用和净值偏差等指标,量化不同处理方式带来的差异,并据此做参数敏感性分析。
学习路径上,课程将先讲清订单状态与撮合语义(概念层),再进入数据字段与判定条件的实现(工程层),随后用案例对比不同处理方式的回测结果(分析层),最后落到参数校准与实盘一致性检验(验证层)。每一层都会给出可直接参考的判定表、状态转移规则或代码片段,确保学完能落地到自己现有的回测框架中。
总结来说,限价单未成交不是回测的边角料,而是决定回测可信度的关键环节。把“未成交”从被忽略的分支提升为被显式建模的状态,是本课程贯穿始终的主线。接下来的章节将围绕这条主线,逐层展开判定规则、实现细节与效果验证。