This commit is contained in:
parent
34b0b4c097
commit
cabc01ca06
3 changed files with 17 additions and 11 deletions
|
|
@ -83,18 +83,11 @@ public class OrderCalculationService {
|
||||||
BigDecimal planPosition = registry.getBalance();
|
BigDecimal planPosition = registry.getBalance();
|
||||||
BigDecimal sum1 = planPosition.abs();
|
BigDecimal sum1 = planPosition.abs();
|
||||||
|
|
||||||
Registry rubRegistry = imdgQueryService.findAmtRegistry(registry, "RUB");
|
|
||||||
BigDecimal planPositionRub = rubRegistry.getBalance();
|
|
||||||
|
|
||||||
Rates rates = imdgQueryService.getRate(registry.getSecuritySymbol(), LocalDate.now());
|
|
||||||
|
|
||||||
SCrossRate sCrossRates = imdgQueryService.getSCrossRates(registry.getSecuritySymbol(), LocalDate.now());
|
SCrossRate sCrossRates = imdgQueryService.getSCrossRates(registry.getSecuritySymbol(), LocalDate.now());
|
||||||
if (sCrossRates == null) {
|
if (sCrossRates == null) {
|
||||||
throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey()));
|
throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey()));
|
||||||
}
|
}
|
||||||
BigDecimal rateValue = sCrossRates.getUnitRate();
|
BigDecimal rateValue = sCrossRates.getUnitRate();
|
||||||
BigDecimal sum2 = planPositionRub.divide(rateValue, lotSize, RoundingMode.HALF_DOWN);
|
|
||||||
//Математическое округление кратное lotSize
|
|
||||||
BigDecimal sum3 = mathCeil(sum1, 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();
|
||||||
|
|
@ -106,7 +99,7 @@ public class OrderCalculationService {
|
||||||
|
|
||||||
BigDecimal sum6 = sum3.multiply(rateValue, MC).multiply(multiplier, MC);
|
BigDecimal sum6 = sum3.multiply(rateValue, MC).multiply(multiplier, MC);
|
||||||
|
|
||||||
return new CalculationResult(sum1, sum2, sum3, sum4, sum5, sum6);
|
return new CalculationResult(sum1, BigDecimal.ZERO, sum3, sum4, sum5, sum6);
|
||||||
}
|
}
|
||||||
|
|
||||||
private CalculationResult calculationRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
private CalculationResult calculationRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
||||||
|
|
@ -154,6 +147,6 @@ public class OrderCalculationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private BigDecimal mathCeil(BigDecimal val, Integer multiplicity) {
|
private BigDecimal mathCeil(BigDecimal val, Integer multiplicity) {
|
||||||
return BigDecimal.valueOf(Math.ceil(val.doubleValue() / multiplicity) * multiplicity);
|
return BigDecimal.valueOf(Math.ceil(val.doubleValue() / multiplicity));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.spcex.clearing.dflt.management.service;
|
package ru.spcex.clearing.dflt.management.service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -12,11 +13,13 @@ import ru.spcex.clearing.dflt.management.model.FinalCalculationResult;
|
||||||
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
|
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.enumeration.CompanyRole;
|
import ru.spcex.platform.enumeration.CompanyRole;
|
||||||
|
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||||
import ru.spcex.platform.enumeration.OvernightType;
|
import ru.spcex.platform.enumeration.OvernightType;
|
||||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
import ru.spcex.platform.enumeration.SettleCode;
|
import ru.spcex.platform.enumeration.SettleCode;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class SpotOvernightOrderService {
|
public class SpotOvernightOrderService {
|
||||||
|
|
@ -47,6 +50,7 @@ public class SpotOvernightOrderService {
|
||||||
CounterpartyInfo categoryP = imdgQueryService.getCompanyByClearingCategory("P");
|
CounterpartyInfo categoryP = imdgQueryService.getCompanyByClearingCategory("P");
|
||||||
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
|
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
|
||||||
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
|
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
|
||||||
|
CurrencyCode currency = IEnumKey.getEnumByKey(CurrencyCode.class, registry.getSecuritySymbol());
|
||||||
|
|
||||||
OrderCurrencyContext context = OrderCurrencyContext.builder()
|
OrderCurrencyContext context = OrderCurrencyContext.builder()
|
||||||
.registry(registry)
|
.registry(registry)
|
||||||
|
|
@ -61,6 +65,12 @@ public class SpotOvernightOrderService {
|
||||||
|
|
||||||
FinalCalculationResult finalCalculationResultT0 = swapCalculationService.calcAndEnrichSpot(SettleCode.T0, context);
|
FinalCalculationResult finalCalculationResultT0 = swapCalculationService.calcAndEnrichSpot(SettleCode.T0, context);
|
||||||
FinalCalculationResult finalCalculationResultT1 = swapCalculationService.calcAndEnrichSpot(SettleCode.T1, context);
|
FinalCalculationResult finalCalculationResultT1 = swapCalculationService.calcAndEnrichSpot(SettleCode.T1, context);
|
||||||
|
|
||||||
|
if (CurrencyCode.RUB == currency &&
|
||||||
|
finalCalculationResultT0.calculationResult().sum3().compareTo(BigDecimal.ZERO) >= 0) {
|
||||||
|
log.warn("QuantityLot greater than zero; skip forming order currency");
|
||||||
|
return;
|
||||||
|
}
|
||||||
OrderCurrency primaryTransferT0 = templateBuilder.buildPrimaryTransfer(context, SettleCode.T0, finalCalculationResultT0);
|
OrderCurrency primaryTransferT0 = templateBuilder.buildPrimaryTransfer(context, SettleCode.T0, finalCalculationResultT0);
|
||||||
OrderCurrency counterTransferT0 = templateBuilder.buildCounterTransfer(context, SettleCode.T0, finalCalculationResultT0);
|
OrderCurrency counterTransferT0 = templateBuilder.buildCounterTransfer(context, SettleCode.T0, finalCalculationResultT0);
|
||||||
OrderCurrency primaryTransferT1 = templateBuilder.buildPrimaryTransfer(context, SettleCode.T1, finalCalculationResultT1);
|
OrderCurrency primaryTransferT1 = templateBuilder.buildPrimaryTransfer(context, SettleCode.T1, finalCalculationResultT1);
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,13 @@ import ru.spcex.clearing.dflt.management.model.FinalCalculationResult;
|
||||||
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
|
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.enumeration.CompanyRole;
|
import ru.spcex.platform.enumeration.CompanyRole;
|
||||||
|
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||||
import ru.spcex.platform.enumeration.OvernightType;
|
import ru.spcex.platform.enumeration.OvernightType;
|
||||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
import ru.spcex.platform.enumeration.SettleCode;
|
import ru.spcex.platform.enumeration.SettleCode;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class SwapOvernightOrderService {
|
public class SwapOvernightOrderService {
|
||||||
|
|
@ -48,7 +50,7 @@ public class SwapOvernightOrderService {
|
||||||
CounterpartyInfo categoryP = imdgQueryService.getCompanyByClearingCategory("P");
|
CounterpartyInfo categoryP = imdgQueryService.getCompanyByClearingCategory("P");
|
||||||
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
|
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
|
||||||
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
|
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
|
||||||
|
CurrencyCode currency = IEnumKey.getEnumByKey(CurrencyCode.class, registry.getSecuritySymbol());
|
||||||
OrderCurrencyContext context = OrderCurrencyContext.builder()
|
OrderCurrencyContext context = OrderCurrencyContext.builder()
|
||||||
.registry(registry)
|
.registry(registry)
|
||||||
.orderCategory(orderCategory)
|
.orderCategory(orderCategory)
|
||||||
|
|
@ -61,7 +63,8 @@ public class SwapOvernightOrderService {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
FinalCalculationResult finalCalculationResult = swapCalculationService.calcAndEnrichSwap(SettleCode.T1, context);
|
FinalCalculationResult finalCalculationResult = swapCalculationService.calcAndEnrichSwap(SettleCode.T1, context);
|
||||||
if (finalCalculationResult.calculationResult().sum3().compareTo(BigDecimal.ZERO) >= 0) {
|
if (CurrencyCode.RUB == currency &&
|
||||||
|
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