diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java index ce09dd2f0..87646ab72 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java @@ -191,7 +191,7 @@ public class TaskListener extends QueueConsumer implements InitializingBean { Registry amfRegistry = null; boolean isRubPmt = pmtRegistry.getSecuritySymbol().equals(CurrencyCode.RUB.getKey()); if (!isRubPmt) { - amfRegistry = imdgQueryService.findAmtRegistry(pmtRegistry, CurrencyCode.RUB.getKey()); + amfRegistry = imdgQueryService.findAmfRegistry(pmtRegistry, CurrencyCode.RUB.getKey()); } String currency = isRubPmt ? CurrencyCode.CNY.getKey() : pmtRegistry.getSecuritySymbol(); diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java index 8aad52e79..b220ba811 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java @@ -329,7 +329,7 @@ public class ImdgQueryService { ); } - public Registry findAmtRegistry(Registry registry, String securitySymbol) { + public Registry findAmfRegistry(Registry registry, String securitySymbol) { ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); return registryImdg.getSingleObjectByPredicate( pb.and( diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java index bbe000b63..1e697cc3b 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java @@ -94,7 +94,7 @@ public class OrderCalculationService { throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey())); } BigDecimal rateValue = rates.getValue(); - BigDecimal sum3 = mathCeil(sum1, lotSize); + BigDecimal sum3 = sum1.divide(BigDecimal.valueOf(lotSize), 0, RoundingMode.DOWN); BigDecimal sum4 = sum3.multiply(rateValue, MC).negate(); BigDecimal sum5 = sum3.negate(); @@ -116,12 +116,12 @@ public class OrderCalculationService { } BigDecimal rateValue = rates.getValue(); - BigDecimal sum1 = planPosition.divide(rateValue, MC).abs(); + BigDecimal sum1 = planPosition.divide(rateValue, MC).abs(); //sum1 - рубли в юани - Registry am_f = imdgQueryService.findAmtRegistry(registry, "CNY"); + Registry am_f = imdgQueryService.findAmfRegistry(registry, "CNY"); Collection om_ts = imdgQueryService.findOTRegistry(registry, RegistryTradingParams.OM_T, "CNY"); Collection tm_ts = imdgQueryService.findOTRegistry(registry, RegistryTradingParams.TM_T, "CNY"); - log.trace("calculation for {}[{}]: AM*T[{}], OM*T[{}], TM*T[{}]", + log.trace("calculation for {}[{}]: AM*F[{}], OM*T[{}], TM*T[{}]", registry.getRegistryCode(), registry.getId(), am_f != null ? am_f.getId() : null, @@ -132,8 +132,12 @@ public class OrderCalculationService { .add(safeSumBD(tm_ts, Registry::getBalance)); BigDecimal sum2 = planPositionCny.setScale(lotSize, RoundingMode.HALF_DOWN); - BigDecimal y = sum1.min(sum2); - BigDecimal sum3 = mathCeil(y, lotSize).negate(); + BigDecimal lotSizBC = BigDecimal.valueOf(lotSize); + BigDecimal lotSizeCny = sum1.divide(lotSizBC, 0, RoundingMode.DOWN); + BigDecimal lotSizeCnyByAmf = sum2.divide(lotSizBC, 0, RoundingMode.DOWN); + log.trace("quantityLot by pmt: {}/{}={}", sum1, lotSizeCny, lotSizeCny); + log.trace("quantityLot by amf: {}/{}={}", sum2, lotSizeCny, lotSizeCnyByAmf); + BigDecimal sum3 = lotSizeCny.min(lotSizeCnyByAmf).negate(); BigDecimal sum4 = sum3.multiply(rateValue, MC).negate(); BigDecimal sum5 = sum3.negate(); @@ -170,7 +174,7 @@ public class OrderCalculationService { return "RUB".equals(registry.getSecuritySymbol()); } - private BigDecimal mathCeil(BigDecimal val, Integer multiplicity) { + public static BigDecimal mathCeil(BigDecimal val, Integer multiplicity) { return BigDecimal.valueOf(Math.ceil(val.doubleValue() / multiplicity)); } }