private void backFillFromBloombergToNow() { var startTimeInGMT = TimeZoneHelper.ConvertDateTime(DateTime.Now, TimeZoneInfo.Local, TimeZoneInfo.Utc).StartOfDay(); var endTimeInGMT = TimeZoneHelper.ConvertDateTime(DateTime.Now.StartOfMinute(), TimeZoneInfo.Local, TimeZoneInfo.Utc); { var rd = new RelativeDate(IndexedDates, DateTime.Now.ToTZfromLocal(DispTimeZone), DispTimeZone); var start = rd.GetDayBegin(); if (start.Index != RelativeDate.INVALID_INDEX) startTimeInGMT = start.UnderlyingDate.ToGMTFromTZ(DispTimeZone); } { var histBack = BbgTalk.HistoryRequester.GetIntradayBars( startTimeInGMT, endTimeInGMT, BackContractBloombergTicker(), BBG_LIVE_FIELD, 1); backFill(histBack, DayField.BackValue, DayField.BackVolume); } { var histFront = BbgTalk.HistoryRequester.GetIntradayBars( startTimeInGMT, endTimeInGMT, FrontContractBloombergTicker(), BBG_LIVE_FIELD, 1); backFill(histFront, DayField.FrontValue, DayField.FrontVolume); } { var spread = BbgTalk.HistoryRequester.GetIntradayBars( startTimeInGMT, endTimeInGMT, SpreadContractBbgTicker(m_spreadTickerFormation), BBG_LIVE_FIELD, 1); backFill(spread, DayField.SpreadValue, DayField.SpreadVolume); } m_data.Keys.Sort((a, b) => a.CompareTo(b)); // right, bloomberg doesn't give us every minute when we ask for historical candles, so we need to backfill the data so that we have full data ( for every minute ) Line prior = null; while (startTimeInGMT <= endTimeInGMT) { try { var dispDate = startTimeInGMT.ToTZfromGMT(DispTimeZone); var rd = new RelativeDate(IndexedDates, dispDate, DispTimeZone); if (rd.Index == RelativeDate.INVALID_INDEX) continue; if (m_data.HasKey(rd)) { var line = m_data.GetValue(rd, 0); if (prior == null) prior = line; else { if (line.SpreadValue.IsZero()) line.SpreadValue = prior.SpreadValue; if (line.BackContractValue.IsZero()) line.BackContractValue = prior.BackContractValue; if (line.FrontContractValue.IsZero()) line.FrontContractValue = prior.FrontContractValue; line.CalcSeriesValue(DefaultTail); prior = line; } } else { if (prior == null) continue; var newLine = new Line { GMTDateTime = startTimeInGMT.ToString(Line.MongoDateFormat), SpreadValue = prior.SpreadValue, BackContractValue = prior.BackContractValue, FrontContractValue = prior.FrontContractValue }; newLine.CalcSeriesValue(DefaultTail); m_data.SetValue(rd, 0, newLine); prior = newLine; } } finally { startTimeInGMT = startTimeInGMT.AddMinutes(1d); } } m_data.Keys.Sort((a, b) => a.CompareTo(b)); }
public static RelativeDate GetPriorDayStart(this RelativeDate date_) { // what's the start of the date that has been passed in? var dayBegin = date_.GetDayBegin(); // if we haven't managed to find the start of the day for the date passed in, then can't go any further if (dayBegin.Index == RelativeDate.INVALID_INDEX) return dayBegin; var priorRD = date_.IndexDates.FirstOrDefault(x => x.Index == dayBegin.Index - 1); if (priorRD == null) return dayBegin; var rd = new RelativeDate(date_.IndexDates, priorRD.Date, date_.DispTimeZone); return rd.GetDayBegin(); }
protected override RelativeDate calcStartTime(RelativeDate livePoint_) { return livePoint_.GetDayBegin(); }