Ejemplo n.º 1
0
        public void SendMarketOrderAndEnsureItGetsFilled()
        {
            ManualResetEvent resetEvent        = new ManualResetEvent(false);
            bool             executionArrived  = false;
            Execution        receivedExecution = null;
            MarketOrder      marketOrder       = OrderMessage.GenerateMarketOrder(new Security()
            {
                Symbol = "MSFT"
            }, OrderSide.BUY, 1, "Tradier");

            marketOrder.OrderTif = OrderTif.DAY;
            _executionProvider.ExecutionArrived += delegate(Execution execution)
            {
                executionArrived  = true;
                receivedExecution = execution;
                resetEvent.Set();
            };
            _executionProvider.SendMarketOrder(marketOrder);
            resetEvent.WaitOne(10000);
            Assert.True(executionArrived);
            Assert.IsNotNull(receivedExecution);
            Assert.Greater(receivedExecution.Fill.AverageExecutionPrice, 0);
            Assert.Greater(receivedExecution.Fill.ExecutionPrice, 0);
            Assert.AreEqual(receivedExecution.Fill.ExecutionSize, 1);
            Assert.AreEqual(ExecutionType.Fill, receivedExecution.Fill.ExecutionType);
        }
        public void OverRideNewOrderEventTestCase()
        {
            _tradeHubStrategy.InitializeOrderExecutionServiceDisruptor(new IEventHandler <RabbitMqRequestMessage>[] { this });

            _newOrderEventArrived = false;

            _manualNewOrderEvent = new ManualResetEvent(false);

            Thread.Sleep(5000);
            _tradeHubStrategy.Run();
            Thread.Sleep(1000);
            Security security = new Security {
                Symbol = "AAPL"
            };

            // Create new Market Order
            MarketOrder marketOrder = OrderMessage.GenerateMarketOrder("1", security,
                                                                       Common.Core.Constants.OrderSide.BUY, 100
                                                                       , Common.Core.Constants.OrderExecutionProvider.Simulated);

            // Send Market Order to OEE
            _tradeHubStrategy.SendOrder(marketOrder);

            _manualNewOrderEvent.WaitOne(30000, false);

            Assert.AreEqual(true, _newOrderEventArrived, "New Order Event Arrived");
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Sends exit order to the Order Execution Service
        /// </summary>
        /// <param name="orderSide">Order side on which to open position</param>
        /// <param name="symbol">Symbol on which to send order</param>
        private void SendExitOrder(string orderSide, string symbol)
        {
            try
            {
                if (!orderSide.Equals(TradeHubConstants.OrderSide.NONE))
                {
                    _exitOrderSent = true;

                    ConsoleWriter.WriteLine(ConsoleColor.Green, "Sending" + orderSide + " exit order.");

                    if (Logger.IsInfoEnabled)
                    {
                        Logger.Info("Sending" + orderSide + " exit order.", _type.FullName, "SendExitOrder");
                    }

                    // Get new unique ID
                    var id = (_orderId++).ToString("X");

                    Security security = new Security {
                        Symbol = symbol
                    };

                    // Create new Market Order
                    MarketOrder marketOrder = OrderMessage.GenerateMarketOrder(id, security, orderSide, 100, _orderExecutionProvider);

                    // Send Limit Order to OEE
                    SendOrder(marketOrder);
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "SendExitOrder");
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Sends a new market order to the server
        /// </summary>
        /// <param name="id">Unique ID to distinguish the order</param>
        /// <param name="security">Contains symbol information</param>
        /// <param name="orderSize">Trade size or lot</param>
        /// <param name="orderSide">Side on which to send the order</param>
        private void SendMarketOrder(string id, Security security, int orderSize, string orderSide = OrderSide.BUY)
        {
            // Create new Market Order
            MarketOrder marketOrder = OrderMessage.GenerateMarketOrder(id, security, orderSide, orderSize, _orderExecutionProvider);

            // Send market order
            this.SendOrder(marketOrder);
        }
 public void CreateMarketOrder_IfSizeIsZero_ExceptionWillBeThrown()
 {
     MarketOrder marketOrder = OrderMessage.GenerateMarketOrder(new Security()
     {
         Symbol = "AAPL"
     }, OrderSide.BUY, 0,
                                                                OrderExecutionProvider.SimulatedExchange);
 }
Ejemplo n.º 6
0
        public void SendOrderTest()
        {
            MarketOrder order = OrderMessage.GenerateMarketOrder(DateTime.Now.ToString("yyMMddHmsfff"), new Security()
            {
                Symbol = "TNA"
            }, OrderSide.BUY, 3,
                                                                 "WldxFix");

            order.Exchange = "SMARTEDGEP";
            bool             logon                 = false;
            ManualResetEvent resetEvent            = new ManualResetEvent(false);
            WldxFixOrderExecutionProvider provider = new WldxFixOrderExecutionProvider();

            provider.LogonArrived += delegate(string dataProvider)
            {
                logon = true;
                resetEvent.Set();
            };
            //start provider
            provider.Start();
            resetEvent.WaitOne(5000);
            Assert.True(logon);
            if (logon)
            {
                bool newArrived       = false;
                bool executionArrived = false;
                provider.NewArrived += delegate(Order newOrder)
                {
                    newArrived = true;
                };

                provider.ExecutionArrived += delegate(Execution execution)
                {
                    executionArrived = true;
                };
                provider.SendMarketOrder(order);
                resetEvent.Reset();
                resetEvent.WaitOne(10000);

                bool logout = false;
                provider.LogoutArrived += delegate(string dataProvider)
                {
                    logout = true;
                    resetEvent.Set();
                };
                resetEvent.Reset();
                provider.Stop();
                resetEvent.WaitOne(5000);
                Assert.True(logout);
                Assert.True(newArrived);
                Assert.True(executionArrived);
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Sends a new Market Order Request to 'Order Execution Server'
        /// </summary>
        /// <param name="orderDetails">Contains market order information</param>
        public void MarketOrderRequests(OrderDetails orderDetails)
        {
            // Get new Order ID
            orderDetails.ID = _orderExecutionService.GetOrderId();

            // Create Market Order object to be sent to 'Order Execution Service'
            MarketOrder marketOrder = OrderMessage.GenerateMarketOrder(orderDetails.ID, orderDetails.Security, orderDetails.Side,
                                                                       orderDetails.Quantity, orderDetails.Provider);

            // Send Request to Server
            _orderExecutionService.SendOrder(marketOrder);
        }
        public void CreateMarketOrder_IfAllParametersAreOk_VerifyMarketOrderIsCreated()
        {
            MarketOrder marketOrder = OrderMessage.GenerateMarketOrder(new Security()
            {
                Symbol = "AAPL"
            }, OrderSide.BUY, 10,
                                                                       OrderExecutionProvider.SimulatedExchange);

            Assert.NotNull(marketOrder);
            Assert.IsNotNullOrEmpty(marketOrder.OrderID);
            Assert.AreEqual(marketOrder.OrderSide, OrderSide.BUY);
            Assert.AreEqual(marketOrder.OrderSize, 10);
            Assert.AreEqual(marketOrder.OrderExecutionProvider, OrderExecutionProvider.SimulatedExchange);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Called when Order Execution is received
        /// </summary>
        /// <param name="execution">TradeHub Execution</param>
        public override void OnExecutionArrived(Execution execution)
        {
            try
            {
                ConsoleWriter.WriteLine(ConsoleColor.Green, "Order Execution received : " + execution);

                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Order Execution received : " + execution, _type.FullName, "OnExecutionArrived");
                }

                // Resart trading algo on full fill
                if (execution.Fill.LeavesQuantity.Equals(0))
                {
                    if (_entryOrderSent)
                    {
                        _entryOrderSent = false;

                        // Get new unique ID
                        var id = (_orderId++).ToString("X");

                        Security security = new Security {
                            Symbol = execution.Order.Security.Symbol
                        };

                        var orderSide = execution.Fill.ExecutionSide.Equals(TradeHubConstants.OrderSide.BUY)
                            ? TradeHubConstants.OrderSide.SELL
                            : TradeHubConstants.OrderSide.BUY;

                        // Create Market Order
                        MarketOrder marketOrder = OrderMessage.GenerateMarketOrder(id, security, orderSide, 10,
                                                                                   _orderExecutionProvider);

                        // Send Market Order
                        SendOrder(marketOrder);
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "OnExecutionArrived");
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Sends enrty order to the Order Execution Service
        /// </summary>
        /// <param name="orderSide">Order side on which to open position</param>
        /// <param name="symbol">Symbol on which to send order</param>
        private void SendBlackwoodEntryOrder(string orderSide, string symbol)
        {
            try
            {
                if (!orderSide.Equals(TradeHubConstants.OrderSide.NONE))
                {
                    _entryOrderSent = true;

                    ConsoleWriter.WriteLine(ConsoleColor.Green, "Sending" + orderSide + " entry order.");

                    if (Logger.IsInfoEnabled)
                    {
                        Logger.Info("Sending" + orderSide + " entry order.", _type.FullName, "SendEntryOrder");
                    }

                    // Get new unique ID
                    var id = (_orderId++).ToString("X");

                    Security security = new Security {
                        Symbol = symbol
                    };

                    // Create new Limit Order
                    MarketOrder marketOrder = OrderMessage.GenerateMarketOrder(id, security, TradeHubConstants.OrderSide.SHORT, 100, _orderExecutionProvider);

                    // Set OPG Venue
                    marketOrder.Exchange = "SDOT";
                    // Set Order TIME_OUT
                    marketOrder.OrderTif = TradeHubConstants.OrderTif.DAY;

                    // Send Market Order to OEE
                    SendOrder(marketOrder);
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "SendEntryOrder");
            }
        }
        public void MarketOrderTestCase()
        {
            MarketOrder order = OrderMessage.GenerateMarketOrder(DateTime.Now.ToString("yyMMddHmsfff"),
                                                                 new Security()
            {
                Symbol = "EUR/USD"
            }, OrderSide.BUY, 1000,
                                                                 "Fxcm");

            order.OrderCurrency = "EUR";
            order.OrderTif      = "GTC";

            bool             logon      = false;
            ManualResetEvent resetEvent = new ManualResetEvent(false);

            _provider.LogonArrived += delegate(string dataProvider)
            {
                logon = true;
                resetEvent.Set();
            };

            //start provider
            _provider.Start();

            resetEvent.WaitOne(5000);

            Assert.True(logon, "Logon Arrived");

            if (logon)
            {
                bool newArrived       = false;
                bool executionArrived = false;

                _provider.NewArrived += delegate(Order newOrder)
                {
                    newArrived = true;
                };

                _provider.ExecutionArrived += delegate(Execution execution)
                {
                    executionArrived = true;
                };

                _provider.SendMarketOrder(order);

                resetEvent.Reset();
                resetEvent.WaitOne(10000);

                bool logout = false;

                _provider.LogoutArrived += delegate(string dataProvider)
                {
                    logout = true;
                    resetEvent.Set();
                };

                resetEvent.Reset();

                _provider.Stop();

                resetEvent.WaitOne(5000);

                Assert.True(logout, "Logout Arrived");
                Assert.True(newArrived, "New Arrived");
                Assert.True(executionArrived, "Execution Arrived");
            }
        }
Ejemplo n.º 12
0
        public void MarketOrderCruld()
        {
            var         ordersaved  = new ManualResetEvent(false);
            bool        saved       = false;
            string      id          = DateTime.Now.ToString();
            MarketOrder marketOrder = OrderMessage.GenerateMarketOrder(id,
                                                                       new Security()
            {
                Isin = "123", Symbol = "AAPL"
            }, OrderSide.SELL, 50, OrderExecutionProvider.Blackwood);

            //adding order fills
            Fill fill = new Fill(new Security()
            {
                Isin = "123", Symbol = "AAPL"
            }, "BlackWood", id);

            fill.ExecutionPrice      = 100;
            fill.CummalativeQuantity = 100;
            fill.LeavesQuantity      = 100;
            fill.ExecutionSize       = 100;
            fill.ExecutionId         = "asdfgfcx";
            fill.OrderId             = id;
            fill.ExecutionType       = ExecutionType.Fill;
            List <Fill> fills = new List <Fill>();

            fills.Add(fill);

            Fill fill1 = new Fill(new Security()
            {
                Isin = "123", Symbol = "AAPL"
            }, "BlackWood", id);

            fill1.ExecutionPrice      = 100;
            fill1.CummalativeQuantity = 100;
            fill1.LeavesQuantity      = 100;
            fill1.ExecutionSize       = 100;
            fill1.ExecutionId         = "asdf";
            fill1.OrderId             = id;
            fill1.ExecutionType       = ExecutionType.Partial;
            fills.Add(fill1);

            marketOrder.Fills = fills;

            //add market order to database
            _orderRespository.AddUpdate(marketOrder);

            //get the same order
            MarketOrder getMarketOrder = _orderRespository.FindBy(id) as MarketOrder;

            if (getMarketOrder.OrderID.Equals(id) && getMarketOrder.OrderSize == 50 && getMarketOrder.Fills.Count == 2)
            {
                saved = true;
                ordersaved.Set();
            }

            ordersaved.WaitOne(30000);
            //delete the order
            _orderRespository.Delete(getMarketOrder);

            //get ther order again to verify its deleted or not
            getMarketOrder = _orderRespository.FindBy(id) as MarketOrder;
            Assert.AreEqual(true, saved, "MarketOrderNotSaved");
            Assert.IsNull(getMarketOrder, "Not deleted");
        }