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 8f891adeb..e6da65351 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 @@ -217,7 +217,7 @@ public class ImdgQueryService { pb.equals("currencyPairId", currencyPairDictionaryId) ) ); - return isRub ? riskParameter.getValue() : riskParameter.getQuoteValue(); + return isRub ? riskParameter.getQuoteValue() : riskParameter.getValue(); } public CurrencyPairDictionary getCurrencyPairDictionaryBySecurityId(Long securityId) { 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 17c860266..af5d89260 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 @@ -50,6 +50,7 @@ public class OrderCalculationService { order.setPrice(price); order.setQuantityLot(quantityLot); + order.setRate(s); } public void calcAndEnrichSpot(OrderCurrency order, @@ -90,8 +91,12 @@ public class OrderCalculationService { BigDecimal planPositionRub = rubRegistry.getBalance(); Rates rates = imdgQueryService.getRate(registry.getSecuritySymbol(), LocalDate.now()); - BigDecimal rateValue = rates.getValue(); + SCrossRate sCrossRates = imdgQueryService.getSCrossRates(registry.getSecuritySymbol(), LocalDate.now()); + if (sCrossRates == null) { + throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey())); + } + BigDecimal rateValue = sCrossRates.getUnitRate(); BigDecimal sum2 = planPositionRub.divide(rateValue, lotSize, RoundingMode.HALF_DOWN); BigDecimal sum3 = sum1.setScale(lotSize, RoundingMode.CEILING); BigDecimal sum4 = sum3.multiply(rateValue, MC).negate(); @@ -117,10 +122,10 @@ public class OrderCalculationService { BigDecimal sum1 = planPosition.divide(rateValue, MC); - Registry cnyRegistry = imdgQueryService.findAmtRegistry(registry, "CNY"); - BigDecimal planPositionCny = cnyRegistry.getBalance(); + Registry amtRegistry = imdgQueryService.findAmtRegistry(registry, "CNY"); + BigDecimal planPositionCny = amtRegistry.getBalance(); - BigDecimal sum2 = planPositionCny.divide(rateValue, lotSize, RoundingMode.HALF_DOWN); + BigDecimal sum2 = planPositionCny.setScale(lotSize, RoundingMode.HALF_DOWN); BigDecimal sum3 = sum1.setScale(lotSize, RoundingMode.CEILING).min(sum2).negate(); BigDecimal sum4 = sum3.multiply(rateValue, MC).negate(); BigDecimal sum5 = sum3.negate(); diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java index 2af0fa2ef..03faf6e79 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java @@ -214,26 +214,26 @@ public class OrderTemplateBuilder { order.setCreated(Instant.now()); } - private Side resolvePrimaryTransferSide(Registry registry, SettleCode settleCode) { - Side side = T0 == settleCode ? Side.BUY : Side.SELL; - return isRub(registry) ? side : side.revers(); - } - - private Side resolveCounterTransferSide(Registry registry, SettleCode settleCode) { + public Side resolvePrimaryTransferSide(Registry registry, SettleCode settleCode) { Side side = T0 == settleCode ? Side.SELL : Side.BUY; return isRub(registry) ? side : side.revers(); } - private Side resolvePrimaryBalancingSide(Registry registry, SettleCode settleCode) { - Side side = T0 == settleCode ? Side.SELL : Side.BUY; + public Side resolveCounterTransferSide(Registry registry, SettleCode settleCode) { + Side side = T0 == settleCode ? Side.BUY : Side.SELL; return isRub(registry) ? side : side.revers(); } - private Side resolveCounterBalancingSide(Registry registry, SettleCode settleCode) { + public Side resolvePrimaryBalancingSide(Registry registry, SettleCode settleCode) { Side side = T0 == settleCode ? Side.BUY : Side.SELL; return isRub(registry) ? side : side.revers(); } + public Side resolveCounterBalancingSide(Registry registry, SettleCode settleCode) { + Side side = T0 == settleCode ? Side.SELL : Side.BUY; + return isRub(registry) ? side : side.revers(); + } + private boolean isRub(Registry registry) { return "RUB".equals(registry.getSecuritySymbol()); } diff --git a/clearing-parent/default-management/src/test/java/ru/spcex/clearing/dflt/service/OrderTemplateBuilderTest.java b/clearing-parent/default-management/src/test/java/ru/spcex/clearing/dflt/service/OrderTemplateBuilderTest.java new file mode 100644 index 000000000..38bb174a2 --- /dev/null +++ b/clearing-parent/default-management/src/test/java/ru/spcex/clearing/dflt/service/OrderTemplateBuilderTest.java @@ -0,0 +1,32 @@ +package ru.spcex.clearing.dflt.service; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.dflt.management.service.OrderTemplateBuilder; +import ru.spcex.platform.enumeration.SettleCode; +import ru.spcex.platform.enumeration.Side; + +public class OrderTemplateBuilderTest { + + @Test + public void testSwapNotRubT1() { + OrderTemplateBuilder builder = new OrderTemplateBuilder(null); + Assertions.assertEquals(Side.SELL, builder.resolvePrimaryTransferSide(createNotRubRegistry(), SettleCode.T1)); + Assertions.assertEquals(Side.BUY, builder.resolvePrimaryTransferSide(createRubRegistry(), SettleCode.T1)); + Assertions.assertEquals(Side.BUY, builder.resolvePrimaryTransferSide(createNotRubRegistry(), SettleCode.T0)); + Assertions.assertEquals(Side.SELL, builder.resolvePrimaryTransferSide(createNotRubRegistry(), SettleCode.T1)); + } + + public static Registry createNotRubRegistry() { + Registry registry = new Registry(); + registry.setSecuritySymbol("CNY"); + return registry; + } + + public static Registry createRubRegistry() { + Registry registry = new Registry(); + registry.setSecuritySymbol("RUB"); + return registry; + } +}