Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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();
            }
        }