Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
2a5aeb73d7
3 changed files with 14 additions and 7 deletions
|
|
@ -5,6 +5,7 @@ import java.math.BigDecimal;
|
||||||
public record FinalCalculationResult(
|
public record FinalCalculationResult(
|
||||||
BigDecimal price,
|
BigDecimal price,
|
||||||
BigDecimal rate,
|
BigDecimal rate,
|
||||||
BigDecimal quantityLot
|
BigDecimal quantityLot,
|
||||||
|
CalculationResult calculationResult
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
@ -48,7 +48,7 @@ public class OrderCalculationService {
|
||||||
BigDecimal quantityLot = result.sum3().abs();
|
BigDecimal quantityLot = result.sum3().abs();
|
||||||
BigDecimal price = swapPriceCalc(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
|
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,
|
public FinalCalculationResult calcAndEnrichSpot(SettleCode settleCode,
|
||||||
|
|
@ -76,7 +76,7 @@ public class OrderCalculationService {
|
||||||
price = rates.getUnitRate().add(delta).setScale(listing.getPrecision().intValue(), RoundingMode.HALF_UP);;
|
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) {
|
private CalculationResult calculationSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
||||||
|
|
@ -94,7 +94,8 @@ public class OrderCalculationService {
|
||||||
}
|
}
|
||||||
BigDecimal rateValue = sCrossRates.getUnitRate();
|
BigDecimal rateValue = sCrossRates.getUnitRate();
|
||||||
BigDecimal sum2 = planPositionRub.divide(rateValue, lotSize, RoundingMode.HALF_DOWN);
|
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 sum4 = sum3.multiply(rateValue, MC).negate();
|
||||||
BigDecimal sum5 = sum3.negate();
|
BigDecimal sum5 = sum3.negate();
|
||||||
|
|
||||||
|
|
@ -116,13 +117,14 @@ public class OrderCalculationService {
|
||||||
}
|
}
|
||||||
BigDecimal rateValue = sCrossRates.getUnitRate();
|
BigDecimal rateValue = sCrossRates.getUnitRate();
|
||||||
|
|
||||||
BigDecimal sum1 = planPosition.divide(rateValue, MC);
|
BigDecimal sum1 = planPosition.divide(rateValue, MC).abs();
|
||||||
|
|
||||||
Registry amtRegistry = imdgQueryService.findAmtRegistry(registry, "CNY");
|
Registry amtRegistry = imdgQueryService.findAmtRegistry(registry, "CNY");
|
||||||
BigDecimal planPositionCny = amtRegistry.getBalance();
|
BigDecimal planPositionCny = amtRegistry.getBalance();
|
||||||
|
|
||||||
BigDecimal sum2 = planPositionCny.setScale(lotSize, RoundingMode.HALF_DOWN);
|
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 sum4 = sum3.multiply(rateValue, MC).negate();
|
||||||
BigDecimal sum5 = sum3.negate();
|
BigDecimal sum5 = sum3.negate();
|
||||||
|
|
||||||
|
|
@ -150,4 +152,8 @@ public class OrderCalculationService {
|
||||||
private boolean isRub(Registry registry) {
|
private boolean isRub(Registry registry) {
|
||||||
return "RUB".equals(registry.getSecuritySymbol());
|
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();
|
.build();
|
||||||
|
|
||||||
FinalCalculationResult finalCalculationResult = swapCalculationService.calcAndEnrichSwap(SettleCode.T1, context);
|
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");
|
log.warn("QuantityLot greater than zero; skip forming order currency");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue