private void HandleSend(Order order)
{
if (order.Qty == 0.0)
{
this.ExecOrderRejected(order, "Order amount can not be zero");
return;
}
var report = new ExecutionReport
{
DateTime = this.framework.Clock.DateTime,
Order = order,
OrderId = order.Id,
Instrument = order.Instrument,
InstrumentId = order.InstrumentId,
ExecType = ExecType.ExecNew,
OrdStatus = OrderStatus.New,
CurrencyId = order.Instrument.CurrencyId,
OrdType = order.Type,
Side = order.Side,
OrdQty = order.Qty,
Price = order.Price,
StopPx = order.StopPx,
TimeInForce = order.TimeInForce,
CumQty = 0,
LastQty = 0,
LeavesQty = order.Qty,
LastPx = 0,
AvgPx = 0,
Text = order.Text
};
order.LeavesQty = report.LeavesQty;
this.summariesByOrderId[order.Id] = new ReportSummary(report);
EmitExecutionReport(report, Queued);
if (order.TimeInForce == TimeInForce.AUC)
{
this.stops.Add(order);
if (this.stops.Count == 1)
{
this.framework.Clock.AddReminder(OnAuction1, this.framework.Clock.DateTime.Date.Add(Auction1));
this.framework.Clock.AddReminder(OnAuction2, this.framework.Clock.DateTime.Date.Add(Auction2));
}
return;
}
int int_ = order.InstrumentId;
GetOrdersBy(int_, true).Add(order);
if (((order.Type == OrderType.Market || order.Type == OrderType.Pegged) && !FillMarketOnNext) || (order.Type == OrderType.Limit && !FillLimitOnNext) || (order.Type == OrderType.Stop && !FillStopOnNext) || (order.Type == OrderType.StopLimit && !FillStopLimitOnNext))
{
if (FillOnQuote)
{
Ask ask = this.framework.DataManager.GetAsk(int_);
if (ask != null && FillWithAsk(order, ask))
{
this.ClearOrders();
return;
}
Bid bid = this.framework.DataManager.GetBid(int_);
if (bid != null && this.FillWithBid(order, bid))
{
this.ClearOrders();
return;
}
}
if (FillOnTrade)
{
var trade = this.framework.DataManager.GetTrade(int_);
if (trade != null && this.FillWithTrade(order, trade))
{
this.ClearOrders();
return;
}
}
if (FillOnBar)
{
var bar = this.framework.DataManager.GetBar(int_);
if (BarFilter.Count != 0 && !BarFilter.Contains(bar.Type, bar.Size))
{
return;
}
if (bar != null && this.FillWithBar(order, bar))
{
ClearOrders();
}
}
}
}