This commit is contained in:
parent
f3ee76531e
commit
ed63f87796
3 changed files with 11 additions and 8 deletions
|
|
@ -4,6 +4,7 @@ import java.math.BigDecimal;
|
||||||
|
|
||||||
public record FinalCalculationResult(
|
public record FinalCalculationResult(
|
||||||
BigDecimal price,
|
BigDecimal price,
|
||||||
|
BigDecimal basePrice,
|
||||||
BigDecimal rate,
|
BigDecimal rate,
|
||||||
BigDecimal quantityLot,
|
BigDecimal quantityLot,
|
||||||
CalculationResult calculationResult
|
CalculationResult calculationResult
|
||||||
|
|
|
||||||
|
|
@ -53,13 +53,15 @@ public class OrderCalculationService {
|
||||||
|
|
||||||
BigDecimal quantityLot = result.sum3().abs();
|
BigDecimal quantityLot = result.sum3().abs();
|
||||||
BigDecimal price;
|
BigDecimal price;
|
||||||
|
long nextWorkDayDelta = n.longValue();
|
||||||
|
LocalDate searchingValueDate = LocalDate.now();
|
||||||
if (SettleCode.T1.equals(settleCode)) {
|
if (SettleCode.T1.equals(settleCode)) {
|
||||||
price = swapPriceCalcT1(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
|
searchingValueDate = searchingValueDate.plusDays(nextWorkDayDelta);
|
||||||
} else {
|
|
||||||
price = swapPriceCalc(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
|
|
||||||
}
|
}
|
||||||
|
int precision = listing.getPrecision().intValue();
|
||||||
return new FinalCalculationResult(price, s, quantityLot, result);
|
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,
|
public FinalCalculationResult calcAndEnrichSpot(SettleCode settleCode,
|
||||||
|
|
@ -88,7 +90,7 @@ public class OrderCalculationService {
|
||||||
price = rates.getValue().add(delta).setScale(listing.getPrecision().intValue(), RoundingMode.HALF_UP);;
|
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) {
|
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);
|
return new CalculationResult(sum1, sum2, sum3, sum4, sum5, sum6);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n, int precision) {
|
private BigDecimal swapPriceCalc(Rates rate, BigDecimal s, BigDecimal n, int precision) {
|
||||||
Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now());
|
|
||||||
BigDecimal p = n.divide(BigDecimal.valueOf(365), MC);
|
BigDecimal p = n.divide(BigDecimal.valueOf(365), MC);
|
||||||
log.info("Calculation swap price: {}*{}*{}", rate.getValue(), s, p);
|
log.info("Calculation swap price: {}*{}*{}", rate.getValue(), s, p);
|
||||||
return rate.getValue()
|
return rate.getValue()
|
||||||
|
|
|
||||||
|
|
@ -230,6 +230,7 @@ public class OrderTemplateBuilder {
|
||||||
order.setCreated(Instant.now());
|
order.setCreated(Instant.now());
|
||||||
|
|
||||||
order.setPrice(finalCalculationResult.price());
|
order.setPrice(finalCalculationResult.price());
|
||||||
|
order.setBasePrice(finalCalculationResult.basePrice());
|
||||||
order.setQuantityLot(finalCalculationResult.quantityLot());
|
order.setQuantityLot(finalCalculationResult.quantityLot());
|
||||||
order.setRate(finalCalculationResult.rate());
|
order.setRate(finalCalculationResult.rate());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue