Последовательность сопоставления заказов противоположна с Java Spring Mongo

#java #spring #mongodb #spring-mvc #trading

#java #весна #mongodb #spring-mvc #торговля

Вопрос:

Я разработал службу сопоставления заказов, и она функциональна (промежуточный сервер). Логическая реализация выполнения заказов работает нормально.

Но есть небольшая проблема, которая беспокоит меня и моего коллегу почти месяц. Чтобы объяснить это более подробно, пожалуйста, смотрите Пример сборника заказов ниже:

     Buy Side
    Qty 1 Price 3
    Qty 1 Price 2
    Qty 1 Price 1
 

Это существующий заказ на стороне покупки. Теперь, если Продавец приходит и размещает ордер на продажу в размере 3 кол-во @ Цена 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;
    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);
 

Комментарии:

1. Также опубликуйте свои запросы mongo.

2. Обновленный вопрос с кодом репозитория.

3. Кто-нибудь мне поможет???