Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
2a8fbad2dc
5 changed files with 30 additions and 29 deletions
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
{
|
||||
"version": "3.23.295.167",
|
||||
"version": "3.23.295.168",
|
||||
|
||||
"enums": {
|
||||
|
||||
|
|
@ -11755,7 +11755,7 @@
|
|||
}
|
||||
,
|
||||
{"code": "market",
|
||||
"type": 12,"name": "Код режима торгов","shortname": "Режим торгов","visible": true,"searchable": true,"sortable": true,"link": "market","linkCode": "code"
|
||||
"type": 12,"name": "Код режима торгов","shortname": "Режим торгов","visible": true,"searchable": true,"sortable": true
|
||||
}
|
||||
,
|
||||
{"code": "status",
|
||||
|
|
@ -11843,7 +11843,7 @@
|
|||
}
|
||||
,
|
||||
{"code": "market",
|
||||
"type": 12,"name": "Код режима торгов","shortname": "Режим торгов","link": "market","linkCode": "code","enabled": false,"required": true
|
||||
"type": 12,"name": "Код режима торгов","shortname": "Режим торгов","enabled": false,"required": true
|
||||
}
|
||||
,
|
||||
{"code": "price",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
|
||||
<meta version="3.23.295.167">
|
||||
<meta version="3.23.295.168">
|
||||
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
|
||||
<!--Здесь словари-->
|
||||
<enums>
|
||||
|
|
@ -2729,7 +2729,7 @@
|
|||
<account type="2" length="50" name="Торговый счет" shortname="Счет" searchable="true" sortable="true" visible="true"/>
|
||||
<companyId type="1" dbname="Идентификатор участника" name="Наименование участника" shortname="Участник" searchable="true" sortable="true" visible="true" link="company" linkCode="shortName"/>
|
||||
<tradingCode type="2" length="255" name="Код участника торгов" shortname="Код УТ" searchable="true" sortable="true" visible="true"/>
|
||||
<market type="12" name="Код режима торгов" shortname="Режим торгов" visible="true" searchable="true" sortable="true" link="market" linkCode="code"/>
|
||||
<market type="12" name="Код режима торгов" shortname="Режим торгов" visible="true" searchable="true" sortable="true"/>
|
||||
<status type="2" length="4" name="Статус заявки" shortname="Статус" link="orderStatus" searchable="true" sortable="true" visible="true"/>
|
||||
<price type="10" name="Цена заявки" shortname="Цена" searchable="true" sortable="true" visible="true"/>
|
||||
<quantityLot type="3" name="Объем заявки в лотах" shortname="Объем заявки в лотах" searchable="true" sortable="true" visible="false"/>
|
||||
|
|
@ -2751,7 +2751,7 @@
|
|||
<put name="Изменение заявки" class="ru.spcex.clearing.backendapi.controller.request.cud.order.OrderCurrencyUpdateAction">
|
||||
<id type="1" name="Идентификатор записи" shortname="ID" link="orderCurrency" linkCode="id" required="true"/>
|
||||
<securityId type="1" name="Наименование инструмента" shortname="Инструмент" link="security" linkCode="shortName" enabled="false" required="true"/>
|
||||
<market type="12" name="Код режима торгов" shortname="Режим торгов" link="market" linkCode="code" enabled="false" required="true"/>
|
||||
<market type="12" name="Код режима торгов" shortname="Режим торгов" enabled="false" required="true"/>
|
||||
<price type="10" name="Цена заявки" shortname="Цена" required="true"/>
|
||||
<quantityLot type="3" name="Объем заявки в лотах" shortname="Объем заявки" required="true"/>
|
||||
<side type="12" name="Направление заявки" shortname="Направление" required="true" link="side"/>
|
||||
|
|
|
|||
|
|
@ -7,5 +7,6 @@
|
|||
/* Business objects */
|
||||
|
||||
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1000, 'SCND', 'CURR', 'RUB', 'UVAK', 'Режим непрерывных торгов (торги иностранной валютой с Провайдером ликвидности)', 1, 'Continuous trading mode (foreign currency trading with a Liquidity Provider)') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
|
||||
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1001, 'SCSP', 'CURR', 'RUB', 'TVAK', 'Технический режим переговорных сделок для сделок урегулирования', 1, 'Technical negotiated deals mode for settlement') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
|
||||
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1002, 'SCSW', 'CURR', 'RUB', 'TVWK', 'Технический режим витринных переговорных сделок для сделок урегулирования', 1, 'Technical negotiated showcase deals mode for settlement') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
|
||||
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1001, 'SCND', 'CURR', 'RUB', 'NVAK', 'Режим анонимных переговорных сделок (торги иностранной валютой с Провайдером ликвидности)', 1, 'Anonimous negotiated deals mode (foreign currency trading with a Liquidity Provider)') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
|
||||
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (2002, 'SCSP', 'CURR', 'RUB', 'TVAK', 'Технический режим переговорных сделок для сделок урегулирования', 1, 'Technical negotiated deals mode for settlement') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
|
||||
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (2003, 'SCSW', 'CURR', 'RUB', 'TVWK', 'Технический режим витринных переговорных сделок для сделок урегулирования', 1, 'Technical negotiated showcase deals mode for settlement') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
|
||||
|
|
@ -46,7 +46,7 @@ public class OrderCalculationService {
|
|||
: calculationSums(registry, listing.getLotSize().intValue(), s, n);
|
||||
|
||||
BigDecimal quantityLot = result.sum3().abs();
|
||||
BigDecimal price = swapPriceCalc(pair.getBaseCurrency(), s, n);
|
||||
BigDecimal price = swapPriceCalc(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
|
||||
|
||||
return new FinalCalculationResult(price, s, quantityLot);
|
||||
}
|
||||
|
|
@ -69,11 +69,11 @@ public class OrderCalculationService {
|
|||
BigDecimal price;
|
||||
if (SettleCode.T0 == settleCode) {
|
||||
quantityLot = result.sum3().abs();
|
||||
price = rates.getUnitRate();
|
||||
price = rates.getUnitRate().setScale(listing.getPrecision().intValue(), RoundingMode.HALF_UP);
|
||||
} else {
|
||||
quantityLot = result.sum5().abs();
|
||||
BigDecimal delta = swapPriceCalc(pair.getBaseCurrency(), s, n);
|
||||
price = rates.getUnitRate().add(delta);
|
||||
BigDecimal delta = swapPriceCalc(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
|
||||
price = rates.getUnitRate().add(delta).setScale(listing.getPrecision().intValue(), RoundingMode.HALF_UP);;
|
||||
}
|
||||
|
||||
return new FinalCalculationResult(price, s, quantityLot);
|
||||
|
|
@ -136,7 +136,7 @@ public class OrderCalculationService {
|
|||
return new CalculationResult(sum1, sum2, sum3, sum4, sum5, sum6);
|
||||
}
|
||||
|
||||
private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n) {
|
||||
private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n, int precision) {
|
||||
Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now());
|
||||
BigDecimal p = BigDecimal.ONE.divide(n, MC);
|
||||
log.info("Calculation swap price: {}*{}*{}", s, n, p);
|
||||
|
|
@ -144,7 +144,7 @@ public class OrderCalculationService {
|
|||
.multiply(s, MC)
|
||||
.multiply(n, MC)
|
||||
.multiply(p, MC)
|
||||
.setScale(8, RoundingMode.HALF_UP);
|
||||
.setScale(precision, RoundingMode.HALF_UP);
|
||||
}
|
||||
|
||||
private boolean isRub(Registry registry) {
|
||||
|
|
|
|||
|
|
@ -113,17 +113,10 @@ public class Application extends MessageCracker implements quickfix.Application,
|
|||
ImdgTransaction transaction = imdgProvider.newTransaction();
|
||||
transaction.beginTransaction();
|
||||
try {
|
||||
if (executionReport.isSetField(OrderID.FIELD) && executionReport.isSetField(ExDestination.FIELD) && executionReport.isSetField(TransactTime.FIELD)) {
|
||||
if (executionReport.isSetField(OrderID.FIELD) && executionReport.isSetField(ExDestination.FIELD) && executionReport.isSetField(TransactTime.FIELD) && executionReport.isSetField(OrdStatus.FIELD)) {
|
||||
OrderID orderId = executionReport.getOrderID();
|
||||
ExDestination exDestination = (ExDestination) executionReport.getField(new ExDestination());
|
||||
TransactTime transactTime = executionReport.getTransactTime();
|
||||
SecurityID securityID = executionReport.getSecurityID();
|
||||
Price price = executionReport.getPrice();
|
||||
OrderQty orderQty = executionReport.getOrderQty();
|
||||
Account account = executionReport.getAccount();
|
||||
Side side = executionReport.getSide();
|
||||
Currency currency = executionReport.getCurrency();
|
||||
SettlType settlType = executionReport.getSettlType();
|
||||
OrdStatus ordStatus = executionReport.getOrdStatus();
|
||||
|
||||
Pattern orderIdPattern = Pattern.compile("(\\d{6})-([A-Z]+)-(\\d+)");
|
||||
|
|
@ -145,14 +138,20 @@ public class Application extends MessageCracker implements quickfix.Application,
|
|||
sOrders.setClassCode(exDestination.getValue());
|
||||
sOrders.setTradeDate(transactTime.getValue().toLocalDate());
|
||||
|
||||
sOrders.setSecCode(securityID.getValue());
|
||||
sOrders.setPrice(BigDecimal.valueOf(price.getValue()));
|
||||
sOrders.setQty(BigDecimal.valueOf(orderQty.getValue()));
|
||||
sOrders.setAccount(account.getValue());
|
||||
sOrders.setSettleCode(settlType.getValue());
|
||||
sOrders.setPriceCurrency(currency.getValue());
|
||||
sOrders.setState(String.valueOf(ordStatus.getValue()));
|
||||
if (executionReport.isSetSecurityID())
|
||||
sOrders.setSecCode(executionReport.getSecurityID().getValue());
|
||||
if (executionReport.isSetPrice())
|
||||
sOrders.setPrice(BigDecimal.valueOf(executionReport.getPrice().getValue()));
|
||||
if (executionReport.isSetOrderQty())
|
||||
sOrders.setQty(BigDecimal.valueOf(executionReport.getOrderQty().getValue()));
|
||||
if (executionReport.isSetAccount())
|
||||
sOrders.setAccount(executionReport.getAccount().getValue());
|
||||
if (executionReport.isSetSettlType())
|
||||
sOrders.setSettleCode(executionReport.getSettlType().getValue());
|
||||
if (executionReport.isSetCurrency())
|
||||
sOrders.setPriceCurrency(executionReport.getCurrency().getValue());
|
||||
|
||||
sOrders.setState(String.valueOf(ordStatus.getValue()));
|
||||
if (ordStatus.valueEquals(OrdStatus.NEW)) {
|
||||
sOrders.setOrderDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
|
||||
} else if (ordStatus.valueEquals(OrdStatus.CANCELED)) {
|
||||
|
|
@ -161,6 +160,7 @@ public class Application extends MessageCracker implements quickfix.Application,
|
|||
|
||||
sOrdersImdg.insert(sOrders);
|
||||
} else {
|
||||
sOrders.setState(String.valueOf(ordStatus.getValue()));
|
||||
if (ordStatus.valueEquals(OrdStatus.NEW)) {
|
||||
sOrders.setOrderDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
|
||||
} else if (ordStatus.valueEquals(OrdStatus.CANCELED)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue