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%以上。

最后说一句,理解价格优先和时间优先,不仅仅是知道规则本身。更重要的是,你要能根据这些规则设计出更聪明的订单策略。比如什么时候用限价单,什么时候用市价单,什么时候拆单,什么时候用冰山订单——这些决策的背后,都是对这两个原则的深刻理解。

嗯,今天就聊到这里。记住一句话:价格决定你能不能成交,时间决定你什么时候成交。两者缺一不可。