Пример #1
0
        private void OrderBook_TradeCompleted(object sender, TradeCompletedEventArgs e)
        {
            LastTradedPrice = e.LastTradedPrice;

            TradeCompleted?.Invoke(this, e);

            System.Diagnostics.Debug.Print(LastTradedPrice.ToString());
        }
Пример #2
0
 public void ExecuteTrade(Order order, List <Order> matchingOrders)
 {
     Trade trade            = new Trade(order.Symbol, order.Exchange);
     long  quantityRequired = order.Quantity;
     //if (order.Transaction == TransactionType.Buy)
     {
         foreach (var sOrder in matchingOrders)
         {
             //Single seller has sufficient Quantity
             if (quantityRequired <= sOrder.Quantity)
             {
                 trade.UpdateTrade(sOrder.Price, quantityRequired);
             }
             else
             {
                 trade.UpdateTrade(sOrder.Price, sOrder.Quantity);
             }
             if (quantityRequired == trade.Quantity || sOrder.Quantity == trade.Quantity)
             {
                 //Trade Finished
                 TradeCompleted?.Invoke(this, new TradeCompletedEventArgs(trade));
                 if (order.Quantity == trade.Quantity)
                 {
                     sOrder.Quantity -= trade.Quantity;
                     order.Status     = OrderStatus.Completed;
                     order.OrderSubmitted(OrderStatus.Completed);
                     if (sOrder.Quantity == 0)
                     {
                         sOrder.Status = OrderStatus.Completed;
                     }
                 }
                 else
                 {
                     order.Quantity -= trade.Quantity;
                     sOrder.Status   = OrderStatus.Completed;
                     sOrder.OrderSubmitted(OrderStatus.Completed);
                 }
                 break;
             }
         }
         TradeList.Add(trade);
     }
 }
 protected virtual void OnTradeCompleted(TradeResult result)
 {
     TradeCompleted?.Invoke(result);
 }