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