Exemplo n.º 1
0
    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();
    }
Exemplo n.º 3
0
 protected override RelativeDate calcStartTime(RelativeDate livePoint_)
 {
   return livePoint_.GetDayBegin();
 }