private void Chart_OnMoveOrder(Order oldOrder, decimal newPrice) { if (NeedToConfirm && !Confirm($"Move order to price={newPrice}?")) { var d = new ChartDrawData(); d.Add(_activeOrdersElement, oldOrder); Chart.Draw(d); return; } Log($"MoveOrder to {newPrice}: {oldOrder}"); if (IsInFinalState(oldOrder)) { Log("invalid state for re-register"); return; } var newOrder = new OrderEx { TransactionId = _idGenerator.GetNextId(), Type = OrderTypes.Limit, State = OrderStates.Pending, Price = newPrice, Volume = oldOrder.Balance, Direction = oldOrder.Direction, Balance = oldOrder.Balance, Security = oldOrder.Security, Portfolio = oldOrder.Portfolio, }; Chart.Draw(new ChartDrawData() .Add(_activeOrdersElement, oldOrder, true, price: newOrder.Price)); void MoveAction() { if (NeedToFail) { Log("Move failed"); newOrder.State = OrderStates.Failed; Chart.Draw(new ChartDrawData() .Add(_activeOrdersElement, oldOrder, isError: true, price: oldOrder.Price)); } else { oldOrder.State = OrderStates.Done; newOrder.State = OrderStates.Active; Log($"Order moved to new: {newOrder}"); Chart.Draw(new ChartDrawData() .Add(_activeOrdersElement, oldOrder) .Add(_activeOrdersElement, newOrder)); _orders.Remove(oldOrder); _orders.Add(newOrder); } } if (NeedToDelay) { DelayedAction(MoveAction, "move"); } else { MoveAction(); } }
private void Chart_OnMoveOrder(Order oldOrder, decimal newPrice) { var oiOld = GetOrderInfo(oldOrder); if (NeedToConfirm && !Confirm($"Move order to price={newPrice}?")) { oiOld.UpdateOrderState(oldOrder); return; } Log($"MoveOrder to {newPrice}: {oldOrder}"); if (IsInFinalState(oldOrder)) { Log("invalid state for re-register"); return; } var newOrder = new OrderEx { TransactionId = ++_transId, Type = OrderTypes.Limit, State = OrderStates.Pending, Price = newPrice, Volume = oldOrder.Balance, Direction = oldOrder.Direction, Balance = oldOrder.Balance, Security = oldOrder.Security, Portfolio = oldOrder.Portfolio, }; var oiNew = GetOrderInfo(newOrder, oiOld); oiOld.UpdateOrderState(oldOrder); oiOld.IsFrozen = oiNew.IsFrozen = true; void MoveAction() { if (NeedToFail) { Log("Move failed"); oiOld.UpdateOrderState(oldOrder, true); newOrder.State = OrderStates.Failed; oiNew.UpdateOrderState(newOrder, true); } else { oldOrder.State = OrderStates.Done; oiOld.UpdateOrderState(oldOrder); newOrder.State = OrderStates.Active; oiNew.UpdateOrderState(newOrder); Log($"Order moved to new: {newOrder}"); } } if (NeedToDelay) { DelayedAction(MoveAction, _delay, "move"); } else { MoveAction(); } }