示例#1
0
        /// <summary>
        /// Instantiates a new instance.
        /// </summary>
        /// <param name="bars">The list of Bar instances to use during the backtest.</param>
        public StrategyBacktester(IEnumerable <Bar> bars)
        {
            var orderCreator = new OrderCreator();

            orderCreator.OrderSent += (order) => OrderSent.SafeTrigger(order);

            var manager = new StrategyManager(orderCreator);

            StrategyInfo = manager.StrategyInfo;

            playableBars = new PlayableBars(bars);

            runner = new StrategyRunner <T>(
                playableBars.ToSingleDataStream(),
                orderCreator: orderCreator,
                strategyInfo: StrategyInfo);
            Strategy = runner.Strategy;
        }
示例#2
0
 /// <summary>
 /// Triggers the OrderSent event.
 /// </summary>
 /// <param name="orderInfo">The information about the order.</param>
 protected virtual void TriggerOrderSent(OrderInfo orderInfo)
 {
     OrderSent.SafeTrigger(orderInfo);
 }
示例#3
0
 protected virtual async Task OnOrderSent(IOrderSentEventArgs args)
 {
     if (OrderSent != null)
         await OrderSent.Invoke(this, args);
 }
示例#4
0
        public void OnMessage(string message)
        {
            Debug.WriteLine($"{WebSocketConnection}> {message}");

            if (WebSerializer.TryParseRequest(message, out WebSimpleMessageType simpleMessage))
            {
                switch (simpleMessage)
                {
                case WebSimpleMessageType.Failure:
                case WebSimpleMessageType.Success:
                    MessageQueue.Enqueue(message);
                    NewMessageEvent.Set();
                    break;

                default:
                    // the server will not ask the client for data
                    throw new NotImplementedException();
                }
            }
            else
            {
                WebMessageDTO <object> msgDto = WebSerializer.DeserializeWebMessage(message);
                switch (msgDto.MessageType)
                {
                case WebMessageType.ProvideAllClients:
                case WebMessageType.ProvideAllProducts:
                case WebMessageType.ProvideAllOrders:
                case WebMessageType.ProvideClient:
                case WebMessageType.ProvideProduct:
                case WebMessageType.ProvideOrder:
                {
                    MessageQueue.Enqueue(message);
                    NewMessageEvent.Set();
                    break;
                }

                case WebMessageType.OrderSent:
                {
                    OrderSent orderSent = new OrderSent((msgDto.Data as OrderDTO)?.ToIOrder());
                    foreach (IObserver <OrderSent> observer in OrderSentObservers)
                    {
                        observer.OnNext(orderSent);
                    }

                    break;
                }

                case WebMessageType.AddClient:
                {
                    DataChanged <IClient> change =
                        new DataChanged <IClient>(DataChangedAction.Add,
                                                  new List <IClient> {
                            (msgDto.Data as ClientDTO)?.ToIClient()
                        });
                    foreach (IObserver <DataChanged <IClient> > observer in ClientObservers)
                    {
                        observer.OnNext(change);
                    }

                    break;
                }

                case WebMessageType.UpdateClient:
                {
                    DataChanged <IClient> change =
                        new DataChanged <IClient>(DataChangedAction.Update,
                                                  new List <IClient> {
                            (msgDto.Data as ClientDTO)?.ToIClient()
                        });
                    foreach (IObserver <DataChanged <IClient> > observer in ClientObservers)
                    {
                        observer.OnNext(change);
                    }

                    break;
                }

                case WebMessageType.RemoveClient:
                {
                    DataChanged <IClient> change =
                        new DataChanged <IClient>(DataChangedAction.Remove,
                                                  new List <IClient> {
                            (msgDto.Data as ClientDTO)?.ToIClient()
                        });
                    foreach (IObserver <DataChanged <IClient> > observer in ClientObservers)
                    {
                        observer.OnNext(change);
                    }

                    break;
                }

                case WebMessageType.AddProduct:
                {
                    DataChanged <IProduct> change =
                        new DataChanged <IProduct>(DataChangedAction.Add,
                                                   new List <IProduct> {
                            (msgDto.Data as ProductDTO)?.ToIProduct()
                        });
                    foreach (IObserver <DataChanged <IProduct> > observer in ProductObservers)
                    {
                        observer.OnNext(change);
                    }

                    break;
                }

                case WebMessageType.UpdateProduct:
                {
                    DataChanged <IProduct> change =
                        new DataChanged <IProduct>(DataChangedAction.Update,
                                                   new List <IProduct> {
                            (msgDto.Data as ProductDTO)?.ToIProduct()
                        });
                    foreach (IObserver <DataChanged <IProduct> > observer in ProductObservers)
                    {
                        observer.OnNext(change);
                    }

                    break;
                }

                case WebMessageType.RemoveProduct:
                {
                    DataChanged <IProduct> change =
                        new DataChanged <IProduct>(DataChangedAction.Remove,
                                                   new List <IProduct> {
                            (msgDto.Data as ProductDTO)?.ToIProduct()
                        });
                    foreach (IObserver <DataChanged <IProduct> > observer in ProductObservers)
                    {
                        observer.OnNext(change);
                    }

                    break;
                }

                case WebMessageType.AddOrder:
                {
                    DataChanged <IOrder> change =
                        new DataChanged <IOrder>(DataChangedAction.Add,
                                                 new List <IOrder> {
                            (msgDto.Data as OrderDTO)?.ToIOrder()
                        });
                    foreach (IObserver <DataChanged <IOrder> > observer in OrderObservers)
                    {
                        observer.OnNext(change);
                    }

                    break;
                }

                case WebMessageType.UpdateOrder:
                {
                    DataChanged <IOrder> change =
                        new DataChanged <IOrder>(DataChangedAction.Update,
                                                 new List <IOrder> {
                            (msgDto.Data as OrderDTO)?.ToIOrder()
                        });
                    foreach (IObserver <DataChanged <IOrder> > observer in OrderObservers)
                    {
                        observer.OnNext(change);
                    }

                    break;
                }

                case WebMessageType.RemoveOrder:
                {
                    DataChanged <IOrder> change =
                        new DataChanged <IOrder>(DataChangedAction.Remove,
                                                 new List <IOrder> {
                            (msgDto.Data as OrderDTO)?.ToIOrder()
                        });
                    foreach (IObserver <DataChanged <IOrder> > observer in OrderObservers)
                    {
                        observer.OnNext(change);
                    }

                    break;
                }

                case WebMessageType.Error:
                {
                    string errorMsg = msgDto.Data as string;
                    Debug.WriteLine($"The server has encountered an exception! {errorMsg}");
                    break;
                }
                }
            }
        }
示例#5
0
 /// <summary>
 /// Called when an order has been sent. Triggers the OrderSent event.
 /// </summary>
 /// <param name="order">The order information that was sent.</param>
 private void OnOrderSent(OrderInfo order)
 {
     OrderSent.SafeTrigger(order);
 }