etreschenkov 2026-04-29 12:42:53 +03:00
parent f6739f58ea
commit be0d90a210
4 changed files with 51 additions and 14 deletions

View file

@ -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) {

View file

@ -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();

View file

@ -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());
}

View file

@ -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;
}
}