/// <summary>
        /// Returns available market data providers along with there configuration information
        /// </summary>
        /// <returns></returns>
        public async Task <IList <MarketDataProvider> > GetAvailableMarketDataProviders()
        {
            var availableProvidersInformation = _dataProvidersManager.GetAvailableProviders();

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

            MarketDataProviders.Clear();

            // Populate Individual Market Data Provider details
            foreach (var keyValuePair in availableProvidersInformation)
            {
                MarketDataProvider tempProvider = new MarketDataProvider()
                {
                    ProviderType     = ProviderType.MarketData,
                    ProviderName     = keyValuePair.Key,
                    ConnectionStatus = ConnectionStatus.Disconnected
                };
                tempProvider.ProviderCredentials = keyValuePair.Value;

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

            return(MarketDataProviders);
        }
Exemple #2
0
        public MarketScannerWindowViewModel(MetroWindow scannerWindow, MarketDataProvider provider, ObservableCollection <MarketDataProvider> providers)
        {
            _sendOrderViewModel    = new SendOrderViewModel();
            _tickDetailsCollection = provider.MarketDetailCollection;

            _scannerWindow = scannerWindow;
            _provider      = provider;
            _providers     = providers;
        }
        public void RequestNewConnection_SendRequestToServer_ReceiveLogon()
        {
            Thread.Sleep(5000);
            MarketDataProvider provider = new MarketDataProvider();

            provider.ProviderType     = ProviderType.MarketData;
            provider.ConnectionStatus = ConnectionStatus.Disconnected;
            provider.ProviderName     = TradeHubConstants.MarketDataProvider.Simulated;

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

            Thread.Sleep(5000);

            Assert.IsTrue(provider.ConnectionStatus.Equals(ConnectionStatus.Connected));
        }
 /// <summary>
 /// Called when disconnect request is received for given Market Data Provider
 /// </summary>
 /// <param name="marketDataProvider">Contains provider details</param>
 private void DisconnectMarketDataProvider(MarketDataProvider marketDataProvider)
 {
     // Check current provider status
     if (marketDataProvider.ConnectionStatus.Equals(ConnectionStatus.Connected))
     {
         // Forward disconnect request
         _marketDataManager.Disconnect(marketDataProvider.ProviderName);
     }
     else
     {
         if (Logger.IsInfoEnabled)
         {
             Logger.Info(marketDataProvider.ProviderName + " connection status is already set to dis-connected.",
                         _type.FullName, "DisconnectMarketDataProvider");
         }
     }
 }
        /// <summary>
        /// Called when new Connection request is made by the user
        /// </summary>
        /// <param name="marketDataProvider"></param>
        private void NewConnectionRequest(MarketDataProvider marketDataProvider)
        {
            // Only entertain 'Market Data Provider' related calls
            if (!marketDataProvider.ProviderType.Equals(ProviderType.MarketData))
            {
                return;
            }

            if (marketDataProvider.ConnectionStatus.Equals(ConnectionStatus.Disconnected))
            {
                // Open a new market data connection
                ConnectMarketDataProvider(marketDataProvider);
            }
            else if (marketDataProvider.ConnectionStatus.Equals(ConnectionStatus.Connected))
            {
                // Close existing connection
                DisconnectMarketDataProvider(marketDataProvider);
            }
        }
        public void UnsubscribeMarketData_SendRequestToServer()
        {
            Thread.Sleep(5000);
            MarketDataProvider provider = new MarketDataProvider();

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

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

            Thread.Sleep(5000);

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

            // Create Security to use the Symbol information
            Security security = new Security()
            {
                Symbol = "AAPL"
            };

            // Create Tick details to hold market data information
            MarketDataDetail tickDetails = new MarketDataDetail(security);

            // Add TickDetails object to
            provider.AddMarketDetail(tickDetails);

            {
                // Create a new subscription request for requesting market data
                var subscriptionRequest = new SubscriptionRequest(security, provider, MarketDataType.Tick, SubscriptionType.Subscribe);

                EventSystem.Publish <SubscriptionRequest>(subscriptionRequest);
            }

            Thread.Sleep(2000);

            {
                // Create a new subscription request for requesting market data
                var subscriptionRequest = new SubscriptionRequest(security, provider, MarketDataType.Tick, SubscriptionType.Unsubscribe);

                EventSystem.Publish <SubscriptionRequest>(subscriptionRequest);
            }
        }
        public void PersistTickDataTest()
        {
            Thread.Sleep(10000);
            MarketDataProvider provider = new MarketDataProvider();

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

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

            Thread.Sleep(5000);

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

            // Create Security to use the Symbol information
            Security security = new Security()
            {
                Symbol = "TEST"
            };

            // Create a new subscription request for requesting market data
            var subscriptionRequest = new SubscriptionRequest(security, provider, MarketDataType.Tick,
                                                              SubscriptionType.Subscribe);

            // Create Tick details to hold market data information
            MarketDataDetail dataDetail = new MarketDataDetail(security);

            dataDetail.PersistenceInformation.SaveTrades = true;

            // Add TickDetails object to
            provider.AddMarketDetail(dataDetail);

            EventSystem.Publish <SubscriptionRequest>(subscriptionRequest);

            Thread.Sleep(20000);
        }
        public void RequestMarketData_SendRequestToServer_ReceiveMultipleMarketDataMessages()
        {
            Thread.Sleep(5000);
            MarketDataProvider provider = new MarketDataProvider();

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

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

            Thread.Sleep(5000);

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

            // Create Security to use the Symbol information
            Security security = new Security()
            {
                Symbol = "ERX"
            };

            // Create a new subscription request for requesting market data
            var subscriptionRequest = new SubscriptionRequest(security, provider, MarketDataType.Tick, SubscriptionType.Subscribe);

            // Create Tick details to hold market data information
            MarketDataDetail tickDetails = new MarketDataDetail(security);

            // Add TickDetails object to
            provider.AddMarketDetail(tickDetails);

            EventSystem.Publish <SubscriptionRequest>(subscriptionRequest);

            Thread.Sleep(60000);

            Assert.IsTrue(tickDetails.AskPrice.Equals(1.23M), "Best Ask Price");
            Assert.IsTrue(tickDetails.BidRecordsCollection.Count.Equals(6), "LOB Collection count");
        }
        /// <summary>
        /// Called when connection request is received for given Market Data Provider
        /// </summary>
        /// <param name="marketDataProvider">Contains provider details</param>
        private void ConnectMarketDataProvider(MarketDataProvider marketDataProvider)
        {
            // Check if the provider already exists in the local map
            if (!_providersMap.ContainsKey(marketDataProvider.ProviderName))
            {
                // Add incoming provider to local map
                _providersMap.Add(marketDataProvider.ProviderName, marketDataProvider);
            }

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