Exemplo n.º 1
0
 public override void OnOrderEvent(Orders.OrderEvent orderEvent)
 {
     if ((orderEvent.Direction == Orders.OrderDirection.Sell) &&
         (orderEvent.Status == Orders.OrderStatus.Filled))
     {
         Log(string.Format("Trade {0} close at {1}", closeTradeCounter, Time));
         closeTradeCounter++;
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Order fill event handler. On an order fill update the resulting information is passed to this method.
        /// </summary>
        /// <param name="orderEvent">Order event details containing details of the events</param>
        /// <remarks>
        /// This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects
        /// </remarks>
        public override void OnOrderEvent(Orders.OrderEvent orderEvent)
        {
            string symbol            = orderEvent.Symbol;
            int    portfolioPosition = Portfolio[symbol].Quantity;
            var    senderStrategy    = SenderStrategy[orderEvent.OrderId];
            var    actualOrder       = Transactions.GetOrderById(orderEvent.OrderId);

            // Update the strategy object if the order status is filled.
            if (orderEvent.Status == OrderStatus.Filled)
            {
                switch (senderStrategy)
                {
                case MomersionState.Momentum:
                    if (portfolioPosition > 0)
                    {
                        MomentumStrategy[symbol].Position = StockState.longPosition;
                    }
                    else if (portfolioPosition < 0)
                    {
                        MomentumStrategy[symbol].Position = StockState.shortPosition;
                    }
                    else
                    {
                        MomentumStrategy[symbol].Position = StockState.noInvested;
                    }
                    break;

                case MomersionState.MeanRevertion:
                    if (portfolioPosition > 0)
                    {
                        MeanReversionStrategy[symbol].Position = StockState.longPosition;
                    }
                    else if (portfolioPosition < 0)
                    {
                        MeanReversionStrategy[symbol].Position = StockState.shortPosition;
                    }
                    else
                    {
                        MeanReversionStrategy[symbol].Position = StockState.noInvested;
                    }
                    break;

                default:
                    break;
                }
            }
            // Logging.
            Log(string.Format("{0} sent from {1} strategy.", actualOrder.ToString(), senderStrategy.ToString()));
        }