#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. Кто-нибудь мне поможет???