public List <ITickDataQuery> GetTickDataQueries(ITickDataQuery queryParms) { paramsChecks(queryParms); var queries = new List <ITickDataQuery>(); if (queryParms.EndDate <= queryParms.StartDate) { return(queries); } if (queryParms.EndDate - queryParms.StartDate <= new TimeSpan(24, 0, 0)) { queries.Add(GenerateSingleQuery(queryParms, queryParms.StartDate, queryParms.EndDate)); return(queries); } for (var dt = queryParms.StartDate; dt.Date <= queryParms.EndDate; dt = dt.AddDays(1)) { var start = new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0); // first tick of the day var end = start.AddDays(1).AddTicks(-1); // last tick of the day queries.Add(GenerateSingleQuery(queryParms, start, end)); } return(trimFirstAndLastQueries(queryParms, queries)); }
private TickData BBEventToTickData(Element bbElement, ITickDataQuery tickDateQuery) { var dataPoint = new TickData() { Security = tickDateQuery.Security, SecurityObj = tickDateQuery.CorrelationIdObj }; if (bbElement.HasElement("time") && bbElement.HasElement("type") && bbElement.HasElement("value") && bbElement.HasElement("size")) { // tick field data dataPoint.TimeStamp = bbElement.GetElementAsTime("time").ToSystemDateTime(); //dataPoint.TimeStamp = Convert.ToDateTime(bbElement.GetElementAsString("time"));//.ToUniversalTime(); dataPoint.Price = bbElement.GetElementAsFloat64("value"); dataPoint.Size = (uint)bbElement.GetElementAsInt32("size"); string msgType = bbElement.GetElementAsString("type"); Enum.TryParse(msgType, true, out dataPoint.Type); } return(dataPoint); }
private void paramsChecks(ITickDataQuery queryParms) { if (queryParms.Fields == null || queryParms.Fields.Count == 0) { queryParms.Fields = GetDefaultFields(); } if (queryParms.Fields.Contains(null)) { throw new ArgumentNullException("ITickDataQuery.FieldList", "FieldList contains nulls"); } if (queryParms.StartDate == default(DateTime)) { throw new ArgumentNullException("StartDate", "StartDate Property cannot be default (DateTime.MinValue)"); } if (queryParms.EndDate == default(DateTime)) { throw new ArgumentNullException("EndDate", "EndDate Property cannot be default (DateTime.MinValue)"); } if (queryParms.Security == default(string)) { throw new ArgumentNullException("Security", "Security Property cannot Empty"); } }
private Request getBBRequest(ITickDataQuery query) { Service refDataService = Session.GetService("//blp/refdata"); Request request = refDataService.CreateRequest("IntradayTickRequest"); request.Set("security", query.Security); Element eventTypes = request.GetElement("eventTypes"); foreach (string field in query.Fields) { eventTypes.AppendValue(field); } request.Set("includeConditionCodes", query.IncludeConditionCode); request.Set("includeExchangeCodes", query.IncludeExchangeCode); request.Set("startDateTime", new BDateTime(query.StartDate)); request.Set("endDateTime", new BDateTime(query.EndDate)); return(request); }
private bool sendRequest(ITickDataQuery tickDataQuery) { if (!ConnectAndOpenSession()) { return(false); } Request request = getBBRequest(tickDataQuery); CorrelationID cID = new CorrelationID(tickDataQuery); Session.Cancel(cID); Session.SendRequest(request, cID); var msg = String.Format("Submitted request: {0} ({1} ~ {2}) ...", tickDataQuery.Security, tickDataQuery.StartDate.ToString("yy/MM/dd HH:mm:ss"), tickDataQuery.EndDate.ToString("yy/MM/dd HH:mm:ss")); OnBBHTDUpdate(new BBHTDEventArgs(EventType.StatusMsg, msg)); if (!Asynchronous) { return(synchronousProcessing()); } return(true); }
private static TickData DataRowToTickData(ITickDataQuery tdQuery, DataRow row) { DataWrangler.Structures.Type type; DateTime timeStamp; Double price; uint size; Dictionary <string, string> codes = null; TickData tick = null; bool successfulParse = false; // try parse dataRow for tick data values if (Enum.TryParse(row[0].ToString(), out type)) { if (DateTime.TryParse(row[1].ToString(), out timeStamp)) { if (Double.TryParse(row[2].ToString(), out price)) { if (uint.TryParse(row[3].ToString(), out size)) { if ((price > 0) || (price < 0)) { // if there are any codes, add to the tickData event if ((row[4].ToString() != String.Empty) || (row[5].ToString() != String.Empty)) { codes = GetCodes(row[4].ToString(), row[5].ToString(), type); } // create a new tick data event tick = new TickData { Type = type, TimeStamp = timeStamp, Price = price, Size = size, Codes = codes, Security = tdQuery.Security, SecurityObj = tdQuery.CorrelationIdObj, }; successfulParse = true; } } } } } if (!successfulParse) { Console.WriteLine("Bad data row: type = {0}, time {1}, price {2}, size {3}, CCs = {4}, ECs = {5}", row[0].ToString(), row[1].ToString(), row[2].ToString(), row[3].ToString(), row[4].ToString(), row[5].ToString()); } return(tick); }
private void playBackAndWriteOut(ITickDataQuery query) { responded[query.Security] = true; bool allDone = true; foreach (var received in responded) { if (!received.Value) { allDone = false; } } if (allDone) { //query.Security Console.WriteLine("Download Completed"); appendToTextBox("Download Completed. Playback started ..."); System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); _histFeed.PlayBackData(); sw.Stop(); _histFeed.Reset(); appendToTextBox(String.Format("Playback Completed in {0} secs", sw.Elapsed.ToString())); appendToTextBox("Writing to file"); const string filePath = @"C:\Users\Andre\Documents\BBDataSource\Market Aggregator OutPut\"; // use PM suffix on evening session files string fileNameSuffix = (query.EndDate.Hour < 7) ? fileNameSuffix = "" : fileNameSuffix = "_PM"; sw.Reset(); sw.Start(); _markets.BatchWriteOutData(MarketAggregator.OutPutType.FlatFile, MarketAggregator.OutPutMktMode.SeperateAndAggregated, filePath, 25, fileNameSuffix); sw.Stop(); appendToTextBox(String.Format("Completed file writeout in {0} secs", sw.Elapsed.ToString())); _markets.Reset(); _histFeed.Reset(); foreach (var factory in _factories) { responded[factory.SecurityName] = false; } foreach (var bbHist in _histFeed.HistoricalAdapters) { if (bbHist.ConnectAndOpenSession()) { bbHist.SendNextRequest(); } } } }
private TickDataQuery GenerateSingleQuery(ITickDataQuery queryParms, DateTime start, DateTime end) { return(new TickDataQuery() { Security = queryParms.Security, CorrelationIdObj = queryParms.CorrelationIdObj, StartDate = start, EndDate = end, IncludeConditionCode = queryParms.IncludeConditionCode, IncludeExchangeCode = queryParms.IncludeExchangeCode, Fields = queryParms.Fields }); }
private List <ITickDataQuery> trimFirstAndLastQueries(ITickDataQuery queryParms, List <ITickDataQuery> queries) { if (queries[0].StartDate < queryParms.StartDate) { queries[0].StartDate = queryParms.StartDate; } if (queries[queries.Count - 1].EndDate > queryParms.EndDate) { queries[queries.Count - 1].EndDate = queryParms.EndDate; } return(queries); }
private List <TickData> ConvertToTickData(ITickDataQuery tdQuery, DataTable dt) { OnHistTDUpdate(new HistTDEventArgs(EventType.StatusMsg, String.Format("{0}: Converting SQL to DataTable({1} rows)", tdQuery.Security, dt.Rows.Count.ToString()))); var tickData = new List <TickData>(); foreach (DataRow row in dt.Rows) { TickData tick = DataRowToTickData(tdQuery, row); if (tick != null) { tickData.Add(tick); } } return(tickData); }
private void sendRequest(ITickDataQuery tdQuery, bool useBatching = true) { requestPointer++; List <ITickDataQuery> batchedQueries = new List <ITickDataQuery>(); batchedQueries.Add(tdQuery); if (useBatching) { batchedQueries.Clear(); TimeSpan timeInterval = new TimeSpan(0, 60, 0); batchedQueries = generateBatchedQueries(getBatchedTimes(tdQuery.StartDate, tdQuery.EndDate, timeInterval), tdQuery, timeInterval); } int partialCnt = 1; foreach (var query in batchedQueries) { DataTable data = _histDs.getTickDataSeries(query.Security, query.StartDate, query.EndDate); OnHistTDUpdate(new HistTDEventArgs(EventType.StatusMsg, String.Format("{0}: SQL Partial Response ({1} of {2})", query.Security, partialCnt.ToString(), batchedQueries.Count.ToString()))); if (data.Rows.Count > 0) { List <TickData> tickData = ConvertToTickData(tdQuery, data); DataHandler.ParseTickDataList(tdQuery.CorrelationIdObj, tickData); } partialCnt++; } OnHistTDUpdate(new HistTDEventArgs(EventType.StatusMsg, String.Format("{0}: SQL Response ({1} of {2}) received", tdQuery.Security, requestPointer.ToString(), _queries.Count.ToString()))); OnHistTDUpdate(new HistTDEventArgs(EventType.DataMsg, String.Format("Completed ({0} of {1})", requestPointer.ToString(), _queries.Count.ToString()), tdQuery)); }
private List <ITickDataQuery> generateBatchedQueries(List <DateTime> batchedTimes, ITickDataQuery baseQuery, TimeSpan timeInterval) { List <ITickDataQuery> queries = new List <ITickDataQuery>(); foreach (var nextstart in batchedTimes) { queries.Add(new TickDataQuery() { Security = baseQuery.Security, StartDate = nextstart, EndDate = nextstart.AddTicks(-1) + timeInterval, Fields = baseQuery.Fields, CorrelationIdObj = baseQuery.CorrelationIdObj, IncludeConditionCode = baseQuery.IncludeConditionCode, IncludeExchangeCode = baseQuery.IncludeExchangeCode, }); } return(queries); }