This commit is contained in:
parent
f8c8f92401
commit
4afb58f140
2 changed files with 41 additions and 2 deletions
|
|
@ -26,11 +26,13 @@ import ru.spcex.platform.enumeration.CompanyRole;
|
|||
import ru.spcex.platform.enumeration.MarketType;
|
||||
import ru.spcex.platform.enumeration.OrderStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
@Service
|
||||
public class ImdgQueryService {
|
||||
|
|
@ -316,6 +318,23 @@ public class ImdgQueryService {
|
|||
return registryImdg.getSingleObjectByID(id);
|
||||
}
|
||||
|
||||
public Registry findRegistry(Registry pm_t, RegistryTradingParams rgsParam, String securitySymbol) {
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
return registryImdg.getSingleObjectByPredicate(
|
||||
pb.and(
|
||||
RegistryCodeSqlBuilder.getInstance(rgsParam).buildPredicate(pb),
|
||||
pb.equals("securitySymbol", securitySymbol),
|
||||
pb.or(
|
||||
pb.equals("registryStatus", RegistryStatus.PROC.getKey()),
|
||||
pb.equals("registryStatus", RegistryStatus.MNG.getKey())
|
||||
),
|
||||
pb.equals("tradingClearingRegistryId", pm_t.getTradingClearingRegistryId()),
|
||||
pb.equals("companyId", pm_t.getCompanyId()),
|
||||
pb.equals("settlementDate", LocalDate.now())
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public Registry findAmtRegistry(Registry registry, String securitySymbol) {
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
return registryImdg.getSingleObjectByPredicate(
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@ import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
|||
import ru.spcex.clearing.dflt.management.model.CalculationResult;
|
||||
import ru.spcex.clearing.dflt.management.model.FinalCalculationResult;
|
||||
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithId;
|
||||
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.SettleCode;
|
||||
|
||||
@Service
|
||||
|
|
@ -117,8 +119,18 @@ public class OrderCalculationService {
|
|||
|
||||
BigDecimal sum1 = planPosition.divide(rateValue, MC).abs();
|
||||
|
||||
Registry amtRegistry = imdgQueryService.findAmtRegistry(registry, "CNY");
|
||||
BigDecimal planPositionCny = amtRegistry.getBalance();
|
||||
Registry amtRegistry = imdgQueryService.findRegistry(registry, RegistryTradingParams.AM_T, "CNY");
|
||||
Registry omt = imdgQueryService.findRegistry(registry, RegistryTradingParams.OM_T, "CNY");
|
||||
Registry tmt = imdgQueryService.findRegistry(registry, RegistryTradingParams.TM_T, "CNY");
|
||||
log.trace("calculation for {}[{}]: {}[{}], {}[{}], {}[{}]",
|
||||
registry.getRegistryCode(),
|
||||
registry.getId(),
|
||||
logRegCode(amtRegistry), logId(amtRegistry),
|
||||
logRegCode(omt), logId(omt),
|
||||
logRegCode(tmt), logId(tmt));
|
||||
BigDecimal planPositionCny = amtRegistry.getBalance()
|
||||
.subtract(omt.getBalance())
|
||||
.add(tmt.getBalance());
|
||||
|
||||
BigDecimal sum2 = planPositionCny.setScale(lotSize, RoundingMode.HALF_DOWN);
|
||||
BigDecimal y = sum1.min(sum2);
|
||||
|
|
@ -136,6 +148,14 @@ public class OrderCalculationService {
|
|||
return new CalculationResult(sum1, sum2, sum3, sum4, sum5, sum6);
|
||||
}
|
||||
|
||||
private String logId(WithId obj) {
|
||||
return obj != null ? String.valueOf(obj.getId()) : "null";
|
||||
}
|
||||
|
||||
private String logRegCode(Registry obj) {
|
||||
return obj != null ? String.valueOf(obj.getRegistryCode()) : "null";
|
||||
}
|
||||
|
||||
private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n, int precision) {
|
||||
Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now());
|
||||
BigDecimal p = n.divide(BigDecimal.valueOf(365), MC);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue