private void OrderBook_TradeCompleted(object sender, TradeCompletedEventArgs e) { LastTradedPrice = e.LastTradedPrice; TradeCompleted?.Invoke(this, e); System.Diagnostics.Debug.Print(LastTradedPrice.ToString()); }
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); }