jOpenExchg 更新了集合竞价代码

这一版本中的集合竞价算法完全被重写了,原因是找到了一个非常简洁高效的新算法。

1. 从买盘最高价开始,逐个去吃掉最低价开始的卖单,一直到不可成交为止。

2. 如果步骤1无法产生任何成交,表明订单簿一开始就不处于交叉状态,不能单靠集合竞价产生价格,算法终止。否则记住最后一笔成交的买盘价格LB,最后一笔成交的卖盘价格LS。【我们有LB >= LS 成立】

3.得到这时幸存卖盘的最低价(队首价格) HS。如果不存在卖盘,令HS = +∞ ;得到此时幸存买盘的最高价(队首价格)HB。如果不存在买盘,令HB = -∞

【我们有HS >= HB, LB>=HB, HS >= LS 成立】

4. P1 = MIN(LB, HS), P2 = MAX(LS, HB)。

【我们很容易证明 P1 >= P2 成立,方法是画一个2X2的矩阵,上面一行填写 LB, HS, 下面一行填写LS, HB, 上面一行的每一个元素都>=下面一行的任何一个元素】

5. 如果 P1 == P2 则此即唯一的集合竞价价格; 

如果P1 > P2,那么我们就得到了可供下一步比较P1, P2档位上未成交量的那一对集合竞价价格

算法的正确性可以在数学上严格证明,但这里就不写出来了。

猜你喜欢

转载自ganmomopian.iteye.com/blog/2068294