仔细考虑上面说的价格优先与时间优先原则,会产生一些需要进一步澄清的问题。按照这两个原则设想的初步撮合交易规则是这样的:主机将接受到的买单和卖单分别按照价格排序,买单价格高的优先,卖单价格低的优先。某一买单的价格高于某一卖单的价格则发生交易。如果两条或更多买单的价格相同,则主机较早接收到的买单优先交易,卖单同样如此。
以上规则没有解决的是交易价格如何确定?发生交易的买单和卖单价格相同时,价格自然无疑。而当买单价格高于卖单价格时,如何确定交易价格呢?如果采用较高的买单价格,一则对于买方不公平;二则这种成交价格高于其所报价格的机制,会使得卖方竞相报低价,因为更低的报价可以获得优先交易的机会,而成交时又不会受到任何损失。同理若采用较低的卖单价格,也会产生与上面对称的缺陷。
看似合理的解决办法是取买单和卖单的中间价。确实有些网页是这样介绍的,也可以在《新股民入市必备全书》一书中找到来源。但是仔细阅读上海和深圳证券交易所制订的交易规则,并没有中间价的机制。那么再考虑买卖单在时间上的差别,能否化解这个问题呢?
那我们设想负责撮合的主机上的数据。在一次撮合完成后,数据包括分别按价格优先原则排序的若干档买单和卖单。随后主机收到一批新的买单和卖单(包括撤销买单和卖单),开始撮合交易。首先将这些新单按照价格优先原则合并进买卖档位,再比较两者的价格,若有买单的报价不低于卖单的报价,则发生交易。这时就要决定交易价格,我们注意到发生交易的买单和卖单,在主机接收的时间上同样有差别,可以按照时间上较早的一方的报价。
这个机制解决了上面提到的采用任何一方报价的缺陷。假设买单的时间较早,交易按照它的报价,这样会不会不公平地便宜了卖方呢?如果买方想占这个便宜,想稍晚提交买单,就可能错过这次撮合交易的机会,在下次撮合交易时,又不能保证和卖单比时间是较晚的,并且交易价格随时变化,买方某个时刻的报价只是针对当前行情的判断,推迟报价没有意义。在卖方的竞争者中,因为同样的理由也不可能有意地抢占这个便宜。
因此这样一种利用时间差别来决定交易价格的机制,对买卖双方都是公平的,对双方的报价不会产生任何诱导和干扰。实际上按照时间上较晚的一方的报价也没有问题。我们姑且将它称为批量撮合机制,这样命名的原因会在下面显得清楚。
仔细考虑上面的交易机制,会发现它隐含的前提是每等到接收到一批买卖单后,主机撮合成交一次。与此相对的另一种可能是,主机每收到一条买单或卖单,立刻进行撮合。决定到底采用哪种方式的因素有几个。首先主机是否可能同时收到若干条买卖单,这里说的同时是完全精确的,也就是说主机接收买卖单的通道是“串行的”还是“并行的”。如果在逻辑上是前者,那么不管接受买卖单的数量多么大,任何两单在时间上都是有先后的;如果是后者,则可能接受到严格同时的若干买卖单,如此主机就不可能对每一条买卖单即时处理,因为主机即使拥有多CPU这样物理上的并行处理能力,买卖单的档位必须同步,某一时刻只能处理一单,所以接收到的多单必然被存储,它们的价格可能不同,所以要排序后交易,实际上就变成批量处理了。其次是撮合程序是被设计成连续撮合,即每收到一单就进行,还是以某种方式批量进行,例如每隔一段时间或者当接收到的新单累计到一定数量。
根据对上海和深圳证券交易所规则的解读,我的判断是主机接收买卖单是串行的,并且撮合程序是连续运行的。这样形成的就是另一种由时间因素决定交易价格的机制。任何时刻主机上保持的买卖档位都是不相交的,也就是报价最高的买单价格低于报价最低的卖单。每当有新的一单进入时,如果是撤销单的指令,主机将对应的单撤销即可。如果是买单,则视其价格是否不低于目前档位中报价最低的卖单,若是则按时间上较早的卖单价格成交,若否则按排序将买单加入档位。如果是卖单,则按类似规则处理。
我们姑且把这种决定价格的交易机制称为连续撮合机制。与批量撮合机制一样,它在交易价格上对买卖双方都是公平的,因为任何想获得较便宜的对方价格的买卖单,都只能妄想较晚报价,而这样竞相推迟报价显然是无效的。成交价按按时间上较晚的报价也同样可行,我国的证券交易所采取的是时间较早的报价。两种撮合机制相较,我认为实际运行的是连续撮合。以后的讨论就以此为基础,在考虑某些问题时仍然会将若采用批量撮合会怎样做比较。