3. 价格优先与时间优先原则
做量化交易的朋友,一定听过「价格优先、时间优先」这八个字。说实话,这八个字就是撮合引擎的灵魂。我当年刚接触CTP接口时,觉得这规则太简单了,不就是谁出价高谁先成交嘛。直到有一次我写的策略在股指期货上连续吃不到单子,才意识到这里面的门道比想象中深得多。
今天我们就把它彻底讲透。你想想看,交易所每天处理几千万笔订单,如果没有一套铁律,市场早就乱套了。这套铁律就是价格优先和时间优先。
3.1 价格优先原则详解
价格优先,说白了就是「好价钱优先」。买单出价高的优先,卖单出价低的优先。这个逻辑很直观——交易所要保证市场效率,让愿意出更高价的买方和愿意接受更低价的卖方先成交。
举个例子:
当前螺纹钢期货买一价:3800元/吨
卖一价:3802元/吨
买方A:限价3801元/吨,10手
买方B:限价3800元/吨,5手
买方C:限价3799元/吨,8手
卖方X:限价3801元/吨,6手
卖方Y:限价3802元/吨,12手
卖方Z:限价3803元/吨,4手
按照价格优先原则,买方A出价3801最高,排在队列最前面。卖方X出价3801最低,也排在卖方最前面。A和X的价格刚好匹配,直接成交6手。剩下的4手A继续等。
核心要点:价格优先是绝对的。哪怕你只比别人高1个tick,你的订单就排在他前面。我见过不少新手觉得「就差1分钱无所谓」,结果行情波动快的时候,这1分钱就是成交和没成交的区别。
这里有个细节要注意——市价单。市价单本质上就是「不限制价格,以当前最优价成交」。在价格优先的规则下,市价单相当于以对手方的最优价格立即参与排队。比如你下了一个买入市价单,系统会自动匹配当前卖一价,如果卖一量不够,就继续吃卖二、卖三……直到全部成交或剩余转为限价单。
我的经验:做高频策略时,我习惯用「价格+1个tick」的限价单代替市价单。为什么?因为市价单在流动性不足时可能吃到很差的价位,而限价单至少能控制最差成交价。这个习惯帮我避过好几次坑。
3.2 时间优先原则详解
时间优先,就是「先来后到」。当价格相同时,谁先提交订单,谁就排在前面。这个规则保证了公平性——不会因为你的网络延迟或者服务器距离远就被插队。
我举个例子你就明白了:
当前甲醇期货买一价:2500元/吨,队列如下:
排队顺序 交易员 数量 提交时间
1 A 5手 09:30:00.123
2 B 3手 09:30:00.456
3 C 8手 09:30:01.002
4 D 2手 09:30:01.500
如果此时来了一个卖单,价格2500元/吨,数量10手。那么先成交A的5手,再成交B的3手,最后成交C的2手(C还剩6手继续排队)。D?不好意思,这次轮不到他。
时间优先的粒度是多少?不同交易所不一样。上期所、大商所、郑商所都是纳秒级。中金所也是纳秒级。这意味着什么?意味着你的订单处理延迟哪怕差1纳秒,都可能排到别人后面。
避坑指南:我曾经在实盘中遇到过一个问题——我的策略在同一价格下了两笔订单,结果第二笔反而先成交了。排查后发现,是因为第一笔订单在网关层做了风控校验,多花了2微秒。嗯,从此以后我写代码时,对时间敏感的逻辑都做了严格优化。
3.3 两者结合的实际应用场景
价格优先和时间优先不是孤立存在的,它们共同构成了撮合引擎的完整规则。我画了一张图,帮你理解这个流程:
这个流程看起来简单,但实际应用中有几个关键场景值得深入聊聊。
场景一:大单拆分与冰山订单
机构交易者经常需要下大单。比如我要买入1000手螺纹钢,如果直接挂一个1000手的买单,价格冲击太大了。怎么办?拆单。
但拆单有个问题——时间优先原则下,你拆出来的小单可能被别人的单子插队。这时候就用到冰山订单了。冰山订单只显示一部分数量(比如显示100手),实际总量是1000手。每次成交100手后,系统自动补充新的100手到队列尾部。
关键点:冰山订单的「补充」操作,在时间优先规则下相当于重新排队。所以如果你用冰山订单,实际成交速度会比一次性挂单慢。我做过回测,在流动性好的品种上,冰山订单的成交延迟大约增加30%-50%。
场景二:盘口价差套利
做套利的朋友最清楚价格优先的重要性。比如我在监控螺纹钢和热卷的价差,当价差偏离到一定程度时,需要同时下买单和卖单。这时候如果我的买单因为价格低1个tick没成交,而卖单成交了,就变成了单边敞口,风险很大。
我的做法是:套利单的每一腿都使用「对手方最优价+1个tick」来确保成交。虽然多花了1个tick的成本,但避免了单边风险。这个取舍,我觉得值。
场景三:集合竞价与连续竞价
期货市场每天有集合竞价和连续竞价两个阶段。集合竞价阶段,价格优先和时间优先的规则略有不同——集合竞价采用最大成交量原则来确定开盘价,所有订单在统一价格下成交。这时候时间优先只影响同一价格下的排队顺序。
连续竞价就是我们上面讲的标准流程。我建议做策略的朋友特别注意集合竞价到连续竞价的切换时刻——那个瞬间的订单流非常密集,时间优先的竞争异常激烈。
| 阶段 | 价格优先规则 | 时间优先规则 | 典型应用 |
|---|---|---|---|
| 集合竞价 | 所有订单以统一开盘价成交 | 同一价格下,先提交先成交 | 开盘策略、隔夜持仓处理 |
| 连续竞价 | 买单高价优先,卖单低价优先 | 同价格下,先提交先成交 | 日内策略、高频交易 |
| 收盘集合竞价 | 同开盘集合竞价 | 同开盘集合竞价 | 收盘价套利、结算价对冲 |
一个小技巧:如果你做的是中低频策略,其实不用太纠结纳秒级的竞争。把精力放在价格选择上——挂一个比当前最优价好1-2个tick的价格,成交概率会大幅提升。我自己的策略中,中低频订单的成交率能做到95%以上。
最后说一句,理解价格优先和时间优先,不仅仅是知道规则本身。更重要的是,你要能根据这些规则设计出更聪明的订单策略。比如什么时候用限价单,什么时候用市价单,什么时候拆单,什么时候用冰山订单——这些决策的背后,都是对这两个原则的深刻理解。
嗯,今天就聊到这里。记住一句话:价格决定你能不能成交,时间决定你什么时候成交。两者缺一不可。