2. 限价单成交机制基础
在回测中处理“限价单未成交”,第一步不是写代码,而是把交易所真实的撮合规则讲清楚。只有先明确一张限价单在什么条件下会成交、什么条件下会挂着、什么条件下会被判定为未成交,回测引擎的成交判定逻辑才有依据。本节围绕订单簿撮合原理、价格优先与时间优先、限价单与市价单的差异,以及未成交的定义展开,为后续章节的未成交建模打下基础。
一、订单簿:撮合发生的场所
连续竞价市场的核心数据结构是订单簿(Order Book),它由买盘(Bid)和卖盘(Ask)两侧的挂单集合构成。买盘按价格从高到低排列,卖盘按价格从低到高排列,最优买价(Best Bid)与最优卖价(Best Ask)之间的差额就是买卖价差(Spread)。订单簿只记录“尚未成交的委托”,一旦某笔委托被完全撮合,它就从订单簿中消失。
撮合的本质是:新进入的委托与订单簿对侧的最优价格进行匹配。如果新委托是买单,它会先与卖盘最低价(Best Ask)撮合;如果新委托是卖单,它会先与买盘最高价(Best Bid)撮合。撮合可以连续进行,直到新委托被完全成交、或对侧价格不再满足条件、或新委托本身是限价单且价格无法继续匹配为止。理解这一点非常关键:限价单能否成交,取决于它进入市场那一刻订单簿对侧是否存在可匹配的价格与足够的数量。
上图给出一个具体示例:卖盘最优价为 10.02 元、挂 200 股,新进入一张价格 10.03 元、数量 250 股的限价买单。由于 10.03 ≥ 10.02,该买单先以 10.02 成交 200 股,剩余 50 股因卖盘下一档 10.04 高于其限价 10.03 而无法继续成交,这 50 股会作为新的买盘挂在 10.03 价位上。这个例子说明:限价单的成交是“部分成交 + 剩余挂单”的组合,未成交并不等于整张单都没成交。
二、价格优先、时间优先
撮合顺序由两条规则决定。第一是价格优先:对买单而言出价越高越优先,对卖单而言要价越低越优先。第二是时间优先:在同一价格上,先到达订单簿的委托先成交。两条规则合起来,决定了任意时刻订单簿中每一档价位的排队顺序。
时间优先对回测有直接影响。假设某价位已有 500 股在排队,你的限价买单排在其后,那么只有当该价位前面的 500 股被吃掉之后,你的委托才可能成交。回测若忽略排队位置,只按“价格触及即成交”处理,就会系统性高估成交率。因此,在精细回测中,需要记录委托进入订单簿的时点,并估计同价位前方排队的数量。
三、限价单与市价单的差异
市价单以“立即成交”为目标,不指定价格,进入市场后直接吃掉对侧最优价直至数量满足,成交确定性强但价格不确定,可能产生滑点。限价单则指定了可接受的最高买价或最低卖价,价格确定性强但成交不确定:价格未触及则不成交,触及了也可能因排队或数量不足而部分成交。
| 对比维度 | 限价单 | 市价单 |
|---|---|---|
| 是否指定价格 | 指定,作为成交上限/下限 | 不指定 |
| 成交确定性 | 低,可能不成交或部分成交 | 高,通常立即成交 |
| 价格确定性 | 高,不会劣于限价 | 低,存在滑点 |
| 对订单簿的影响 | 未成交部分留在订单簿中 | 成交后不留在订单簿 |
| 回测关注点 | 是否触及、排队位置、可成交量 | 成交量与滑点估计 |
这张对比表直接决定了回测引擎的分支逻辑:市价单可以按“下一笔成交价 + 滑点”近似处理,而限价单必须引入“是否成交”的判断,这正是本课程后续要解决的核心问题。
四、未成交的定义与三种典型情形
在回测语境下,未成交指委托在有效期内没有发生任何数量的成交,或仅发生部分成交而剩余部分在有效期内始终未成交。需要区分三种典型情形:
- 价格未触及:限价买单价格低于当日最低成交价(或限价卖单高于当日最高成交价),订单簿对侧从未出现可匹配价格,整张单未成交。
- 价格触及但排队未轮到:价格被触及,但同价位前方排队数量较大,在有效期内未被消化,导致未成交或部分成交。
- 数量不足的部分成交:对侧可成交量小于委托量,成交一部分后剩余部分挂在订单簿上,若到期仍未成交,则剩余部分计为未成交。
常见误区:把“当日最低价低于限价买单价格”直接判定为成交。实际上,最低价只说明价格曾经触及,并不保证你的委托在队列中能被撮合。尤其在小盘股或涨跌停附近,价格触及而无法成交的情况并不少见。
五、回测中的成交判定要点
把上述机制落到回测,需要明确几个判定要素。其一,撮合时点:委托在哪个 bar 或哪个 tick 进入订单簿,决定了它与哪些成交价比较。其二,价格条件:限价买单要求市场最低价 ≤ 限价,限价卖单要求市场最高价 ≥ 限价。其三,数量条件:可成交量取对侧在该价位的挂单量,需扣除前方排队量。其四,有效期:当日有效、撤单前有效或指定到期时间,决定了未成交判定的截止点。
一个可操作的近似判定可以写成:若限价买单价格 ≥ 当期最低价,且该价位可成交量大于前方排队量,则成交 min(委托量, 可成交量 − 前方排队量),否则不成交。这个近似并不完美,但它把“价格优先、时间优先”和“数量约束”都纳入了判断,比“触及即成交”更接近真实。后续章节将在此基础上,进一步讨论排队量估计、部分成交累计和撤单处理等细节。
本节要点:订单簿决定可匹配价格与数量;价格优先决定档位顺序,时间优先决定同价排队;限价单成交不确定,未成交需区分“未触及”“排队未轮到”“部分成交剩余”三种情形。回测判定必须同时考虑价格、数量、时点与有效期,而不能只看价格是否触及。