private void Hit(BO.Order order, DateTime hitTime) { try { Debug.WriteLine("Hit Order"); if (order.ShouldClose) { this.CloseOrder(order); Debug.WriteLine("should close"); } else { order.Hit(hitTime); } } catch (Exception ex) { Logger.Error(ex); } finally { if (!order.IsClosed) { Debug.WriteLine("order is not closed"); lock (_mutex) { order.CalculateNextHitTime(); _waitingForCloseOrders.Add(order); this.StartHitTimer(); } } } }
internal void CloseOrder(BO.Order order) { var account = order.Owner.Owner; var addCommand = AddBOTransactionCommandFactory.Default.CreateByClose(account, order); addCommand.Execute(); var closeTran = addCommand.Result; iExchangeEngine.Default.Execute(new OrderExecuteEventArgs(ExecuteContext.CreateExecuteDirectly(account.Id, closeTran.Id, ExecuteStatus.Filled))); }
private void StartHitTimer() { Debug.WriteLine("StartHitTimer"); if (_waitingForCloseOrders.Count > 0) { Debug.WriteLine(string.Format("StartHitTimer, waitingForCloseOrders.Count = {0}", _waitingForCloseOrders.Count)); BO.Order order = _waitingForCloseOrders.Min; TimeSpan dueTime = order.NextHitTime - Market.MarketManager.Now; if (dueTime < TimeSpan.Zero) { dueTime = TimeSpan.Zero; } this.ChangeTimer(dueTime); } }