/// <summary> /// Обработка заявки как уже существующей /// </summary> private OrderStateChangeMessage HandleOrderStateAsOrderStateChange(Order order, OrderStatus message) { Logger.Debug().Print( "Order state change received", LogFields.ExchangeOrderId(message.order_id), LogFields.ChainOrderId(message.chain_order_id), LogFields.State(ConvertionHelper.GetOrderState(message)), LogFields.AccountId(message.account_id), LogFields.ExecOrderId(message.exec_order_id) ); using (ordersLock.Lock()) { Guid transactionId; if (!Guid.TryParse(message.order.cl_order_id, out transactionId)) { Logger.Debug().Print( $"Unable to parse {LogFieldNames.TransactionId} from {LogFields.ClOrderId(message.order.cl_order_id)}. Use order's {LogFieldNames.TransactionId}" ); transactionId = order.TransactionId; } var change = new OrderStateChangeMessage { OrderExchangeId = message.chain_order_id, TransactionId = transactionId, ActiveQuantity = message.remaining_qty, FilledQuantity = message.fill_qty, Price = instrumentResolver.ConvertPriceBack(order.Instrument, message.order.limit_price), ChangeTime = adapter.ResolveDateTime(message.status_utc_time), Quantity = message.remaining_qty + message.fill_qty, State = ConvertionHelper.GetOrderState(message) }; // Обработка изменения order_id (происходит при модификации заявки) if (order.OrderExchangeId != change.OrderExchangeId) { ordersByOrderExchangeId.Remove(order.OrderExchangeId); ordersByOrderExchangeId.Add(change.OrderExchangeId, order); } orderStatusByChainOrderId[message.chain_order_id] = message; //order.AcceptStateMessage(change); return(change); } }