예제 #1
0
        /// <summary>
        /// Sends live bar subscription request to Market Data Service using the base class
        /// </summary>
        public void SubscribeLiveBars()
        {
            try
            {
                // Get new ID to be used
                var id = (_liveBarId++).ToString("X");

                // Get new Security object
                Security security = new Security {
                    Symbol = _symbol
                };

                // Get Bar subscription message
                _barSubscribeRequest = SubscriptionMessage.LiveBarSubscription(id, security, _barFormat, _barPriceType,
                                                                               BarLength, 0.0001M, 0, _marketDataProvider);

                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Sending live bar subscription request for: " + _barSubscribeRequest, _type.FullName,
                                "SubscribeLiveBars");
                }

                // Send subscription request
                Subscribe(_barSubscribeRequest);
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "SubscribeLiveBars");
            }
        }
        /// <summary>
        /// Request to get Bar Data
        /// </summary>
        /// <param name="barDataRequest">TradeHub Bar Data Request Message</param>
        /// <returns></returns>
        public bool SubscribeBars(BarDataRequest barDataRequest)
        {
            try
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("New Bar Subscription request received: " + barDataRequest, _type.FullName, "SubscribeBars");
                }

                ConsoleWriter.WriteLine(ConsoleColor.Green, "New Bar Subscription request received: " + barDataRequest);

                string key  = barDataRequest.Security.Symbol + barDataRequest.MarketDataProvider;
                string info = barDataRequest.Security.Symbol + barDataRequest.BarFormat + barDataRequest.BarPriceType +
                              barDataRequest.BarLength.ToString(CultureInfo.InvariantCulture);

                Tuple <string, string> value = new Tuple <string, string>(barDataRequest.Id, info);

                // Add Request to Internal Map
                _subscribedBars.Add(key, value);

                return(true);
            }
            catch (Exception exception)
            {
                ConsoleWriter.WriteLine(ConsoleColor.DarkRed, exception.ToString());
                Logger.Error(exception, _type.FullName, "SubscribeBars");
                return(false);
            }
        }
예제 #3
0
        public void LiveBarsMarketDataTestCase()
        {
            _dataHandler = new DataHandler();

            bool             barArrived      = false;
            ManualResetEvent barArrivedEvent = new ManualResetEvent(false);
            // Get new Security object
            Security security = new Security {
                Symbol = "ERX"
            };

            // Get Bar subscription message
            BarDataRequest barSubscribeRequest = SubscriptionMessage.LiveBarSubscription("001", security, BarFormat.TIME,
                                                                                         BarPriceType.LAST, 60, 0.0001M,
                                                                                         0, "SimulatedExchange");

            _dataHandler.BarReceived += delegate(Bar obj)
            {
                barArrived = true;
                barArrivedEvent.Set();
            };

            _dataHandler.SubscribeSymbol(barSubscribeRequest);

            barArrivedEvent.WaitOne(2000);

            Assert.IsTrue(barArrived);
        }
        /// <summary>
        /// Unsubscribe Bar data
        /// </summary>
        /// <param name="barDataRequest">TradeHub Bar Data Request Message</param>
        /// <returns></returns>
        public bool UnsubscribeBars(BarDataRequest barDataRequest)
        {
            try
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("New Bar Unsubscription request received: " + barDataRequest, _type.FullName, "UnsubscribeBars");
                }

                ConsoleWriter.WriteLine(ConsoleColor.Green, "New Bar Unsubscription request received: " + barDataRequest);

                string key = barDataRequest.Security.Symbol + barDataRequest.MarketDataProvider;

                // Remove request from internal Map
                _subscribedBars.Remove(key);

                return(true);
            }
            catch (Exception exception)
            {
                ConsoleWriter.WriteLine(ConsoleColor.DarkRed, exception.ToString());
                Logger.Error(exception, _type.FullName, "UnsubscribeBars");
                return(false);
            }
        }
예제 #5
0
        /// <summary>
        /// Methord Fired When User Click On Save Command.
        /// </summary>
        private void SaveCurrentSettingForBar()
        {
            try
            {
                if (IsControlsEnabled)
                {
                    BarDataRequest newBarDataRequest = new BarDataRequest
                    {
                        BarFormat = SelectedFormate,
                        Security  = new Security {
                            Symbol = StatisticsViewModel.Symbol
                        },
                        Id = StatisticsViewModel.Id,
                        MarketDataProvider = StatisticsViewModel.ProviderName,
                        BarLength          = BarLength,
                        BarPriceType       = SelectedType,
                        BarSeed            = 0,
                        PipSize            = PipSize
                    };
                    if (Logger.IsInfoEnabled)
                    {
                        Logger.Info("Creating Bar Request Object" + newBarDataRequest, _oType.FullName,
                                    "SaveCurrentSettingForBar");
                    }

                    EventSystem.Publish <BarDataRequest>(newBarDataRequest);
                    IsControlsEnabled = false;
                }
            }
            catch (Exception exception)
            {
                TraceSourceLogger.Logger.Error(exception, _oType.FullName, "SaveCurrentSettingForBar");
            }
        }
예제 #6
0
        /// <summary>
        /// Subscribe to New Symbol for bar data
        /// </summary>
        /// <param name="barDataRequest"></param>
        public void SubscribeSymbol(BarDataRequest barDataRequest)
        {
            if (_classLogger.IsInfoEnabled)
            {
                _classLogger.Info("New subscription request recieved Request for " + barDataRequest, _type.FullName,
                                  "SubscribeSymbol");
            }

            // Add new symbol to the Bar list
            if (!BarSubscriptionList.Contains(barDataRequest.Security.Symbol))
            {
                BarSubscriptionList.Add(barDataRequest.Security.Symbol);
            }

            // Fetch data if its not already fetched for ticks
            if (!TickSubscriptionList.Contains(barDataRequest.Security.Symbol))
            {
                // Use locally saved data
                if (_persistanceDataCount > 0)
                {
                    var task = Task.Factory.StartNew(UseLocalData);

                    _tasksCollection.Add(task);
                }
                // Fetch fresh data
                else
                {
                    FetchData(barDataRequest);
                }
            }
        }
예제 #7
0
        /// <summary>
        /// Sends bar un-subscription request to Market Data Server
        /// </summary>
        /// <param name="security">Contains symbol information</param>
        /// <param name="barDetail">Contains parameter information for the bar to be subscribed</param>
        /// <param name="providerName">Name of the provider on which to subscribe</param>
        public void UnsubscribeBar(Security security, BarParameters barDetail, string providerName)
        {
            // Create bar un-subscription message
            BarDataRequest unsubscribe = SubscriptionMessage.LiveBarUnsubscription(_idGenerator.NextBarId(), security,
                                                                                   barDetail.Format, barDetail.PriceType, barDetail.BarLength, barDetail.PipSize, 0, providerName);

            _marketDataService.Unsubscribe(unsubscribe);
        }
예제 #8
0
        /// <summary>
        /// Sends request to receive live bars
        /// </summary>
        /// <param name="id">Unique ID to distinguish the request</param>
        /// <param name="security">Contains symbol information</param>
        /// <param name="length">Bar length in seconds</param>
        /// <param name="pipSize">Smallest pip size for the bars</param>
        /// <param name="barSeed">Seed value to be used for bar generation</param>
        private void RequestLiveBars(string id, Security security, decimal length, decimal pipSize, decimal barSeed)
        {
            // Create Live Bar request message
            BarDataRequest barDataRequest = SubscriptionMessage.LiveBarSubscription(id, security, BarFormat.TIME,
                                                                                    BarPriceType.LAST, length, pipSize, barSeed, _marketDataProvider);

            // Send live bar request
            base.Subscribe(barDataRequest);
        }
예제 #9
0
        /// <summary>
        /// Sends bar subscription request to Market Data Server
        /// </summary>
        /// <param name="security">Contains symbol information</param>
        /// <param name="barDetail">Contains parameter information for the bar to be subscribed</param>
        /// <param name="providerName">Name of the provider on which to subscribe</param>
        public void SubscribeBar(Security security, BarParameters barDetail, string providerName)
        {
            // Create bar subscription message
            BarDataRequest subscribe = SubscriptionMessage.LiveBarSubscription(_idGenerator.NextBarId(), security,
                                                                               barDetail.Format, barDetail.PriceType, barDetail.BarLength, barDetail.PipSize, 0, providerName);

            // Add information to local map
            _barParametersMap.Add(subscribe.Id, barDetail);

            _marketDataService.Subscribe(subscribe);
        }
예제 #10
0
 /// <summary>
 /// Creats a seprate thread for each request.
 /// </summary>
 /// <param name="request"></param>
 public void FetchData(BarDataRequest request)
 {
     try
     {
         Task.Factory.StartNew(() => _fetchMarketData.ReadData(request));
     }
     catch (Exception exception)
     {
         _classLogger.Error(exception, _type.FullName, "FetchData");
     }
 }
        /// <summary>
        /// Manages incoming unsubcription request for the subscribed Live Bars
        /// </summary>
        /// <param name="barDataRequest">Contains info for the Live Bars to be unsubscribed</param>
        public void UnsubcribeLiveBars(BarDataRequest barDataRequest)
        {
            if (_asyncClassLogger.IsDebugEnabled)
            {
                _asyncClassLogger.Debug(
                    "Live Bar un-subscription request received for: " + barDataRequest.Security.Symbol,
                    _type.FullName, "UnsubcribeLiveBars");
            }

            _dataHandler.UnsubscribleSymbol(barDataRequest);
        }
예제 #12
0
        /// <summary>
        /// Unsubscribes the given symbol for Bar data
        /// </summary>
        /// <param name="barDataRequest"></param>
        public void UnsubscribleSymbol(BarDataRequest barDataRequest)
        {
            if (_classLogger.IsInfoEnabled)
            {
                _classLogger.Info("Unsubscription request received " + barDataRequest, _type.FullName,
                                  "UnsubscribleSymbol");
            }

            // Remove symbol from the Bar list
            BarSubscriptionList.Remove(barDataRequest.Security.Symbol);
        }
        /// <summary>
        /// Manages new incoming Live Bar request
        /// </summary>
        /// <param name="barDataRequest">Contains info for the Live Bar to be subscribed</param>
        public void SubscribeLiveBars(BarDataRequest barDataRequest)
        {
            if (_asyncClassLogger.IsDebugEnabled)
            {
                _asyncClassLogger.Debug(
                    "Sending live bar subscription request to data handler for: " + barDataRequest.Security.Symbol,
                    _type.FullName, "SubscribeLiveBars");
            }

            // Send request to DataHandler
            _dataHandler.SubscribeSymbol(barDataRequest);
        }
예제 #14
0
 /// <summary>
 /// Unsubscribe Bar with given specifications
 /// </summary>
 /// <param name="barDataRequest">TradeHub Bar Data Request Message</param>
 /// <param name="barGeneratorKey">Unique Key to identify Bar</param>
 /// <param name="barEvent">The bar event that the subscribing code needs to hook the bar event to</param>
 public void Unsubscribe(BarDataRequest barDataRequest, string barGeneratorKey, Action <Bar, string> barEvent)
 {
     try
     {
         Unsubscribe(barDataRequest.Security, barDataRequest.BarFormat, barDataRequest.BarLength,
                     barDataRequest.PipSize, barDataRequest.BarPriceType, barEvent, barGeneratorKey);
     }
     catch (Exception exception)
     {
         Logger.Error(exception, _type.FullName, "Unsubscribe");
     }
 }
 /// <summary>
 /// Removes the Request from List
 /// </summary>
 /// <param name="barDataRequest"></param>
 public void RemoveBarRequest(BarDataRequest barDataRequest)
 {
     try
     {
         // Findes the BarDataRequest of the same id and removes it from the list.
         var request = BarDataRequests.Single(x => x.Id == barDataRequest.Id);
         BarDataRequests.Remove(request);
     }
     catch (Exception exception)
     {
         Logger.Error(exception, _oType.FullName, "RemoveBarRequest");
     }
 }
예제 #16
0
 /// <summary>
 /// Sends subcription request to IQ Feed Connnector
 /// </summary>
 /// <param name="barDataRequest"></param>
 public void Subscribe(BarDataRequest barDataRequest)
 {
     // Send new request
     _streamingBarsComObject.BarWatch(barDataRequest.Security.Symbol.ToUpperInvariant(), (int)barDataRequest.BarLength,
                                      "",                // begin date time
                                      1,                 // Number of days
                                      100,               // max data points
                                      "",                // begin filter time
                                      "",                // end filter time
                                      barDataRequest.Id, // request id
                                      "s",               // interval type 's' - seconds, 't' - tick, 'v' - volume
                                      0);                // update interval in seconds
 }
예제 #17
0
        /// <summary>
        /// Send Live Bar subscribe request to the Market Data Provider
        /// </summary>
        public void UnsubscribeBars(BarDataRequest barDataRequest)
        {
            try
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Unsubscription request recieved for Bar Factory", _type.FullName,
                                "UnsubscribeBars");
                }

                string key = barDataRequest.Security.Symbol + barDataRequest.BarFormat + barDataRequest.BarPriceType +
                             barDataRequest.BarLength.ToString(CultureInfo.InvariantCulture);

                List <string> reqIds;
                if (_barRequestIdsMap.TryGetValue(key, out reqIds))
                {
                    // Update ReqIDs List
                    reqIds.Remove(barDataRequest.Id);

                    if (reqIds.Count.Equals(0))
                    {
                        // Update Bar ReqIDs Map
                        _barRequestIdsMap.Remove(key);

                        if (Logger.IsInfoEnabled)
                        {
                            Logger.Info("Sending unsubscription request recieved to Bar Factory", _type.FullName,
                                        "UnsubscribeBars");
                        }

                        // Unsubscribe Bar with given Info
                        _barFactory.Unsubscribe(barDataRequest, key, OnLiveBarArrived);
                    }
                    else
                    {
                        // Update Bar ReqIDs Map
                        _barRequestIdsMap[key] = reqIds;

                        if (Logger.IsInfoEnabled)
                        {
                            Logger.Info("Requested Bar ID removed from the Internal IDs Map", _type.FullName,
                                        "UnsubscribeBars");
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "UnsubscribeBars");
            }
        }
예제 #18
0
 /// <summary>
 /// Publishes Bar Data Request
 /// </summary>
 public void PublishBarDataRequest(BarDataRequest barDataRequest)
 {
     try
     {
         // Message to be published
         IMessage <BarDataRequest> message = new Message <BarDataRequest>(barDataRequest);
         // Publish message
         _easyNetQBus.Publish(_easyNetQExchange, _barRequestQueueRoutingKey, true, false, message);
     }
     catch (Exception exception)
     {
         Logger.Error(exception, _type.FullName, "PublishBarDataRequest");
     }
 }
        public void BarData_SendRequestToServer_ReceiveBarDataFromServer()
        {
            string symbol        = "AAPL";
            bool   logonReceived = false;
            bool   dataReceived  = false;

            var logonManualResetEvent = new ManualResetEvent(false);
            var dataManualResetEvent  = new ManualResetEvent(false);

            var dataRequestMessage = new BarDataRequest()
            {
                Security = new Security()
                {
                    Symbol = symbol
                }
            };

            dataRequestMessage.Id           = "AAOOA";
            dataRequestMessage.BarPriceType = BarPriceType.MEAN;
            dataRequestMessage.BarLength    = 60;
            dataRequestMessage.BarFormat    = BarFormat.TIME;
            dataRequestMessage.BarSeed      = 0;
            dataRequestMessage.PipSize      = 1;

            _marketDataProvider.LogonArrived += delegate(string providerName)
            {
                logonReceived = true;
                logonManualResetEvent.Set();

                _marketDataProvider.SubscribeBars(dataRequestMessage);
            };

            _marketDataProvider.BarArrived += delegate(Bar data, string key)
            {
                dataReceived = true;
                dataManualResetEvent.Set();
                Console.WriteLine(key + data);
            };

            _marketDataProvider.Start();

            logonManualResetEvent.WaitOne(10000, false);
            dataManualResetEvent.WaitOne(220000, false);

            Assert.AreEqual(true, logonReceived, "Logon Received");
            Assert.AreEqual(true, dataReceived, "Data Received");
        }
예제 #20
0
        /// <summary>
        /// Creats a seprate thread for each request.
        /// </summary>
        /// <param name="request"></param>
        public void FetchData(BarDataRequest request)
        {
            try
            {
                var task = Task.Factory.StartNew(() => _fetchMarketData.ReadData(request));

                _tasksCollection.Add(task);

                //_marketDataList=_fetchMarketData.ReadData(request,true);
                //_persistanceDataCount=_marketDataList.Count;
                //Task.Factory.StartNew(UseLocalData1);
            }
            catch (Exception exception)
            {
                _classLogger.Error(exception, _type.FullName, "FetchData");
            }
        }
예제 #21
0
        public void PopulateBarData()
        {
            DateTime currentTime = new DateTime(2013, 8, 1);
            var      barsArray   = new Bar[50000]; // 200000 Ticks + 50000 Bars

            // Populate values.
            for (int i = 0; i < 50000; i++)
            {
                Bar bar = new Bar("TestRequest");
                bar.Security = new Security()
                {
                    Symbol = "AAPL"
                };
                bar.MarketDataProvider = MarketDataProvider.SimulatedExchange;
                bar.Open  = 1.22M;
                bar.High  = 1.22M;
                bar.Low   = 1.22M;
                bar.Close = 1.22M;

                bar.DateTime = currentTime.AddMinutes(i);
                barsArray[i] = bar;
            }

            // Enumerable to be used in the function call.
            IEnumerable <Bar> barsList = barsArray;

            // Request to be used for testing.
            _barDataRequest = new BarDataRequest {
                Security = new Security {
                    Symbol = "AAPL"
                }, Id = "TestRequest"
            };

            // Time value to be used with Moq Object.
            var startTime = new DateTime(2013, 06, 17);
            var endTime   = new DateTime(2013, 06, 18);

            // Mock Read Bars Response.
            _moqReadMarketData.Setup(rqd => rqd.
                                     ReadBars(startTime, endTime, "Blackwood", _barDataRequest)).Returns(barsList);

            // Mock Publish methods.
            _moqCommunicationController.Setup(cc => cc.PublishBarData(It.IsAny <Bar>()));
            _moqCommunicationController.Setup(cc => cc.PublishTickData(It.IsAny <Tick>()));
        }
예제 #22
0
        /// <summary>
        /// Creates Live Bar subscription message
        /// </summary>
        /// <param name="id">Unique Subscription ID</param>
        /// <param name="security">TradeHub Security containing info regarding the symbol</param>
        /// <param name="barFormat">Format on which to generate bars</param>
        /// <param name="barPriceType">Price Type to be used for generating Bars</param>
        /// <param name="barLength">Lenght of required Bar</param>
        /// <param name="pipSize">Bar Pip Size</param>
        /// <param name="barSeed">Bar Seed</param>
        /// <param name="marketDataProvider">Name of market data provider to be used</param>
        /// <returns>TradeHub BarDataRequest object</returns>
        public static BarDataRequest LiveBarSubscription(string id, Security security, string barFormat, string barPriceType, decimal barLength,
                                                         decimal pipSize, decimal barSeed, string marketDataProvider)
        {
            // Create new Live Bar request message
            BarDataRequest barDataRequest = new BarDataRequest
            {
                Id                 = id,
                Security           = security,
                BarFormat          = barFormat,
                BarPriceType       = barPriceType,
                BarLength          = barLength,
                PipSize            = pipSize,
                BarSeed            = barSeed,
                MarketDataProvider = marketDataProvider
            };

            return(barDataRequest);
        }
예제 #23
0
 /// <summary>
 /// Subscribe Live Bars
 /// </summary>
 /// <param name="barDataRequest"></param>
 public bool SubscribeBars(BarDataRequest barDataRequest)
 {
     //MarketDataControler.SubscribeSymbol(barDataRequest);
     if (Logger.IsInfoEnabled)
     {
         Logger.Info("Sending Subscription to Simulated Exchange " + barDataRequest, _type.FullName, "SubscribeBars");
     }
     try
     {
         _communicationController.PublishBarDataRequest(barDataRequest);
         return(true);
     }
     catch (Exception exception)
     {
         Logger.Error(exception, _type.FullName, "SubscribeBars");
     }
     return(false);
 }
예제 #24
0
        /// <summary>
        /// Event Fired When User Request Bar Data
        /// </summary>
        public void RequestBarData(BarDataRequest barDataRequest)
        {
            try
            {
                // Send Live bar subscription requests
                _marketDataService.Subscribe(barDataRequest);

                _responseHandler.NewBarRequestArrived(barDataRequest);
                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug("Sending Bar Request To Market Data Engine" + barDataRequest, _oType.FullName, "RequestBarData");
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _oType.FullName, "RequestBarData");
            }
        }
예제 #25
0
        public void BarSubscriptionMarketDataProviderTestCase()
        {
            bool isConnected = false;
            bool barArrived  = false;

            BarDataRequest barDataRequest = new BarDataRequest()
            {
                Security = new Security()
                {
                    Symbol = "IBM"
                },
                Id = "123456",
                MarketDataProvider = Common.Core.Constants.MarketDataProvider.Simulated,
                BarFormat          = Common.Core.Constants.BarFormat.TIME,
                BarLength          = 2,
                PipSize            = 1.2M,
                BarPriceType       = Common.Core.Constants.BarPriceType.ASK
            };

            var manualLogonEvent = new ManualResetEvent(false);
            var manualBarEvent   = new ManualResetEvent(false);

            _marketDataProvider.LogonArrived +=
                delegate(string obj)
            {
                isConnected = true;
                _marketDataProvider.SubscribeBars(barDataRequest);
                //manualLogonEvent.Set();
            };

            _marketDataProvider.BarArrived +=
                delegate(Bar obj, string arg2)
            {
                barArrived = true;
                _marketDataProvider.Stop();
                manualBarEvent.Set();
            };

            _marketDataProvider.Start();
            //manualLogonEvent.WaitOne(30000, false);
            manualBarEvent.WaitOne(300000, false);
            Assert.AreEqual(true, isConnected, "Is Market Data Provider connected");
            Assert.AreEqual(true, barArrived, "Bar arrived");
        }
예제 #26
0
        /// <summary>
        /// Subscribe to New Symbol for bar data
        /// </summary>
        /// <param name="request"></param>
        public void SubscribeSymbol(BarDataRequest request)
        {
            if (Logger.IsInfoEnabled)
            {
                Logger.Info("Simulated Exchange Recieved Request for " + request, _type.FullName, "SubscribeSymbol");
            }

            // Add new symbol to the Bar list
            if (!_barSubscriptionList.Contains(request.Security.Symbol))
            {
                _barSubscriptionList.Add(request.Security.Symbol);
            }

            // Fetch data if its not already fetched for ticks
            if (!_tickSubscriptionList.Contains(request.Security.Symbol))
            {
                FetchData(request);
            }
        }
        public void DataProviderLiveBarUnsubscribeRequestTestCase_MultipleRequest()
        {
            _messageProcessor.OnLogonMessageRecieved(new Login()
            {
                MarketDataProvider = Constants.MarketDataProvider.Blackwood
            }, "AppID");

            BarDataRequest barDataRequest = new BarDataRequest()
            {
                Security = new Security()
                {
                    Symbol = "IBM"
                },
                Id = "123456",
                MarketDataProvider = Constants.MarketDataProvider.Blackwood,
                BarFormat          = Constants.BarFormat.TIME,
                BarLength          = 2,
                PipSize            = 1.2M,
                BarPriceType       = Constants.BarPriceType.ASK
            };

            _messageProcessor.OnLiveBarSubscribeRequest(barDataRequest, "1");
            _messageProcessor.OnLiveBarSubscribeRequest(barDataRequest, "2");

            Assert.AreEqual(1, _messageProcessor.ProvidersLoginRequestMap[Constants.MarketDataProvider.Blackwood].Count, "Number of Login Requests recieved");
            Assert.AreEqual(1, _messageProcessor.ProvidersMap.Count, "Number of data provider instances loaded");

            Assert.AreEqual(1, _messageProcessor.LiveBarRequestsMap.Count, "Number of data providers with Live data request");

            Assert.AreEqual(1, _messageProcessor.SubscriptionMap.Count, "Number of data providers with subscriptions");
            Assert.AreEqual(1, _messageProcessor.SubscriptionMap[Constants.MarketDataProvider.Blackwood].Count, "Number of subscriptions for current provider");

            Dictionary <Security, List <string> > subscrition = _messageProcessor.SubscriptionMap[Constants.MarketDataProvider.Blackwood];

            Assert.AreEqual(1, (subscrition[new Security()
                                            {
                                                Symbol = "IBM"
                                            }]).Count, "Number of subscriptions for current Security");

            _messageProcessor.OnLiveBarUnsubscribeRequest(barDataRequest, "1");

            Assert.AreEqual(1, _messageProcessor.SubscriptionMap.Count, "Number of data providers with subscriptions");
        }
 /// <summary>
 /// Addes New bar Request to List
 /// </summary>
 /// <param name="barDataRequest"></param>
 public void NewBarRequestArrived(BarDataRequest barDataRequest)
 {
     try
     {
         if (Logger.IsInfoEnabled)
         {
             Logger.Info("Added Bar Request Message " + barDataRequest, _oType.FullName, "NewBarRequestArrived");
         }
         // Check to make sure that an Bar Request with the same id dont exist
         if (!BarDataRequests.Any(x => x.Id == barDataRequest.Id))
         {
             BarDataRequests.Add(barDataRequest);
         }
     }
     catch (Exception exception)
     {
         Logger.Error(exception, _oType.FullName, "NewBarRequestArrived");
     }
 }
예제 #29
0
        /// <summary>
        /// Subscribe to New Symbol for bar data
        /// </summary>
        /// <param name="barDataRequest"></param>
        public void SubscribeSymbol(BarDataRequest barDataRequest)
        {
            if (_classLogger.IsInfoEnabled)
            {
                _classLogger.Info("New subscription request recieved Request for " + barDataRequest, _type.FullName, "SubscribeSymbol");
            }

            // Add new symbol to the Bar list
            if (!BarSubscriptionList.Contains(barDataRequest.Security.Symbol))
            {
                BarSubscriptionList.Add(barDataRequest.Security.Symbol);
            }

            // Fetch data if its not already fetched for ticks
            if (!TickSubscriptionList.Contains(barDataRequest.Security.Symbol))
            {
                FetchData(barDataRequest);
            }
        }
예제 #30
0
        /// <summary>
        /// Send Live Bar subscribe request to the Market Data Provider
        /// </summary>
        public void SubscribeBars(BarDataRequest barDataRequest)
        {
            try
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Sending incoming live bar subscription request to Bar Factory", _type.FullName,
                                "SubscribeBars");
                }

                string key = barDataRequest.Security.Symbol + barDataRequest.BarFormat + barDataRequest.BarPriceType +
                             barDataRequest.BarLength.ToString(CultureInfo.InvariantCulture);

                List <string> reqIds;
                if (_barRequestIdsMap.TryGetValue(key, out reqIds))
                {
                    // Update ReqIDs List
                    reqIds.Add(barDataRequest.Id);

                    // Update Bar ReqIDs Map
                    _barRequestIdsMap[key] = reqIds;
                }
                else
                {
                    // Initialize
                    reqIds = new List <string>();

                    // Update ReqIDs List
                    reqIds.Add(barDataRequest.Id);

                    // Update Bar ReqIDs Map
                    _barRequestIdsMap[key] = reqIds;

                    // Subscribe Bar Factory to obtain Live Bars
                    _barFactory.Subscribe(barDataRequest, key, OnLiveBarArrived);
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "SubscribeBars");
            }
        }