public void Send(Order order)
{
if (!order.IsNotSent)
throw new ArgumentException($"Can not send order that has been already sent {order}");
this.framework.EventServer.OnSendOrder(order);
if (order.Id == -1)
Register(order);
if (order.IsOCA)
{
List<Order> list;
this.ordersByOCAList.TryGetValue(order.OCA, out list);
this.ordersByOCAList[order.OCA] = list = list ?? new List<Order>();
list.Add(order);
}
Orders.Add(order);
this.ordersById[order.Id] = order;
if (this.framework.Mode == FrameworkMode.Realtime)
this.ordersByClOrderId[order.ClOrderId] = order;
order.DateTime = this.framework.Clock.DateTime;
order.Status = OrderStatus.PendingNew;
var command = new ExecutionCommand(ExecutionCommandType.Send, order)
{
DateTime = order.DateTime,
Id = order.Id,
OrderId = order.Id,
ClOrderId = order.ClOrderId,
ProviderOrderId = order.ProviderOrderId,
ProviderId = order.ProviderId,
RouteId = order.RouteId,
PortfolioId = order.PortfolioId,
TransactTime = order.TransactTime,
Instrument = order.Instrument,
InstrumentId = order.InstrumentId,
Provider = order.Provider,
Portfolio = order.Portfolio,
Side = order.Side,
OrdType = order.Type,
TimeInForce = order.TimeInForce,
Price = order.Price,
StopPx = order.StopPx,
Qty = order.Qty,
OCA = order.OCA,
Text = order.Text,
Account = order.Account,
ClientID = order.ClientID,
ClientId = order.ClientId
};
Messages.Add(command);
order.OnExecutionCommand(command);
this.framework.EventServer.OnExecutionCommand(command);
this.framework.EventServer.OnPendingNewOrder(order, true);
if (IsPersistent)
Server?.Save(command, -1);
order.Provider.Send(command);
}