/// <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); }
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)); }
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)); }
/// <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"); } } }
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)); }
/// <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); } }
/// <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"); } } }