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