This commit is contained in:
parent
f6739f58ea
commit
be0d90a210
4 changed files with 51 additions and 14 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue