集合竞价算法

对于集合竞价算法的疑惑:
按照网上的一些股票交易说明。
集合竞价关键是对两个列表,买单列表(价格从高到低,时间先后顺序)和卖单(价格从低到高,时间先后顺序)的撮合。
关键是确定成交价。
成交价的规则是:
(1)高于选取价格的所有买委托和低于选取价格的
所有卖委托能够全部成交。
(2)与选取价格相同的委托的一方必须全部成交。
如满足以上条件的价位仍有多个,则选取离昨市价最
近的价位。
按照书中所说,算法是:
依序逐笔将排在前面的买委托与卖委托配对成交,
直至成交条件不满足为止(即买价低于卖价),
同样允许部分成交,就是在满足以上情况加,可以部分买入和部分卖出。

以下是一个实例,我想问下用java实现这个算法,还有没有比以下这个实例更优、
更快的算法(列表筛选、计算成交、价代码组织,考虑到单子过多)。
举一个简单的例子,假设深长城在开盘前有 5 笔买入
委托和 6 笔卖出委托,根据价格优先,时间优先的原则,
这 5 笔买入委托价格按由高到低排列,原卖出委托价格由
低至高排列如下:
委买价(元)委托数量(股) 委卖价(元)委托数量(股)
19.81 300 19.56 600
19.78 700 19.61 200
19.68 500 19.64 300
19.60 800 19.68 700
19.55 700 19.74 700
19.80 400
从委买、委卖情况看,成交价格必须是在 19.56 元至
19.81 元中选取。
在未进行集合撮合成交定出成交价前,按照价格优
先、时间优先的原则,假设符合成交条件并能产生成交的
情况是:
第一笔成交:19.81 和 19.56 成交 300 股
上述排序变为:
股 票 交 易 须 知
44
委买(元)委托数量(手)委卖(元)委托数量(手)
0 0 19.56 300
19.78 700 19.61 200
19.68 500 19.64 300
19.60 800 19.68 700
19.55 700 19.74 700
19.50 400
第二笔成交:19.78 元和 19.56 元、19.61 元成交 500

上述排序又变为:

委买(元)委托数量(手)委卖(元)委托数量(手)
0 0 0 0
19.78 200 0 0
19.68 500 19.64 300
19.60 800 19.68 700
19.55 700 19.74 700
19.50 400
第三笔成交:19.78 元、19.68 元和 19.64 元成交 300
股,上述排序变为:

委买(元)委托数量(手)委卖(元)委托数量(手)
股 票 交 易 须 知
45
0 0 0 0
0 0 0 0
19.68 400 0 0
19.60 800 19.68 700
19.55 700 19.74 700
19.50 400
第四笔成交:19.68 元和 19.68 元成交 400 股
则上述排序变为:

委买(元)委托数量(手)委卖(元)委托数量(手)
0 0 0 0
0 0 0 0
0 0 0 0
19.60 800 19.68 300
19.55 700 19.74 700
19.50 400
至此,剩下的最高申买委托 19.60 元和最低申卖委托
19.68 元无法再继续撮合成交。
根据上述 4 笔成交的情况看, 至 19.68 元, 这个价位,
可以使所有符合成交条件的卖委托和买委托产生最大成
交量共 1500 股,则 19.68 元被定为成交价,所有买和卖
委托都以这个价成交,并揭示为开盘价

你可能感兴趣的:(算法)