Exemple #1
0
    public static Tuple<ConstructGen<double>, int, DateTime> TransformToCompoChartDataAndShift(DataAroundEvent[] data_, int numberAroundEvents_, DataAroundEventField field_)
    {
        ConstructGen<double> ret = new ConstructGen<double>(numberAroundEvents_  + 1);
        ret.ColumnHeadings = new string[ret.ArrayLength];
        //ret.ColumnHeadings[0] = DateTime.Today.ToString("dd-MMM-yyyy");
        for (int i = 0; i <= numberAroundEvents_; ++i)
        {            
            ret.ColumnHeadings[i] = i.ToString();
        }
        var headings = new List<string>(ret.ColumnHeadings);


        int dayShift=0;
        DateTime closestEvent=DateTime.MinValue;
        if (data_ != null)
        {
            var eventdates = data_.Select(d => d.EventDate).ToArray();
            // first find out any events falls within next 15 days
            var maxAllowEventDate = DateTime.Today.AddDays(numberAroundEvents_);
            var includeEvents = eventdates
                .Where(newEvent => newEvent >= DateTime.Today && newEvent <= maxAllowEventDate);

            
            if (includeEvents.Any())
            {
                closestEvent = includeEvents.OrderBy(e => e).First();
                dayShift = (int)(closestEvent -DateTime.Today).TotalDays;
                int firstDataIndex = numberAroundEvents_ - dayShift;


                foreach (var eve in data_.OrderBy(x => x.EventDate))
                {
                    // initialise to NaN
                    ret.SetValues(eve.EventDate, Utils.GetArrayOfValue<double>(double.NaN, ret.ArrayLength));
                    var subData = eve[field_];
                    if (subData != null)
                        for (int i = 0; i <= numberAroundEvents_; i++)
                        {
                            if (firstDataIndex + i > subData.Data.Length -1) continue;
                            if (subData.Data[firstDataIndex+i] == null) continue;
                            ret.SetValue(eve.EventDate, i, subData.Data[firstDataIndex+i].Value);
                        }
                }
            }

            
        }
        return new Tuple<ConstructGen<double>, int, DateTime>(ret, dayShift, closestEvent);
    }
      internal void Apply(DataAroundEvent[] data_)
      {
          try
          {
              chartScaleLimit = 0.0;
              // recent
              {
                  scsRecent.ClearData();
                  var recentEvents = data_.GroupBy(d => d.EventDate).Select(g => new DataAroundEvent(g.First().EventDate, 
                                                                              g.Select(x => x.Instrument).Aggregate((a, b) => a + "\n" + b), 
                                                                              g.First().RawData, 
                                                                              g.First().NumPointsAroundEvent,
                                                                              g.Select(x => x.EventCode).Aggregate((a, b) => a + "\n" + b)))
                                                                              .OrderByDescending(x => x.EventDate)
                                                                              .Where(ev => ev.EventDate <= DateTime.Today.AddDays(m_displayOptions.NumberOfRecentQuartersToShow))
                                                                              .Take(m_displayOptions.NumberOfRecentEventsToShow).ToArray();

                  scsRecent.ApplyData(recentEvents, m_displayOptions.NumberOfPointsAroundEvent, m_displayOptions.FieldToShow);
                  scsRecent.SetupForDataType(m_displayOptions.FieldToShow);

                  scsRecent.ApplyStats(recentEvents, m_displayOptions.NumberOfPointsAroundEvent, m_displayOptions.FieldToShow);

                  updateRecentChartSeries();
              }

              // quarters
              {
                  scsQuarterly.ClearData();
                  var quarters = data_.Select(x => getQuarterEnd(x.EventDate)).Distinct().OrderByDescending(x => x).ToList();

                  quarters = quarters.Count > m_displayOptions.NumberOfRecentQuartersToShow ? quarters.Take(m_displayOptions.NumberOfRecentQuartersToShow).ToList() : quarters;

                  foreach (var quarterEnd in quarters)
                  {
                      var des = data_.Where(x => quarterEnd == getQuarterEnd(x.EventDate)).OrderBy(x => x.EventDate).ToArray();

                      var con = Helper.TransformToCon(des, m_displayOptions.NumberOfPointsAroundEvent, m_displayOptions.FieldToShow);

                      double[] avgs = new double[con.ArrayLength];

                      for (int i = 0; i < avgs.Length; ++i)
                      {
                          var validNumberSeries = con.GetColumnValues(i).Where(x => double.IsNaN(x) == false);

                          if (!validNumberSeries.Any()) continue;

                          avgs[i] = validNumberSeries.ToArray().Average();
                      }

                      scsQuarterly.ApplyData(getQuarterHeading(quarterEnd), con.ColumnHeadings, avgs);
                  }
                  scsQuarterly.SetupForDataType(m_displayOptions.FieldToShow);
              }

              // year-on-year
              {
                  scsYearly.ClearData();
                  var years = data_.Select(x => x.EventDate.Year).Distinct().OrderByDescending(x => x).ToList();

                  // going to use -1 for 'all'
                  if (m_displayOptions.AddLineForAllToYearly)
                      years.Add(-1);


                  var currentYearlyProbComboText = cmbYearlyProb.Text;
                  m_reloadingCombo = true;
                  cmbYearlyProb.Items.Clear();
                  cmbYearlyProb.Items.Add("None");

                  m_yearlyProbs.Clear();

                  foreach (var year in years)
                  {
                      // default combo to last year if not previously set
                      if (string.Compare(string.Empty, currentYearlyProbComboText) == 0)
                          currentYearlyProbComboText = year.ToString();

                      var yearString = year == -1 ? "All" : year.ToString();

                      cmbYearlyProb.Items.Add(yearString);

                      // get dataaroundevent that is within this year
                      var des = year == -1 ? data_ : data_.Where(x => x.EventDate.Year == year).OrderBy(x => x.EventDate).ToArray();

                      var con = Helper.TransformToCon(des, m_displayOptions.NumberOfPointsAroundEvent, m_displayOptions.FieldToShow);
                      var conForProbability = Helper.TransformToCon(des, m_displayOptions.NumberOfPointsAroundEvent, DataAroundEventField.RawDataAroundEvent_Diffs);

                      double[] avgs = new double[con.ArrayLength];
                      double[] yearlyProbs = new double[conForProbability.ArrayLength];

                      for (int i = 0; i < avgs.Length; ++i)
                      {
                          var validNumberSeries = con.GetColumnValues(i).Where(x => double.IsNaN(x) == false);

                          if (!validNumberSeries.Any()) continue;

                          avgs[i] = validNumberSeries.ToArray().Average();

                          {
                              var alldiffs = conForProbability.GetColumnValues(i).Where(x => double.IsNaN(x) == false).ToList();
                              yearlyProbs[i] = ProbabilityCalc.CalcProb(alldiffs, m_displayOptions.ProbCalcMethod);
                          }
                      }

                      m_yearlyProbs.Add(yearString, new Tuple<string[], double[]>(conForProbability.ColumnHeadings, yearlyProbs));

                      scsYearly.ApplyData(yearString, con.ColumnHeadings, avgs);
                  }

                  m_lastLoadedMaxProbability = ProbabilityCalc.GetMaxValue(m_displayOptions.ProbCalcMethod);

                  // re-set the selected combobox to its original value if it's there
                  if (!string.IsNullOrEmpty(currentYearlyProbComboText))
                  {
                      for (int i = 0; i < cmbYearlyProb.Items.Count; ++i)
                          if (string.Compare(currentYearlyProbComboText, cmbYearlyProb.Items[i].ToString()) == 0)
                          {
                              cmbYearlyProb.SelectedIndex = i;
                              break;
                          }
                  }

                  m_reloadingCombo = false;
                  reloadYearlyProbability();
                  scsYearly.SetupForDataType(m_displayOptions.FieldToShow);
              }

              // current vs hist chart
              BuildCurrentVsHistchart(data_);

              // hist chart
              // filter n/a for chart series
              var rawData = data_.First().EODData ?? data_.First().RawData;
              var filteredData = rawData.Dates.Where(d => !double.IsNaN(rawData.ValueOnDate(d)))
                  .Select(date =>
                      new
                      {
                          d = date,
                          data = rawData.ValueOnDate(date)
                      }).ToArray();
              if (filteredData.Any())
              {
                  var filteredSeries = new DatedDataCollectionGen<double>(filteredData.Select(x => x.d).ToArray(),
                      filteredData.Select(x => x.data).ToArray());
                  AddChartSeries(filteredSeries, "Time Series");
                  var eventdates = data_.Select(d => new {d.EventCode, d.EventDate}).ToArray();
                  var eventGroup = eventdates.GroupBy(ev => ev.EventCode).ToArray();
                  var eventDateList = eventGroup.Select(g => g.Select(x => x.EventDate).ToArray()).ToList();
                  var desc = eventGroup.Select((g,i) => string.IsNullOrEmpty(g.Key) ? "test"+ i+1 : g.Key).ToArray();                  
                  EventHistChart.SetScatterValues(eventDateList, desc);                  

                  //AddScatterSeries(eventdates, eventdates.Select(x => data_.First().RawData.ValueOnDate(x)).ToArray(), "Events", Color.GreenYellow, 40, "##0.000", null, Infragistics.UltraChart.Shared.Styles.NullHandling.DontPlot, null, SymbolIcon.Triangle);
              }
              // scale y-axis
              {
                  var ctrls = new[] {scsRecent.Chart, scsYearly.Chart, scsQuarterly.Chart, scsHistVsCurrent.Chart};

                  Rescale(ctrls);
              }
          }
          catch (Exception ex_)
          {
              Logger.Error("Error loading charts", typeof (SeasonalityCharts), ex_);
          }
      }