fix calc sum3
This commit is contained in:
parent
2a8fbad2dc
commit
6e5cfd8c6a
3 changed files with 14 additions and 7 deletions
|
|
@ -5,6 +5,7 @@ import java.math.BigDecimal;
|
|||
public record FinalCalculationResult(
|
||||
BigDecimal price,
|
||||
BigDecimal rate,
|
||||
BigDecimal quantityLot
|
||||
BigDecimal quantityLot,
|
||||
CalculationResult calculationResult
|
||||
) {
|
||||
}
|
||||
|
|
@ -48,7 +48,7 @@ public class OrderCalculationService {
|
|||
BigDecimal quantityLot = result.sum3().abs();
|
||||
BigDecimal price = swapPriceCalc(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
|
||||
|
||||
return new FinalCalculationResult(price, s, quantityLot);
|
||||
return new FinalCalculationResult(price, s, quantityLot, result);
|
||||
}
|
||||
|
||||
public FinalCalculationResult calcAndEnrichSpot(SettleCode settleCode,
|
||||
|
|
@ -76,7 +76,7 @@ public class OrderCalculationService {
|
|||
price = rates.getUnitRate().add(delta).setScale(listing.getPrecision().intValue(), RoundingMode.HALF_UP);;
|
||||
}
|
||||
|
||||
return new FinalCalculationResult(price, s, quantityLot);
|
||||
return new FinalCalculationResult(price, s, quantityLot, result);
|
||||
}
|
||||
|
||||
private CalculationResult calculationSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
||||
|
|
@ -94,7 +94,8 @@ public class OrderCalculationService {
|
|||
}
|
||||
BigDecimal rateValue = sCrossRates.getUnitRate();
|
||||
BigDecimal sum2 = planPositionRub.divide(rateValue, lotSize, RoundingMode.HALF_DOWN);
|
||||
BigDecimal sum3 = sum1.setScale(lotSize, RoundingMode.CEILING);
|
||||
//Математическое округление кратное lotSize
|
||||
BigDecimal sum3 = mathCeil(sum1, lotSize);
|
||||
BigDecimal sum4 = sum3.multiply(rateValue, MC).negate();
|
||||
BigDecimal sum5 = sum3.negate();
|
||||
|
||||
|
|
@ -116,13 +117,14 @@ public class OrderCalculationService {
|
|||
}
|
||||
BigDecimal rateValue = sCrossRates.getUnitRate();
|
||||
|
||||
BigDecimal sum1 = planPosition.divide(rateValue, MC);
|
||||
BigDecimal sum1 = planPosition.divide(rateValue, MC).abs();
|
||||
|
||||
Registry amtRegistry = imdgQueryService.findAmtRegistry(registry, "CNY");
|
||||
BigDecimal planPositionCny = amtRegistry.getBalance();
|
||||
|
||||
BigDecimal sum2 = planPositionCny.setScale(lotSize, RoundingMode.HALF_DOWN);
|
||||
BigDecimal sum3 = sum1.setScale(lotSize, RoundingMode.CEILING).min(sum2).negate();
|
||||
BigDecimal y = sum1.min(sum2);
|
||||
BigDecimal sum3 = mathCeil(y, lotSize).negate();
|
||||
BigDecimal sum4 = sum3.multiply(rateValue, MC).negate();
|
||||
BigDecimal sum5 = sum3.negate();
|
||||
|
||||
|
|
@ -150,4 +152,8 @@ public class OrderCalculationService {
|
|||
private boolean isRub(Registry registry) {
|
||||
return "RUB".equals(registry.getSecuritySymbol());
|
||||
}
|
||||
|
||||
private BigDecimal mathCeil(BigDecimal val, Integer multiplicity) {
|
||||
return BigDecimal.valueOf(Math.ceil(val.doubleValue() / multiplicity) * multiplicity);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ public class SwapOvernightOrderService {
|
|||
.build();
|
||||
|
||||
FinalCalculationResult finalCalculationResult = swapCalculationService.calcAndEnrichSwap(SettleCode.T1, context);
|
||||
if (finalCalculationResult.quantityLot().compareTo(BigDecimal.ZERO) > 0) {
|
||||
if (finalCalculationResult.calculationResult().sum3().compareTo(BigDecimal.ZERO) >= 0) {
|
||||
log.warn("QuantityLot greater than zero; skip forming order currency");
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue