顺序匹配序列与Java+;弹簧&x2B;蒙戈
我已经开发了一个订单匹配服务,它是功能性的(暂存服务器)。执行命令的逻辑实现工作正常 但有一个小问题困扰了我和我的同事将近一个月。要更详细地解释它,请参见下面的订单簿示例:顺序匹配序列与Java+;弹簧&x2B;蒙戈,java,spring,mongodb,spring-mvc,trading,Java,Spring,Mongodb,Spring Mvc,Trading,我已经开发了一个订单匹配服务,它是功能性的(暂存服务器)。执行命令的逻辑实现工作正常 但有一个小问题困扰了我和我的同事将近一个月。要更详细地解释它,请参见下面的订单簿示例: Buy Side Qty 1 Price 3 Qty 1 Price 2 Qty 1 Price 1 这些是买方的现有订单。现在,如果一个卖家来下了3 Qty@Price 1/的销售订单-所有三个采购订单都应该执行 这个功能运行得非常好。问题在于执行顺序。理想情况下,代码应该首先将订单与价格
Buy Side
Qty 1 Price 3
Qty 1 Price 2
Qty 1 Price 1
这些是买方的现有订单。现在,如果一个卖家来下了3 Qty@Price 1/的销售订单-所有三个采购订单都应该执行
这个功能运行得非常好。问题在于执行顺序。理想情况下,代码应该首先将订单与价格3、2、1匹配
但它是以相反的顺序执行的。正因为如此,最新价格也出现了错误,净变化和净增长率也出现了错误。这个序列在很多地方都有影响
不可能发布整个代码,因此我将发布我认为有问题的部分代码
if (matchOrderRequest.getOrderType() == OrderType.BUY) {
optionalMatchOrder=orderRepository.findTopByMarketAndOrderTypeAndPriceLessThanEqualOrderByPriceAscTimestampAsc(request.getMarket(), OrderType.SELL, request.getPrice());
}
else {
optionalMatchOrder =
orderRepository.findTopByMarketAndOrderTypeAndPriceGreaterThanEqualOrderByPriceDescTimestampAsc(request.getMarket(),OrderType.BUY,request.getPrice());
}
if (optionalMatchOrder.isPresent()) {
executedOrder.setOrderId(request.getOrderId());
订单存储库(Mongo查询):
import org.springframework.data.domain.Sort;
导入org.springframework.data.repository.crudepository;
导入org.springframework.stereotype.Repository;
导入org.springframework.transaction.annotation.Transactional;
导入java.math.BigDecimal;
导入java.util.Optional;
@存储库
公共接口OrderRepository扩展了Crudepository{
可选FindTopByMarkets和DerTypes,价格高于EqualOrderByPriceAsctimesTampasc(市场、订单类型、订单类型、大十进制);
可选的FindTopByMarketandDerTypeandPrice大于EqualOrderByPriceDescTimestamasc(市场,订单类型OrderType,BigDecimal-BigDecimal);
也发布您的mongo查询。使用存储库代码更新问题。有人需要我的帮助吗???也发布您的mongo查询。使用存储库代码更新问题。有人需要我的帮助吗???
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Optional;
@Repository
public interface OrderRepository extends CrudRepository<MatchOrder, Long> {
Optional<MatchOrder> findTopByMarketAndOrderTypeAndPriceGreaterThanEqualOrderByPriceAscTimestampAsc(Market market, OrderType orderType, BigDecimal bigDecimal);
Optional<MatchOrder> findTopByMarketAndOrderTypeAndPriceGreaterThanEqualOrderByPriceDescTimestampAsc(Market market, OrderType orderType, BigDecimal bigDecimal);