private void RecreateOrder(Order order, bool copyDeviationInfo = false) { var newOrder = CreateOrder(order.LeavesQty, order.GetOpenClose(true)); if (copyDeviationInfo) { var info = OrderExtensions.GetOrderInfo(newOrder); var old = OrderExtensions.GetOrderInfo(order); info.DeviationInfo = old.DeviationInfo; } if (OpenOrder == order) { ClearOrder(ref OpenOrder); OpenOrder = newOrder; } else if (CloseOrder == order) { ClearOrder(ref CloseOrder); CloseOrder = newOrder; } else if (CloseTodayOrder == order) { ClearOrder(ref CloseTodayOrder); CloseTodayOrder = newOrder; } }
private void Clear() { OrderExtensions.GetOrderInfo(Order).Processor = null; ClearOrder(ref OpenOrder); ClearOrder(ref CloseOrder); ClearOrder(ref CloseTodayOrder); Agent.RemoveProcessor(this); }
private void ClearOrder(ref Order order) { if (order != null) { OrderExtensions.GetOrderInfo(order).Processor = null; order = null; } }
private void Clear() { OrderExtensions.GetOrderInfo(_order).processor = null; ClearOrder(ref openOrder); ClearOrder(ref closeOrder); ClearOrder(ref closeTodayOrder); _agent.RemoveProcessor(this); }
private static void ClearOrder(ref Order order) { if (order == null) { return; } OrderExtensions.GetOrderInfo(order).processor = null; order = null; }
public OrderProcessor(OrderAgent agent, Order order, Logger logger) { Agent = agent; Order = order; Manager = agent.GetPositionManager(order.strategyId); ListNode = agent.AddProcessor(this); _record = new OrderRecord(order); _info = OrderExtensions.GetOrderInfo(order); _logger = logger; InitRules(); }
public OrderProcessor(OrderAgent agent, Order order, Logger logger) { _agent = agent; _order = order; _position = agent.GetPosition(order); _record = new OrderRecord(order); _info = OrderExtensions.GetOrderInfo(order); _logger = logger; listNode = agent.AddProcessor(this); InitRules(); }
public virtual void OnReminder(DateTime dateTime, Order order) { var info = OrderExtensions.GetOrderInfo(order); if (CheckTryCount(info)) { _logger.Debug($"{Order.Id}, time deviation {info.DeviationInfo.TryCount}."); Agent.Cancel(order); } else { DoFailed(order); } }
private void CheckPriceDeviation(Order order) { var price = Order.Instrument.Trade.Price; var ask = Order.Instrument.Ask.Price; var bid = Order.Instrument.Bid.Price; if (IsDone(order) || IsNotSent(order)) { return; } var info = OrderExtensions.GetOrderInfo(order); if (Math.Abs(order.Price - price) > _info.DeviationInfo.Threshold) { Do(); } if (_info.DeviationMode == OrderDeviationMode.QuoteAndTrade) { if ((order.Side == OrderSide.Buy && Math.Abs(order.Price - ask) > _info.DeviationInfo.Threshold) || (order.Side == OrderSide.Sell && Math.Abs(order.Price - bid) > _info.DeviationInfo.Threshold)) { Do(); } } void Do() { if (CheckTryCount(info)) { _logger.Debug($"{Order.Id}, price deviation {info.DeviationInfo.TryCount}."); Agent.Cancel(order); } else { DoFailed(order); } } }
private Order CreateOrder(double qty, OpenCloseType openClose) { var order = Agent.CreateOrder(Order, qty); order.SetOpenClose(openClose); if (openClose == OpenCloseType.Open) { order.TimeInForce = Order.TimeInForce; } else { if (OpenOrder == null) { order.TimeInForce = Order.TimeInForce; } } var info = OrderExtensions.GetOrderInfo(order); info.Processor = this; info.ParentOrderId = Order.Id; info.DeviationInfo = _info.DeviationInfo; info.DeviationMode = _info.DeviationMode; return(order); }