OnExecutionCommand() public méthode

public OnExecutionCommand ( ExecutionCommand command ) : void
command ExecutionCommand
Résultat void
Exemple #1
0
        public void Replace(Order order, double price, double stopPx, double qty)
        {
            if (order.IsNotSent)
            {
                throw new ArgumentException($"Can not replace order that is not sent {order}");
            }

            var command = new ExecutionCommand(ExecutionCommandType.Replace, order)
            {
                DateTime        = this.framework.Clock.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);
            if (IsPersistent)
            {
                Server?.Save(command, -1);
            }
            order.Provider.Send(command);
        }
Exemple #2
0
        public void Cancel(Order order)
        {
            if (order.IsNotSent)
            {
                throw new ArgumentException($"Can not cancel order that is not sent {order}");
            }

            var command = new ExecutionCommand(ExecutionCommandType.Cancel, order)
            {
                DateTime        = this.framework.Clock.DateTime,
                OrderId         = order.Id,
                ClOrderId       = order.ClOrderId,
                ProviderOrderId = order.ProviderOrderId,
                ProviderId      = order.ProviderId,
                RouteId         = order.RouteId,
                PortfolioId     = order.PortfolioId
            };

            command.DateTime     = order.DateTime;
            command.Instrument   = order.Instrument;
            command.InstrumentId = order.InstrumentId;
            command.Provider     = order.Provider;
            command.Portfolio    = order.Portfolio;
            command.Side         = order.Side;
            command.OrdType      = order.Type;
            command.TimeInForce  = order.TimeInForce;
            command.Price        = order.Price;
            command.StopPx       = order.StopPx;
            command.Qty          = order.Qty;
            command.OCA          = order.OCA;
            command.Text         = order.Text;
            command.Account      = order.Account;
            command.ClientID     = order.ClientID;
            command.ClientId     = order.ClientId;
            Messages.Add(command);
            order.OnExecutionCommand(command);
            this.framework.EventServer.OnExecutionCommand(command);
            if (IsPersistent)
            {
                Server?.Save(command, -1);
            }
            order.Provider.Send(command);
        }
        public void Cancel(Order order)
        {
            if (order.IsNotSent)
                throw new ArgumentException($"Can not cancel order that is not sent {order}");

            var command = new ExecutionCommand(ExecutionCommandType.Cancel, order)
            {
                DateTime = this.framework.Clock.DateTime,
                OrderId = order.Id,
                ClOrderId = order.ClOrderId,
                ProviderOrderId = order.ProviderOrderId,
                ProviderId = order.ProviderId,
                RouteId = order.RouteId,
                PortfolioId = order.PortfolioId
            };
            command.DateTime = order.DateTime;
            command.Instrument = order.Instrument;
            command.InstrumentId = order.InstrumentId;
            command.Provider = order.Provider;
            command.Portfolio = order.Portfolio;
            command.Side = order.Side;
            command.OrdType = order.Type;
            command.TimeInForce = order.TimeInForce;
            command.Price = order.Price;
            command.StopPx = order.StopPx;
            command.Qty = order.Qty;
            command.OCA = order.OCA;
            command.Text = order.Text;
            command.Account = order.Account;
            command.ClientID = order.ClientID;
            command.ClientId = order.ClientId;
            Messages.Add(command);
            order.OnExecutionCommand(command);
            this.framework.EventServer.OnExecutionCommand(command);
            if (IsPersistent)
                Server?.Save(command, -1);
            order.Provider.Send(command);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        public void Load(string name = null, int clientId = -1)
        {
            var messages = LoadMessages(name, clientId);

            foreach (var msg in messages)
            {
                msg.IsLoaded = true;
                var typeId = msg.TypeId;
                switch (typeId)
                {
                case DataObjectType.ExecutionReport:
                    this.framework.EventServer.OnExecutionReport((ExecutionReport)msg);
                    break;

                case DataObjectType.ExecutionCommand:
                {
                    var command = (ExecutionCommand)msg;
                    switch (command.Type)
                    {
                    case ExecutionCommandType.Send:
                    {
                        var order = new Order(command);
                        command.Order      = order;
                        command.Instrument = this.framework.InstrumentManager.GetById(command.InstrumentId);
                        command.Portfolio  = this.framework.PortfolioManager.GetById(command.PortfolioId);
                        command.Provider   = this.framework.ProviderManager.GetExecutionProvider(command.ProviderId);
                        order.Instrument   = command.Instrument;
                        order.Portfolio    = command.Portfolio;
                        order.Provider     = command.Provider;
                        lock (this.obj)
                            this.counter = Math.Max(this.counter, order.Id);
                        this.framework.EventServer.OnSendOrder(order);
                        Orders.Add(order);
                        this.ordersById[order.Id] = order;
                        if (this.framework.Mode == FrameworkMode.Realtime)
                        {
                            this.ordersByClOrderId[order.ClOrderId] = order;
                        }
                        Messages.Add(command);
                        order.OnExecutionCommand(command);
                        this.framework.EventServer.OnExecutionCommand(command);
                        this.framework.EventServer.OnPendingNewOrder(order, true);
                        break;
                    }

                    case ExecutionCommandType.Cancel:
                    case ExecutionCommandType.Replace:
                        this.ordersById[command.OrderId].OnExecutionCommand(command);
                        break;
                    }
                    break;
                }

                default:
                    if (typeId == DataObjectType.AccountReport)
                    {
                        this.framework.EventServer.OnAccountReport((AccountReport)msg);
                    }
                    break;
                }
            }
        }
        public void Replace(Order order, double price, double stopPx, double qty)
        {
            if (order.IsNotSent)
                throw new ArgumentException($"Can not replace order that is not sent {order}");

            var command = new ExecutionCommand(ExecutionCommandType.Replace, order)
            {
                DateTime = this.framework.Clock.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);
            if (IsPersistent)
                Server?.Save(command, -1);
            order.Provider.Send(command);
        }
        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);
        }
 public void Load(string name = null, int clientId = -1)
 {
     var messages = LoadMessages(name, clientId);
     foreach (var msg in messages)
     {
         msg.IsLoaded = true;
         var typeId = msg.TypeId;
         switch (typeId)
         {
             case DataObjectType.ExecutionReport:
                 this.framework.EventServer.OnExecutionReport((ExecutionReport)msg);
                 break;
             case DataObjectType.ExecutionCommand:
                 {
                     var command = (ExecutionCommand)msg;
                     switch (command.Type)
                     {
                         case ExecutionCommandType.Send:
                             {
                                 var order = new Order(command);
                                 command.Order = order;
                                 command.Instrument = this.framework.InstrumentManager.GetById(command.InstrumentId);
                                 command.Portfolio = this.framework.PortfolioManager.GetById(command.PortfolioId);
                                 command.Provider = this.framework.ProviderManager.GetExecutionProvider(command.ProviderId);
                                 order.Instrument = command.Instrument;
                                 order.Portfolio = command.Portfolio;
                                 order.Provider = command.Provider;
                                 lock (this.obj)
                                     this.counter = Math.Max(this.counter, order.Id);
                                 this.framework.EventServer.OnSendOrder(order);
                                 Orders.Add(order);
                                 this.ordersById[order.Id] = order;
                                 if (this.framework.Mode == FrameworkMode.Realtime)
                                     this.ordersByClOrderId[order.ClOrderId] = order;
                                 Messages.Add(command);
                                 order.OnExecutionCommand(command);
                                 this.framework.EventServer.OnExecutionCommand(command);
                                 this.framework.EventServer.OnPendingNewOrder(order, true);
                                 break;
                             }
                         case ExecutionCommandType.Cancel:
                         case ExecutionCommandType.Replace:
                             this.ordersById[command.OrderId].OnExecutionCommand(command);
                             break;
                     }
                     break;
                 }
             default:
                 if (typeId == DataObjectType.AccountReport)
                     this.framework.EventServer.OnAccountReport((AccountReport)msg);
                 break;
         }
     }
 }