public void Fill(Order order, double price, int size) { if (!PartialFills) { this.orders.Add(order); var report = new ExecutionReport { DateTime = this.framework.Clock.DateTime, Order = order, OrderId = order.Id, OrdType = order.Type, Side = order.Side, Instrument = order.Instrument, InstrumentId = order.InstrumentId, OrdQty = order.Qty, Price = order.Price, StopPx = order.StopPx, TimeInForce = order.TimeInForce, ExecType = ExecType.ExecTrade, OrdStatus = OrderStatus.Filled, CurrencyId = order.Instrument.CurrencyId, CumQty = order.LeavesQty, LastQty = order.LeavesQty, LeavesQty = 0.0, LastPx = price, Text = order.Text }; report.Commission = CommissionProvider.GetCommission(report); report.LastPx = SlippageProvider.GetPrice(report); this.summariesByOrderId[order.Id] = new ReportSummary(report); EmitExecutionReport(report, Queued); return; } if (size <= 0) { Console.WriteLine("ExecutionSimulator::Fill Error - using partial fills, size can not be zero"); return; } var report2 = new ExecutionReport { DateTime = this.framework.Clock.DateTime, Order = order, OrderId = order.Id, OrdType = order.Type, Side = order.Side, Instrument = order.Instrument, InstrumentId = order.InstrumentId, OrdQty = order.Qty, Price = order.Price, StopPx = order.StopPx, TimeInForce = order.TimeInForce, ExecType = ExecType.ExecTrade, CurrencyId = order.Instrument.CurrencyId }; if (size >= order.LeavesQty) { this.orders.Add(order); report2.OrdStatus = OrderStatus.Filled; report2.CumQty = order.CumQty + order.LeavesQty; report2.LastQty = order.LeavesQty; report2.LeavesQty = 0.0; report2.LastPx = price; report2.Text = order.Text; order.LeavesQty = report2.LeavesQty; } else if (size < order.LeavesQty) { report2.OrdStatus = OrderStatus.PartiallyFilled; report2.CumQty = order.CumQty + size; report2.LastQty = size; report2.LeavesQty = order.LeavesQty - size; report2.LastPx = price; report2.Text = order.Text; order.LeavesQty = report2.LeavesQty; } report2.Commission = CommissionProvider.GetCommission(report2); report2.LastPx = SlippageProvider.GetPrice(report2); this.summariesByOrderId[order.Id] = new ReportSummary(report2); EmitExecutionReport(report2, Queued); }