Java实现交易委托账本(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手

  1. 打印详细的日志,记录收到的每个订单,撮合记录,每次委托账本发生变化以后的快照。
  2. Java代码尽量简洁,完成要求的功能就好。

要完整代码吗?要不要做UI界面呢?

代码量有点多,给你一点思路吧:

1.定义一个类,属性与文件字段一致;

2.读取文件,把值用逗号分隔成数组,数组到javabean里面;

3.把每个javabean设置到list集合里面;

4.比较是否成交,然后再插入到list里面。

只是道题,不需要UI界面,实现简单功能就好了

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y