讨论/技术交流/交易委托账本(Order Book)/
交易委托账本(Order Book)

目标:记录所收到的委托交易订单(order),并根据当前市场(记录于交易委托账本上)的委托交易订单(买单buy order/卖单sell order),按照价格优先-时间优先的原则撮合成交,生成并记录电子交易合同(trade)。

交易委托账本工作规则:
1.当收到一个新的买单(buy order)时,如果它的价格大于等于现有的卖单(sell order),则撮合成交,产生并记录一个或多个交易合同(trade);
2.当收到一个新的卖单(sell order)时,如果它的价格小于等于现有的买单(buy order),则撮合成交,产生并记录一个或多个成交记录;
3.撮合成交顺序 - 收到买单(buy order):按现有卖单(sell order)的价格从低到高撮合,卖单(sell order)价格相同时,按收到卖单(sell order)的时间顺序,先到先撮合;
4.撮合成交顺序 - 收到卖单(sell order):按现有买单(buy order)的价格从高到低撮合,买单(buy order)价格相同时,按收到买单(buy order)的时间顺序,先到先撮合;
5.对于任何部分成交(撮合以后,还有部分买/卖数量剩余)的订单,剩余部分必须保留在交易委托账本里,并且保留原有顺序

例子:
Order 1:以100的价格买5手
Order 2:以100的价格买7手
Order 3:以101的价格买1手
Order 4:以100的价格卖10手
当收到Order 4的时候,我们应该按如下顺序撮合并生成交易合同(trade):

  1. Order 4 - Order 3:以101的价格成交1手
  2. Order 4 - Order 1:以100的价格成交5手
  3. Order 4 - Order 2:以100的价格成交4手
    这个时候,Order 2是部分成交,交易委托账本上应该只剩下Order 2,以100的价格买3手

Order 5:以100的价格卖7手
当收到Order 5的时候,我们应该撮合并生成如下交易合同(trade):

  1. Order 5 - Order 2:以100的价格成交3手
    这个时候,交易委托账本上只剩下Order 5,以100的价格卖4手

编程要求:

  1. 编写代码并运行
  2. 附件有一个数据文件Orders.txt,把Orders.txt喂给应用程序。数据格式是:
    股票代码,价格,数量,买卖方向(1:买,2:卖)
    例如:
    a1,100,2,1 --- 以100的价格买a1,买2手
    a5,103,5,2 --- 以103的价格卖a5,卖5手
    a1,101,1,1
    a2,99,1,1
    a3,99,5,1
    a1,99,10,1
  3. 打印详细的日志,记录收到的每个订单,撮合记录,每次委托账本发生变化以后的快照。
  4. 代码尽量简洁,完成要求的功能就好。
1
共 0 个回复
暂无回复