/// <summary>
        /// Returns available order executiom providers along with there configuration information
        /// </summary>
        /// <returns></returns>
        public async Task <List <OrderExecutionProvider> > GetAvailableOrderExecutionProviders()
        {
            var availableProvidersInformation = _executionProvidersManager.GetAvailableProviders();

            // Safety check incase information was not populated
            if (availableProvidersInformation == null)
            {
                return(null);
            }

            OrderExecutionProviders.Clear();

            // Populate Individual Order Execution Provider details
            foreach (var keyValuePair in availableProvidersInformation)
            {
                OrderExecutionProvider tempProvider = new OrderExecutionProvider(_currentDispatcher)
                {
                    ProviderType     = ProviderType.OrderExecution,
                    ProviderName     = keyValuePair.Key,
                    ConnectionStatus = ConnectionStatus.Disconnected
                };
                tempProvider.ProviderCredentials = keyValuePair.Value;

                // Add to Collection
                OrderExecutionProviders.Add(tempProvider);
            }

            return(OrderExecutionProviders);
        }
示例#2
0
        public void RequestOrderCancellation_SendNewOrderRequest_ReceiveOrderAcceptance_SendOrderCancellation_ReceiveOrderCancellation()
        {
            Thread.Sleep(5000);
            OrderExecutionProvider provider = new OrderExecutionProvider(Dispatcher.CurrentDispatcher);

            provider.ProviderType     = ProviderType.OrderExecution;
            provider.ConnectionStatus = ConnectionStatus.Disconnected;
            provider.ProviderName     = TradeHubConstants.OrderExecutionProvider.Simulated;

            // Rasie event to request connection
            EventSystem.Publish <OrderExecutionProvider>(provider);

            Thread.Sleep(5000);

            Assert.IsTrue(provider.ConnectionStatus.Equals(ConnectionStatus.Connected));

            OrderDetails orderDetails = new OrderDetails(TradeHubConstants.OrderExecutionProvider.Simulated);

            orderDetails.ID       = "01";
            orderDetails.Type     = OrderType.Limit;
            orderDetails.Quantity = 10;
            orderDetails.Price    = 45.98M;
            orderDetails.Security = new Security()
            {
                Symbol = "AAPL"
            };
            orderDetails.Side     = OrderSide.BUY;
            orderDetails.Provider = TradeHubConstants.OrderExecutionProvider.Simulated;

            {
                // Create Order Request
                OrderRequest orderRequest = new OrderRequest(orderDetails, OrderRequestType.New);

                // Add Order Details object to Provider's Order Map
                provider.OrdersCollection.Add(orderDetails);

                // Rasie event to request order
                EventSystem.Publish <OrderRequest>(orderRequest);
            }

            Thread.Sleep(5000);

            Assert.IsTrue(orderDetails.Status.Equals(OrderStatus.SUBMITTED));

            {
                // Create Cancel Order Request
                OrderRequest cancelOrderRequest = new OrderRequest(orderDetails, OrderRequestType.Cancel);

                // Rasie event to request order
                EventSystem.Publish <OrderRequest>(cancelOrderRequest);
            }

            Thread.Sleep(5000);

            Assert.IsTrue(orderDetails.Status.Equals(OrderStatus.CANCELLED));
        }
示例#3
0
        public void RequestNewConnection_SendRequestToServer_ReceiveLogon()
        {
            Thread.Sleep(9000);
            OrderExecutionProvider provider = new OrderExecutionProvider(Dispatcher.CurrentDispatcher);

            provider.ConnectionStatus = ConnectionStatus.Disconnected;
            provider.ProviderName     = TradeHubConstants.OrderExecutionProvider.Simulated;

            // Rasie event to request connection
            EventSystem.Publish <OrderExecutionProvider>(provider);

            Thread.Sleep(9000);

            Assert.IsTrue(provider.ConnectionStatus.Equals(ConnectionStatus.Connected));
        }
示例#4
0
 /// <summary>
 /// Called when disconnect request is received for given Order Execution Provider
 /// </summary>
 /// <param name="orderExecutionProvider">Contains provider details</param>
 private void DisconnectOrderExecutionProvider(OrderExecutionProvider orderExecutionProvider)
 {
     // Check current provider status
     if (orderExecutionProvider.ConnectionStatus.Equals(ConnectionStatus.Connected))
     {
         // Forward disconnect request
         _orderExecutionManager.Disconnect(orderExecutionProvider.ProviderName);
     }
     else
     {
         if (Logger.IsInfoEnabled)
         {
             Logger.Info(orderExecutionProvider.ProviderName + " connection status is already set to dis-connected.",
                         _type.FullName, "DisconnectOrderExecutionProvider");
         }
     }
 }
示例#5
0
        public void RequestNewMarketOrderForExecution_SendRequestToServer_ReceiveOrderExecution()
        {
            Thread.Sleep(5000);
            OrderExecutionProvider provider = new OrderExecutionProvider(Dispatcher.CurrentDispatcher);

            provider.ProviderType     = ProviderType.OrderExecution;
            provider.ConnectionStatus = ConnectionStatus.Disconnected;
            provider.ProviderName     = TradeHubConstants.OrderExecutionProvider.Simulated;

            // Rasie event to request connection
            EventSystem.Publish <OrderExecutionProvider>(provider);

            Thread.Sleep(5000);

            Assert.IsTrue(provider.ConnectionStatus.Equals(ConnectionStatus.Connected));

            OrderDetails orderDetails = new OrderDetails(TradeHubConstants.OrderExecutionProvider.Simulated);

            orderDetails.ID       = "01";
            orderDetails.Type     = OrderType.Market;
            orderDetails.Quantity = 10;
            orderDetails.Security = new Security()
            {
                Symbol = "AAPL"
            };
            orderDetails.Side     = OrderSide.BUY;
            orderDetails.Provider = TradeHubConstants.OrderExecutionProvider.Simulated;

            // Create Order Request
            OrderRequest orderRequest = new OrderRequest(orderDetails, OrderRequestType.New);

            // Add Order Details object to Provider's Order Map
            provider.AddOrder(orderDetails);

            // Rasie event to request order
            EventSystem.Publish <OrderRequest>(orderRequest);

            Thread.Sleep(20000);

            Assert.IsTrue(orderDetails.Status.Equals(OrderStatus.EXECUTED));
            Assert.IsTrue(orderDetails.FillDetails.Count.Equals(1));
            //Assert.IsTrue(provider.PositionStatisticsCollection["AAPL"].Position.Equals(10));
            //Assert.IsTrue(provider.PositionStatisticsCollection["AAPL"].Pnl.Equals(-10*1.7M));
        }
示例#6
0
        /// <summary>
        /// Called when new Connection request is made by the user
        /// </summary>
        /// <param name="orderExecutionProvider"></param>
        private void NewConnectionRequest(OrderExecutionProvider orderExecutionProvider)
        {
            // Only entertain 'Order Execution Provider' related calls
            if (!orderExecutionProvider.ProviderType.Equals(ProviderType.OrderExecution))
            {
                return;
            }

            if (orderExecutionProvider.ConnectionStatus.Equals(ConnectionStatus.Disconnected))
            {
                // Open a new order execution connection
                ConnectOrderExecutionProvider(orderExecutionProvider);
            }
            else if (orderExecutionProvider.ConnectionStatus.Equals(ConnectionStatus.Connected))
            {
                // Close existing connection
                DisconnectOrderExecutionProvider(orderExecutionProvider);
            }
        }
示例#7
0
        /// <summary>
        /// Called when connection request is received for given Order Execution Provider
        /// </summary>
        /// <param name="orderExecutionProvider">Contains provider details</param>
        private void ConnectOrderExecutionProvider(OrderExecutionProvider orderExecutionProvider)
        {
            // Check if the provider already exists in the local map
            if (!_providersMap.ContainsKey(orderExecutionProvider.ProviderName))
            {
                // Add incoming provider to local map
                _providersMap.Add(orderExecutionProvider.ProviderName, orderExecutionProvider);
            }

            // Check current provider status
            if (orderExecutionProvider.ConnectionStatus.Equals(ConnectionStatus.Disconnected))
            {
                // Forward connection request
                _orderExecutionManager.Connect(orderExecutionProvider.ProviderName);
            }
            else
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info(orderExecutionProvider.ProviderName + " connection status is already set to connected.",
                                _type.FullName, "ConnectOrderExecutionProvider");
                }
            }
        }