Пример #1
0
 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();
             }
         }
     }
 }
Пример #2
0
        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)));
        }
Пример #3
0
 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);
     }
 }