集合竞价算法示
如果对本博 http://blog.sina.com.cn/drwjf内容进行摘录和转载,请保留本段说明。武剑锋
集合竞价是电子撮合交易中的重要撮合方式,通常用来在开盘或者收盘时产生开盘价或者收盘价,或者对于某些流动性差的产品,通过一段时间集中进行撮合,找出能产生最大成交量的价格的方式,(即市场大多数人认可的价格)防止价格被不小心操纵。
在东京交易所2010年1月升级交易系统之前,东京交易所就是每隔3秒进行一次集合竞价,而台湾交易所到本文发布之日,仍然是每隔25秒进行一次集合竞价。这种情形下,一笔订单输入到交易系统到成交出来,平均的响应时间就是集合竞价间隔/2。东京交易所已经在2010年1月调整到主要采用连续竞价的方式,台湾交易所也有计划调整增加连续竞价,以便提升通常情况下的交易效率。
中国大陆市场中,由于人口众多,流动性几乎从不缺乏,所以从一开始就是采用把集合竞价生成开盘价和连续竞价高效撮合组合在一体的方式。具体组合上,沪深市场略有差异,在上交所只使用集合竞价来生成开盘价,收盘价采用最后一分钟加权平均价,而深交所除了开盘集合竞价之外,收盘也采用集合竞价。本文对上交所的集合竞价算法作了简单论述,供有兴趣的同仁研究分析。
一、法规
《上海证券交易所交易规则》二○○六年五月十五日版中有如下三条与集合竞价有直接关系的条款:
3.6.1 证券竞价交易按价格优先、时间优先的原则撮合成交。
成交时价格优先的原则为:较高价格买入申报优先于较低价格买入申报,较低价格卖出申报优先于较高价格卖出申报。
成交时时间优先的原则为:买卖方向、价格相同的,先申报者优先于后申报者。先后顺序按交易主机接受申报的时间确定。
3.6.2 集合竞价时,成交价格的确定原则为:
(一)可实现最大成交量的价格;
(二)高于该价格的买入申报与低于该价格的卖出申报全部成交的价格;
(三)与该价格相同的买方或卖方至少有一方全部成交的价格。
两个以上申报价格符合上述条件的,使未成交量最小的申报价格为成交价格;仍有两个以上使未成交量最小的申报价格符合上述条件的,其中间价为成交价格。
集合竞价的所有交易以同一价格成交。
3.6.4 按成交原则达成的价格不在最小价格变动单位范围内的,按照四舍五入原则取至相应的最小价格变动单位。
二、算法
在一个交易日内,通常由集合竞价时段与连续竞价时段组合而成,比如集合竞价开盘,然后连续竞价。在集合竞价时段,市场参与者可以输入、修改和删除自己的订单。由于在集合竞价的收单时段,不进行撮合,所以可能出现订单簿中买价高而卖价低的情况,也就是我们通常说的“订单簿有交叉”,此时系统随着每一份订单的录入或撤消,都会根据规则计算出虚拟的“指导价格”向市场发布。
依据交易规则,系统对订单簿的每个价位,分别计算买入方和卖出方的可成交量。(每个价位买入量和卖出量中的最小值是特定价位的可成交量)。最大成交量的价位将成为指导价格。如果有两个或多个价位产生最大可成交量,则将检查在更优价位(更高的买价和更低的卖价)上未成交的剩余量。剩余量是在指导价格上可成交的买入量和卖出量之差的绝对值。可使更优价位完全成交的价位将成为指导价格。即,高于该价格的买入量和低于该价格的卖出量都全部成交。
如果有多个价位具有最大可成交量而且可使更优价位完全成交,使未成交量为零的价位将成为指导价格。
如果仍有多个价位符合上述条件(未成交量同时为零或者同不为零),其中间价,即最高价位和最低价位的算术平均数将成为指导价格。
如果中间价的小数位数超过产品的最小变动单位,则四舍五入取至产品的最小变动单位。
三、示例
示例参见附图。附图中A、B、C和P、Q、R是订单簿明细。B和Q是价格(为了保证价格精度,是3位定点小数的形式,用6000表示6元)。C和R是数量。F和M的累积申买、卖量指优于(包含)该价格订单的累积量。E和N的剩余量是累积量减去可成交量。该示例中6000、5990、5980、5960、5940都能使得成交数量为200,故选择剩余量为2000的5980作为成交价。
如图所示,在集合竞价定价并撮合之后,订单簿将不再出现“交叉”,最高买价不会高于最低卖价,后续再进行连续竞价时,新进订单将可以要么直接与反方向的最优价成交,要么插入订单簿中相应位置,系统的订单响应和成交将以最“高效”的方式连续地依次发出。