示例#1
0
        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));
        }
示例#2
0
        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);
        }
示例#3
0
        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");
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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();
                    }
                }
            }
        }
示例#8
0
 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
     });
 }
示例#9
0
        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);
        }
示例#10
0
        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);
        }
示例#11
0
        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));
        }
示例#12
0
        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);
        }