etreschenkov 2026-05-14 11:55:51 +03:00
parent f3ee76531e
commit ed63f87796
3 changed files with 11 additions and 8 deletions

View file

@ -4,6 +4,7 @@ import java.math.BigDecimal;
public record FinalCalculationResult(
BigDecimal price,
BigDecimal basePrice,
BigDecimal rate,
BigDecimal quantityLot,
CalculationResult calculationResult

View file

@ -53,13 +53,15 @@ public class OrderCalculationService {
BigDecimal quantityLot = result.sum3().abs();
BigDecimal price;
long nextWorkDayDelta = n.longValue();
LocalDate searchingValueDate = LocalDate.now();
if (SettleCode.T1.equals(settleCode)) {
price = swapPriceCalcT1(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
} else {
price = swapPriceCalc(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
searchingValueDate = searchingValueDate.plusDays(nextWorkDayDelta);
}
return new FinalCalculationResult(price, s, quantityLot, result);
int precision = listing.getPrecision().intValue();
Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), searchingValueDate);
price = swapPriceCalc(rates, s, n, precision);
return new FinalCalculationResult(price, rates.getValue().setScale(precision, RoundingMode.HALF_UP), s, quantityLot, result);
}
public FinalCalculationResult calcAndEnrichSpot(SettleCode settleCode,
@ -88,7 +90,7 @@ public class OrderCalculationService {
price = rates.getValue().add(delta).setScale(listing.getPrecision().intValue(), RoundingMode.HALF_UP);;
}
return new FinalCalculationResult(price, s, quantityLot, result);
return new FinalCalculationResult(price, null, s, quantityLot, result);
}
private CalculationResult calculationSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
@ -153,8 +155,7 @@ public class OrderCalculationService {
return new CalculationResult(sum1, sum2, sum3, sum4, sum5, sum6);
}
private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n, int precision) {
Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now());
private BigDecimal swapPriceCalc(Rates rate, BigDecimal s, BigDecimal n, int precision) {
BigDecimal p = n.divide(BigDecimal.valueOf(365), MC);
log.info("Calculation swap price: {}*{}*{}", rate.getValue(), s, p);
return rate.getValue()

View file

@ -230,6 +230,7 @@ public class OrderTemplateBuilder {
order.setCreated(Instant.now());
order.setPrice(finalCalculationResult.price());
order.setBasePrice(finalCalculationResult.basePrice());
order.setQuantityLot(finalCalculationResult.quantityLot());
order.setRate(finalCalculationResult.rate());
}