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 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());
|
||||
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);
|
||||
//Математическое округление кратное lotSize
|
||||
BigDecimal sum3 = mathCeil(sum1, lotSize);
|
||||
BigDecimal sum4 = sum3.multiply(rateValue, MC).negate();
|
||||
BigDecimal sum5 = sum3.negate();
|
||||
|
|
@ -106,7 +99,7 @@ public class OrderCalculationService {
|
|||
|
||||
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) {
|
||||
|
|
@ -154,6 +147,6 @@ public class OrderCalculationService {
|
|||
}
|
||||
|
||||
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;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
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.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.platform.enumeration.CompanyRole;
|
||||
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||
import ru.spcex.platform.enumeration.OvernightType;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.SettleCode;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
@Service
|
||||
public class SpotOvernightOrderService {
|
||||
|
|
@ -47,6 +50,7 @@ public class SpotOvernightOrderService {
|
|||
CounterpartyInfo categoryP = imdgQueryService.getCompanyByClearingCategory("P");
|
||||
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
|
||||
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
|
||||
CurrencyCode currency = IEnumKey.getEnumByKey(CurrencyCode.class, registry.getSecuritySymbol());
|
||||
|
||||
OrderCurrencyContext context = OrderCurrencyContext.builder()
|
||||
.registry(registry)
|
||||
|
|
@ -61,6 +65,12 @@ public class SpotOvernightOrderService {
|
|||
|
||||
FinalCalculationResult finalCalculationResultT0 = swapCalculationService.calcAndEnrichSpot(SettleCode.T0, 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 counterTransferT0 = templateBuilder.buildCounterTransfer(context, SettleCode.T0, finalCalculationResultT0);
|
||||
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.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.platform.enumeration.CompanyRole;
|
||||
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||
import ru.spcex.platform.enumeration.OvernightType;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.SettleCode;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
@Service
|
||||
public class SwapOvernightOrderService {
|
||||
|
|
@ -48,7 +50,7 @@ public class SwapOvernightOrderService {
|
|||
CounterpartyInfo categoryP = imdgQueryService.getCompanyByClearingCategory("P");
|
||||
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
|
||||
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
|
||||
|
||||
CurrencyCode currency = IEnumKey.getEnumByKey(CurrencyCode.class, registry.getSecuritySymbol());
|
||||
OrderCurrencyContext context = OrderCurrencyContext.builder()
|
||||
.registry(registry)
|
||||
.orderCategory(orderCategory)
|
||||
|
|
@ -61,7 +63,8 @@ public class SwapOvernightOrderService {
|
|||
.build();
|
||||
|
||||
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");
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue