This commit is contained in:
parent
5c20cde107
commit
8d1797eb4b
2 changed files with 23 additions and 9 deletions
|
|
@ -12,6 +12,7 @@ import ru.clearing.classes.statics.data.misc.Listing;
|
|||
import ru.clearing.classes.statics.data.misc.Market;
|
||||
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
||||
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
||||
import ru.clearing.classes.statics.data.misc.SCrossRate;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
||||
|
|
@ -41,6 +42,7 @@ public class ImdgQueryService {
|
|||
private final Imdg<Market> marketImdg;
|
||||
private final Imdg<RiskParameter> riskParameterImdg;
|
||||
private final Imdg<Rates> ratesImdg;
|
||||
private final Imdg<SCrossRate> sCrossRateImdg;
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<OvernightSettings> overnightSettingsImdg;
|
||||
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
||||
|
|
@ -57,6 +59,7 @@ public class ImdgQueryService {
|
|||
this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class);
|
||||
this.riskParameterImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RiskParameter, RiskParameter.class);
|
||||
this.ratesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Rates, Rates.class);
|
||||
this.sCrossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class);
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
|
||||
this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class);
|
||||
|
|
@ -177,6 +180,16 @@ public class ImdgQueryService {
|
|||
);
|
||||
}
|
||||
|
||||
public SCrossRate getSCrossRates(String currency, LocalDate date) {
|
||||
ImdgPredicateBuilder pb = sCrossRateImdg.predicateBuilder();
|
||||
return sCrossRateImdg.getSingleObjectByPredicate(
|
||||
pb.and(
|
||||
pb.equals("currency", currency),
|
||||
pb.equals("date", date)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public BigDecimal defineTransferRate(Long currencyPairDictionaryId, String securitySymbol) {
|
||||
ImdgPredicateBuilder pb = riskParameterImdg.predicateBuilder();
|
||||
String baseCurrency = "RUB".equals(securitySymbol) ? "CNY" : securitySymbol;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import java.time.LocalDate;
|
|||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.misc.Listing;
|
||||
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
||||
import ru.clearing.classes.statics.data.misc.SCrossRate;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.security.Rates;
|
||||
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
||||
|
|
@ -37,8 +38,8 @@ public class OrderCalculationService {
|
|||
BigDecimal n = transferDateService.numberOfDaysOfTransfer();
|
||||
|
||||
CalculationResult result = isRub(registry)
|
||||
? calculationSwapRubSums(registry, listing.getLotSize().intValue(), s, n)
|
||||
: calculationSwapSums(registry, listing.getLotSize().intValue(), s, n);
|
||||
? calculationRubSums(registry, listing.getLotSize().intValue(), s, n)
|
||||
: calculationSums(registry, listing.getLotSize().intValue(), s, n);
|
||||
|
||||
BigDecimal quantityLot = result.sum3().abs();
|
||||
BigDecimal price = swapPriceCalc(pair.getBaseCurrency(), s, n);
|
||||
|
|
@ -57,26 +58,26 @@ public class OrderCalculationService {
|
|||
BigDecimal n = transferDateService.numberOfDaysOfTransfer();
|
||||
|
||||
CalculationResult result = isRub(registry)
|
||||
? calculationSwapRubSums(registry, listing.getLotSize().intValue(), s, n)
|
||||
: calculationSwapSums(registry, listing.getLotSize().intValue(), s, n);
|
||||
? calculationRubSums(registry, listing.getLotSize().intValue(), s, n)
|
||||
: calculationSums(registry, listing.getLotSize().intValue(), s, n);
|
||||
|
||||
Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), LocalDate.now());
|
||||
SCrossRate rates = imdgQueryService.getSCrossRates(pair.getBaseCurrency(), LocalDate.now());
|
||||
BigDecimal quantityLot;
|
||||
BigDecimal price;
|
||||
if (SettleCode.T0.equalsByKey(order.getSettleCode())) {
|
||||
quantityLot = result.sum3().abs();
|
||||
price = rates.getValue();
|
||||
price = rates.getUnitRate();
|
||||
} else {
|
||||
quantityLot = result.sum5().abs();
|
||||
BigDecimal delta = swapPriceCalc(pair.getBaseCurrency(), s, n);
|
||||
price = rates.getValue().add(delta);
|
||||
price = rates.getUnitRate().add(delta);
|
||||
}
|
||||
|
||||
order.setPrice(price);
|
||||
order.setQuantityLot(quantityLot);
|
||||
}
|
||||
|
||||
private CalculationResult calculationSwapSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
||||
private CalculationResult calculationSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
||||
BigDecimal planPosition = registry.getBalance();
|
||||
BigDecimal sum1 = planPosition.abs();
|
||||
|
||||
|
|
@ -101,7 +102,7 @@ public class OrderCalculationService {
|
|||
return new CalculationResult(sum1, sum2, sum3, sum4, sum5, sum6);
|
||||
}
|
||||
|
||||
private CalculationResult calculationSwapRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
||||
private CalculationResult calculationRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
||||
BigDecimal planPosition = registry.getBalance();
|
||||
Rates cnyRate = imdgQueryService.getRate(registry.getSecuritySymbol(), LocalDate.now());
|
||||
BigDecimal rateValue = cnyRate.getValue();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue