private double[] findWorstInMonth(ReturnsEval.DataSeriesEvaluator eval_)
    {
      double[] ret = new double[eval_.Monthly.Dates.Length];

      double lowest = 0d;
      int monthIndex = 0;
      double mtd=0d;

      DateTime monthStart=eval_.Daily.Dates[0];

      for (int i = 0; i < eval_.Daily.Dates.Length; ++i)
      {
        DateTime today = eval_.Daily.Dates[i];

        if (today.Year != monthStart.Year || today.Month != monthStart.Month)
        {
          ret[monthIndex] = lowest;
          monthStart = today;
          mtd = 0d;
          lowest=0d;
          ++monthIndex;
        }

        mtd += eval_.Daily.Data[i];
        lowest = Math.Min(mtd, lowest);
      }

      // commit the last one
      ret[monthIndex] = lowest;

      return ret;
    }
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_, ReturnsEval.Period period_, string dateFormat_)
    {
      ultraChart.DataSource = null;
      dt.Rows.Clear();
      dt.Columns.Clear();

      int numberOfValues =  eval_[period_].Dates.Length;

      for (int i = 0; i < numberOfValues; ++i)
      {
        dt.Columns.Add(eval_[period_].Dates[i].ToString(dateFormat_, CultureInfo.InvariantCulture), typeof(double));
      }

      DataRow row = dt.NewRow();

      for (int i = 0; i < numberOfValues; ++i)
      {
        row[i] = eval_[period_].Data[i];
      }

      dt.Rows.Add(row);

      ultraChart.DataSource = dt;
      ultraChart.Data.DataBind();
      ultraChart.InvalidateLayers();

      showChartSeparateControl1.Create(dt, GetType(), period_.ToString() + " Returns of " + eval_.Name);
      setuptooltip();
    }
示例#3
0
    public void Bind(ReturnsEval.DataSeries series_)
    {
      ultraChart.DataSource = null;
      dt.Rows.Clear();
      dt.Columns.Clear();

      if (series_.DrawDowns.Length == 0)
        return;

      for (int i = 0; i < 10 && i < series_.DrawDowns.Length; ++i)
      {
        dt.Columns.Add(getTitle(i+1), typeof(double));
      }

      DataRow row = dt.NewRow();

      for (int i = 0; i < 10 && i < series_.DrawDowns.Length; ++i)
      {
        row[i] = (series_.DrawDowns[i].ValueDown * 100);
      }

      ultraChart.Axis.Y.RangeMax = Convert.ToDouble(series_.DrawDowns[0].ValueDown * 100);

      label1.Text = string.Format("Top {0} drawdowns", Math.Min(10, series_.DrawDowns.Length).ToString());

      dt.Rows.Add(row);
      ultraChart.DataSource = dt;
      ultraChart.Data.DataBind();

      setTitlePosition();
    }
示例#4
0
    public void Bind(ReturnsEval.RegressionResult result_)
    {
      dt.Rows.Clear();
      dt.Columns.Clear();
      ultraChart.DataSource = null;

      
      dt.Columns.Add("Date", typeof(DateTime));
      dt.Columns.Add("Observations", typeof(double));
      dt.Columns.Add("Regression", typeof(double));

      for (int i = 0; i < result_.RegressionPointDates.Length; ++i)
      {
        double regressionVal = result_.LinearRegression.HasInterceptParameter 
          ? result_.LinearRegression.Parameters[0] : 0.0 ;

        for (int j = 0; j < result_.LinearRegressionParameters.Length; ++j)
          regressionVal += (result_.LinearRegressionParameters[j].Value * result_.RegressionMatrix[i, j]);

        dt.LoadDataRow(new object[] { result_.RegressionPointDates[i], result_.Observations[i], regressionVal }, true);
        
      }

      dt.AcceptChanges();

      ultraChart.DataSource = dt;
      ultraChart.Data.DataBind();

      showChartSeparateControl1.Create(dt, GetType(), "Regression vs. Observed");
    }
		public ConditionalCorrelationAnalyzer(ReturnsEval.DataSeriesEvaluator eval1_, ReturnsEval.DataSeriesEvaluator eval2_)
		{
			m_eval = eval1_;
			m_eval2 = eval2_;

			// find common dates

			List<DateTime> commonDates = new List<DateTime>();
			List<DateTime> stratDates = new List<DateTime>(m_eval.Daily.Dates);
			foreach (DateTime date in m_eval2.Daily.Dates)
				if (stratDates.Contains(date))
					commonDates.Add(date);

			QuickSort.Sort<DateTime>(commonDates);

			List<double> first = new List<double>();
			List<double> second = new List<double>();

			// get the values for each of the common dates

			foreach (DateTime date in commonDates)
			{
				first.Add(m_eval.Daily.DataValueOnDate(date));
				second.Add(m_eval2.Daily.DataValueOnDate(date));
			}

			m_eval = new DataSeriesEvaluator(commonDates.ToArray(), first.ToArray(), eval1_.Name, DataSeriesType.Returns);
			m_eval2 = new DataSeriesEvaluator(commonDates.ToArray(), second.ToArray(), eval2_.Name, DataSeriesType.Returns);

			recalc();
		}
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_, ReturnsEval.Period period_)
    {
      m_eval = eval_;
      m_period = period_;

      ClearSeries();
      DatedDataCollectionGen<double> daily = eval_.Daily;
      AddSeries(eval_.Daily.Dates, eval_.Daily.CumulativeReturnSeries, "Cumulative Pnl", 40, "##0.0#%");

      {
        DatedDataCollectionGen<double>[] years = new DatedDataCollectionGen<double>[]
        {
          daily.ToYearsCumulativeYTD(),
          daily.ToYearsCumulativeYTD()
        };

        int index = 1;
        for (int i = 0; i < years[0].Length; ++i)
        {
          if (i>0 && years[0].Dates[i].Year != years[0].Dates[i - 1].Year)
            index = (index == 1) ? 0 : 1;

          years[index].Data[i] = 0d;
        }

        if (ShowYearly)
        {
          AddSeries(years[0].Dates, years[0].Data, "YTD Cumulative(A)", 40, "##0.0#%");
          AddSeries(years[1].Dates, years[1].Data, "YTD Cumulative(B)", 40, "##0.0#%");
        }
      }

      //AddSeries(daily.Dates, daily.ToYearsCumulativeYTD().Data, "YTD Cumulative", 40, "##0.0#%");
      //AddSeries(daily.Dates, daily.ToMonthsCumulativeMTD().Data, "MTD Cumulative", 40, "##0.0#%");
    }
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_, ReturnsEval.Period period_, string dateFormat_, int[] filtIndicies_)
    {
      ultraChart.DataSource = null;
      dt.Rows.Clear();
      dt.Columns.Clear();

      if (eval_.InnerSeries.Count == 0)
        return;

      int[] filt = filtIndicies_;
      if (filt == null)
      {
        filt = new int[eval_.InnerSeries.Count];
        for (int i = 0; i < filt.Length; ++i) filt[i] = i;
      }

      // create a column for the date
      dt.Columns.Add("Date", typeof(string));

      // create a column for each inner evaluator
      foreach (int ind in filt)
        dt.Columns.Add(eval_.InnerSeries[ind].Name, typeof(double));
      //foreach (ReturnsEval.DataSeriesEvaluator eval in eval_.InnerSeries)
      //{
      //  dt.Columns.Add(eval.Name, typeof(double));
      //}

      int numOfRows = eval_[period_].Dates.Length;

      for (int i = 0; i < numOfRows; ++i)
      {
        DataRow row = dt.NewRow();

        row[0] = eval_[period_].Dates[i].ToString(dateFormat_);

        for (int j = 0; j < filt.Length; ++j)
        {
          row[j + 1] = eval_.InnerSeries[filt[j]][period_].Data[i];
        }
        //for (int j = 0; j < eval_.InnerSeries.Count; ++j)
        //{
        //  row[j + 1] = eval_.InnerSeries[j][period_].Data[i];
        //}

        dt.Rows.Add(row);
      }


      ultraChart.ColorModel.ModelStyle = Infragistics.UltraChart.Shared.Styles.ColorModels.CustomSkin;
      ultraChart.ColorModel.Skin.PEs.Clear();
      for (int i = 0; i < eval_.InnerSeries.Count; ++i)
        ultraChart.ColorModel.Skin.PEs.Add(new PaintElement(ColorAttribute.GetColor(i)));
      ultraChart.ColorModel.Skin.ApplyRowWise = false;

      setuptooltip();

      ultraChart.DataSource = dt;
      ultraChart.DataBind();
    }
    public void Bind(ReturnsEval.ConditionalCorrelationAnalyzer anal_)
    {
      tbCond_VolLength.Bind(anal_, "NumDays", new Validators.IntValidator(null));
      tbCond_NumBuckets.Bind(anal_, "NumSections", new Validators.IntValidator(null));

      boundInfraGrid1Vol.Bind(anal_.List, typeof(ReturnsEval.ConditionalCorrelationAnalyzer.ResultItem));
      cbEqualBucketSize.DataBindings.Add("Checked", anal_, "EqualBuckets", false, DataSourceUpdateMode.OnPropertyChanged);
    }
    public void Bind(ReturnsEval.CorrelationAnalyzer analyzer_)
    {
      m_anal = analyzer_;

      m_anal.PropertyChanged += propChanged;
      setupDatatable();
      refresh();
      EstablishDefaultTooltip();
    }
    public void Bind(ReturnsEval.DataSeries series_)
    {
      lblDailyLargestLoss.Bind(series_, "Min", new Validators.DoubleValidator("#0.00%"));
      lblDailyLargestProfit.Bind(series_, "Max", new Validators.DoubleValidator("#0.00%"));
      lblKurtosis.Bind(series_, "Kurtosis", new Validators.DoubleValidator("#0.00"));
      lblSkew.Bind(series_, "Skewness", new Validators.DoubleValidator("#0.00"));
      lblavgLoss.Bind(series_, "AverageLoss", new Validators.DoubleValidator("#0.00%"));
      lblAvgProfit.Bind(series_, "AverageWin", new Validators.DoubleValidator("#0.00%"));

      m_series = series_;
    }
    public void Bind(ReturnsEval.CorrelationAnalyzer anal_)
    {
      init();

      SI.Controls.Util.ClearBindings(this);

      tbNumPeriods.Bind(anal_, "NumberOfPeriods", new Validators.IntValidator(null));
      cmbTenor.Bind(anal_, "Period", new Validators.EnumDescValidator(ReturnsEval.Period.Daily));
      rollingCorrelationChart1.Bind(anal_);
      lblOverallCorr.Bind(anal_, "OverallCorrelation", new Validators.DoubleValidator("##0.0%"));
      cbSpearmans.DataBindings.Add("Checked", anal_, "DoSpearmans", false, DataSourceUpdateMode.OnPropertyChanged);
    }
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_, DateTime startDate_, DateTime endDate_)
    {
      ReturnsEval.DataSeries[] series;
      DataRow row;
      ultraChart.DataSource = null;
      dt.Columns.Clear();
      dt.Rows.Clear();

      if (eval_ == null)
        return;
      if (eval_.InnerSeries.Count == 0)
        return;

      series = new ReturnsEval.DataSeries[eval_.InnerSeries.Count];
      for (int i = 0; i < series.Length; ++i)
      {
        series[i] = eval_.InnerSeries[i][ReturnsEval.Period.Daily];
        dt.Columns.Add(eval_.InnerSeries[i].Name.Replace("_GSLE_1", string.Empty), typeof(double));
      }

      int startIndex = 0;
      int endIndex = 0;

      for(int i=0;i<eval_[ReturnsEval.Period.Daily].Dates.Length;++i)
      {
        if(eval_[ReturnsEval.Period.Daily].Dates[i]<=startDate_)
          startIndex=i;

        if(eval_[ReturnsEval.Period.Daily].Dates[i]>endDate_)
        {
          break;
        }
        else
        {
          endIndex=i;
        }
      }

      row = dt.NewRow();
      for (int j = 0; j < series.Length; ++j)
      {
        row[j] = series[j].Data.Slice(startIndex, endIndex - startIndex).Sum();
      }
      dt.Rows.Add(row);

      ultraChart.DataSource = dt;
      ultraChart.Data.DataBind();

      showChartSeparateControl1.Create(dt, GetType(),
        "Return attribution of " + eval_.Name);
    }
    public void Create(ReturnsEval.DataSeriesEvaluator eval_, ReturnsEval.Period period_, int[] filterIndicies_)
    {
      dt.Rows.Clear();
      dt.Columns.Clear();
      ultraChart.ColorModel.Skin.PEs.Clear();

      if (eval_.InnerSeries.Count == 0)
        return;

      m_eval = eval_;
      m_period = period_;

      m_filterIndicies = filterIndicies_;
      if (m_filterIndicies == null)
      {
        m_filterIndicies = new int[eval_.InnerSeries.Count];
        for (int i = 0; i < m_filterIndicies.Length; ++i) m_filterIndicies[i] = i;
      }


      dt.Columns.Add("Title", typeof(string));

      for(int i=0;i<m_filterIndicies.Length;++i)
      {
        dt.Columns.Add(eval_.InnerSeries[m_filterIndicies[i]].Name, typeof(double));
        ultraChart.ColorModel.Skin.PEs.Add(new PaintElement(ColorAttribute.GetColor(i)));
      }

      ultraChart.DataSource = dt;
      ultraChart.DataBind();

      string dateFormat = EnumHelper.GetAttribute<ReturnsEval.DateDisplayFormatAttribute>(period_).Format;

      ReturnsEval.DataSeries series = eval_[period_];

      for(int j=0;j<series.Dates.Length;++j)
      {
        DataRow row = dt.NewRow();

        row[0] = series.Dates[j].ToString(dateFormat);

        for(int i=0;i<m_filterIndicies.Length;++i)
        {
          row[i + 1] = eval_.InnerSeries[m_filterIndicies[i]][period_].Data[j];
        }

        dt.Rows.Add(row);
      }

      ultraChart.DataBind();
    }
    public void Create(ReturnsEval.DataSeriesEvaluator eval_, ReturnsEval.Period startingPeriod_)
    {
      m_args = new ARgsClass();
      m_args.Period = startingPeriod_;

      boundComboBox1.Items.Add(ReturnsEval.Period.Daily);
      boundComboBox1.Items.Add(ReturnsEval.Period.Monthly);
      boundComboBox1.Bind(m_args, "Period", new Validators.EnumDescValidator(ReturnsEval.Period.Daily));

      m_eval = eval_;

      m_args.PropertyChanged += handleArgsChanged;
      rebind();
    }
示例#15
0
    public void Bind(ReturnsEval.DataSeriesEvaluator evaluator_)
    {
      m_evaluator = evaluator_;
      SI.Controls.Util.ClearBindings(this);

      init();

      rebind();

      if (evaluator_.HasTag(ReturnsEval.DataSeriesEvaluator.Tag.RebalDates))
      {
        DateTime[] rebalDates = (DateTime[])evaluator_.GetTag(ReturnsEval.DataSeriesEvaluator.Tag.RebalDates);
        m_rebalDates = new List<DateTime>(rebalDates);
      }
    }
    public void Bind(ReturnsEval.DataSeries series_)
    {
      lblDailyLargestLoss.Bind(series_, "Min", new Validators.DoubleValidator("#0.00%"));
      lblDailyLargestProfit.Bind(series_, "Max", new Validators.DoubleValidator("#0.00%"));
      lblDailyAverageReturn.Bind(series_, "Mean", new Validators.DoubleValidator("#0.00%"));
      lblDailyVolOfReturns.Bind(series_,"RealisedVolPerAnnum",  new Validators.DoubleValidator("#0.00%"));
      lblDailyLosingPeriods.Bind(series_, "NumberOfLosingPeriods", new Validators.DoubleValidator("###"));
      lblDailyWinningPeriods.Bind(series_, "NumberOfWinningPeriods", new Validators.DoubleValidator("###"));
      lblKurtosis.Bind(series_, "Kurtosis", new Validators.DoubleValidator("#0.00"));
      lblSkew.Bind(series_, "Skewness", new Validators.DoubleValidator("#0.00"));
      lblavgLoss.Bind(series_, "AverageLoss", new Validators.DoubleValidator("#0.00%"));
      lblAvgProfit.Bind(series_, "AverageWin", new Validators.DoubleValidator("#0.00%"));

      m_series = series_;
    }
示例#17
0
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_, int ddIndex_, bool drawdown_)
    {
      SI.Controls.Util.ClearBindings(this);
      ReturnsEval.DrawDown dd = (drawdown_) ? eval_.Daily.DrawDowns[ddIndex_] : eval_.Daily.DrawUps[ddIndex_];
      m_eval = eval_;
      m_ddIndex = ddIndex_;
      m_isDrawdown=drawdown_;

      lblValue.Bind(dd, "ValueDown", new Validators.DoubleValidator("#0.00%"));
      lblFrom.Bind(dd, "StartDate", new Validators.DateValidator());
      lblTo.Bind(dd, "LowDate", new Validators.DateValidator());
      lblRecovery.Bind(dd, "RecoveryDate", new Validators.DateValidator());
      lblZScore.Bind(dd, "ZScore", new Validators.DoubleValidator("#0.00"));
      lblProb.Bind(dd, "Prob", new Validators.DoubleValidator("#0.00%"));
      //lblProb.Visible = false;
    }
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_, ReturnsEval.Period period_)
    {
      m_rollingWindow = eval_[period_].RollingSharpeSeries;
      m_baseName = eval_.Name;


      cmbRollType.Items.Clear();
      cmbRollType.Items.Add(ReturnsEval.RollingSeriesType.Sharpe);
      cmbRollType.Items.Add(ReturnsEval.RollingSeriesType.Vol);
      //cmbRollType.Items.Add(ReturnsEval.RollingSeriesType.K);

      subscribeToEvents(true);

      // will invoke a rebind...
      cmbRollType.SelectedItem = cmbRollType.Items[0];
      //rebind();
    }
    public void Bind(ReturnsEval.CorrelationAnalyzer analyzer_, ReturnsEval.ConditionalCorrelationAnalyzer conditionalAnalyzer_)
    {
      if (analyzer_ == null)
      {
        ultraTabControl1.Tabs[0].Visible = false;
      }
      else
      {
        Bind(analyzer_);
      }

      if (conditionalAnalyzer_ == null)
      {
        ultraTabControl1.Tabs[1].Visible = false;
      }
      else
      {
        Bind(conditionalAnalyzer_);
      }
    }
    public void Create(ReturnsEval.DataSeriesEvaluator eval_)
    {
      addAreas();

      double[] worstInMonth = findWorstInMonth(eval_);

      for (int i = 0; i < eval_.Monthly.Dates.Length; ++i)
      {
        DateTime date = eval_.Monthly.Dates[i];
        double perf = eval_.Monthly.Data[i];
        double worst = worstInMonth[i];

        int area = date.Month - 1;

        dts[area].LoadDataRow(new object[] { date.ToString("yy"), perf, worst }, true);
      }
      setuptooltip();
      ultraChart.InvalidateLayers();
      SI.Controls.LookFeel.ProcessChart(this);
    }
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_)
    {
      ReturnsEval.DataSeriesEvaluator[] comps;
      ultraChart.DataSource = null;
      // 1 row per drawdown
      // each col is component part (e.g. ccy)

      int numRow = Math.Min(5, eval_.Daily.DrawDowns.Length);
      int colNum = eval_.InnerSeries.Count;

      comps = new ReturnsEval.DataSeriesEvaluator[colNum];
      for (int i = 0; i < comps.Length; ++i)
      {
        comps[i] = new ReturnsEval.DataSeriesEvaluator(
          eval_.InnerSeries[i].Daily.Dates,
          eval_.InnerSeries[i].Daily.Data,
          eval_.InnerSeries[i].Name,
          eval_.DataType);
      }

      // add the columns (one for each component part)
      for (int i = 0; i < colNum; ++i)
      {
        dt.Columns.Add(eval_.InnerSeries[i].Name, typeof(double));
      }

      for (int rowIndex = 0; rowIndex < numRow; ++rowIndex)
      {
        DataRow row = dt.NewRow();
        for (int colIndex = 0; colIndex < colNum; ++colIndex)
        {
          comps[colIndex].Evaluate(eval_.Daily.DrawDowns[rowIndex].StartDate, eval_.Daily.DrawDowns[rowIndex].LowDate);
          row[colIndex] = comps[colIndex].Daily.TotalReturn * 100;
        }
        dt.Rows.Add(row);
      }

      ultraChart.DataSource = dt;
      ultraChart.Data.DataBind();
    }
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_, int drawdownIndex_, bool isDrawdown_)
    {
      ReturnsEval.DataSeriesEvaluator[] comps;
      // each col is component part (e.g. ccy)
      ultraChart.DataSource = null;

      int colNum = eval_.InnerSeries.Count;

      comps = new ReturnsEval.DataSeriesEvaluator[colNum];
      for (int i = 0; i < comps.Length; ++i)
      {
        comps[i] = new ReturnsEval.DataSeriesEvaluator(
          eval_.InnerSeries[i].Daily.Dates,
          eval_.InnerSeries[i].Daily.Data,
          eval_.InnerSeries[i].Name,
          eval_.DataType);
      }

      // add the columns (one for each component part)
      for (int i = 0; i < colNum; ++i)
      {
        dt.Columns.Add(eval_.InnerSeries[i].Name, typeof(double));
      }

      ReturnsEval.DrawDown dd = (isDrawdown_) ? eval_.Daily.DrawDowns[drawdownIndex_] : eval_.Daily.DrawUps[drawdownIndex_];

      DataRow row = dt.NewRow();
      for (int colIndex = 0; colIndex < colNum; ++colIndex)
      {
        comps[colIndex].Evaluate(dd.StartDate, dd.LowDate);
        row[colIndex] = comps[colIndex].Daily.TotalReturn * 100;
      }
      dt.Rows.Add(row);
      ultraChart.DataSource = dt;
      ultraChart.Data.DataBind();
    }
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_, ReturnsEval.Period period_)
    {
      ReturnsEval.DataSeries[] series;
      DataRow row;
      ultraChart.DataSource = null;
      dt.Columns.Clear();
      dt.Rows.Clear();
      if (eval_ == null)
        return;

      // 1 row per period
      // each col is component part (e.g. ccy)

      if (eval_.InnerSeries.Count == 0)
        return;

      series = new ReturnsEval.DataSeries[eval_.InnerSeries.Count];
      for (int i = 0; i < series.Length; ++i)
      {
        series[i] = eval_.InnerSeries[i][period_];
        dt.Columns.Add(eval_.InnerSeries[i].Name.Replace("_GSLE_1",string.Empty), typeof(double));
      }

      row = dt.NewRow();
      for (int j = 0; j < series.Length; ++j)
      {
        row[j] = series[j].TotalReturn;
      }
      dt.Rows.Add(row);

      ultraChart.DataSource = dt;
      ultraChart.Data.DataBind();

      showChartSeparateControl1.Create(dt, GetType(),
        "Return attribution of " + eval_.Name);
    }
 public void AddEval(ReturnsEval.DataSeriesEvaluator eval_)
 {
   checkedListBox1.Items.Add(eval_, true);
 }
 public void Bind(ReturnsEval.RegressionsDataSeriesWrapper wrapper_)
 {
   SI.Controls.Util.ClearBindings(this);
   lblName.Bind(wrapper_, "Name", null);
   tbLags.Bind(wrapper_, "Lag", new Validators.IntValidator("###0"));
 }
    private void setup(ReturnsEval.DataSeriesEvaluator eval_)
    {
      if (doneSetup)
        return;
      doneSetup = true;

      setuptooltip();

      // add the columns

      dt.Columns.Add("Date", typeof(DateTime));
      dt.Columns.Add(eval_.Name, typeof(double));
      for (int i = 0; i < eval_.InnerSeries.Count; ++i)
        dt.Columns.Add(eval_.InnerSeries[i].Name, typeof(double));

      ChartLayerAppearance chart;
      NumericTimeSeries series;
      LineChartAppearance lcApp;

      // example of adding layer in code

      // add numeric series for top
      series = new NumericTimeSeries();
      series.Data.TimeValueColumn = "Date";
      series.Data.ValueColumn = eval_.Name;
      series.Key = eval_.Name;
      series.Label = eval_.Name;
      ultraChart.CompositeChart.Series.Add(series);

      // add a layer for the overall cumulative at the top
      chart = new ChartLayerAppearance();
      chart.ChartComponent = ultraChart;
      chart.ChartArea = ultraChart.CompositeChart.ChartAreas.FromKey("areaTop");
      chart.AxisX = chart.ChartArea.Axes.FromKey("areaTopX");
      chart.AxisY = chart.ChartArea.Axes.FromKey("areaTopY");
      chart.ChartType = ChartType.LineChart;
      lcApp = (LineChartAppearance)chart.ChartTypeAppearance;
      lcApp.Thickness = 1;
      lcApp.MidPointAnchors = false;
      
      chart.Key = string.Concat("chart_", eval_.Name);
      ultraChart.CompositeChart.ChartLayers.Add(chart);

      // link them all up
      chart.Series.Add(series);
      series.Data.DataSource = dt;
      chart.SeriesList = eval_.Name;
      series.DataBind();

      for (int i = 0; i < eval_.InnerSeries.Count; ++i)
      {

        series = new NumericTimeSeries();
        series.Data.TimeValueColumn = "Date";
        series.Data.ValueColumn = eval_.InnerSeries[i].Name;
        series.Key = eval_.InnerSeries[i].Name;
        series.Label = eval_.InnerSeries[i].Name;
        ultraChart.CompositeChart.Series.Add(series);

        chart = new ChartLayerAppearance();
        chart.ChartComponent = ultraChart;
        chart.ChartArea = ultraChart.CompositeChart.ChartAreas.FromKey("areaBottom");
        chart.AxisX = chart.ChartArea.Axes.FromKey("areaBottomX");
        chart.AxisY = chart.ChartArea.Axes.FromKey("areaBottomY");
        chart.ChartType = ChartType.LineChart;
        lcApp = (LineChartAppearance)chart.ChartTypeAppearance;
        lcApp.Thickness = 1;
        lcApp.MidPointAnchors = false;
        chart.Key = string.Concat("chart_", eval_.InnerSeries[i].Name);
        ultraChart.CompositeChart.ChartLayers.Add(chart);

        // link them all up
        chart.Series.Add(series);
        chart.SeriesList = eval_.InnerSeries[i].Name;
        series.Data.DataSource = dt;
        series.DataBind();

        if (i < COLOURS.Length)
          series.PEs.Add(new PaintElement(COLOURS[i]));

        ultraChart.CompositeChart.Legends[0].ChartLayers.Add(chart);
      }
    }
    public void Bind(ReturnsEval.DataSeriesEvaluator eval_)
    {
      // first thing to do is to build the datatable and put the data in it

      dt.Rows.Clear();

      setup(eval_);

      for (int i = 0; i < eval_.Daily.Data.Length; ++i)
      {
        DataRow row = dt.NewRow();

        row[0] = eval_.Daily.Dates[i];
        row[1] = eval_.Daily.CumulativeReturnSeries[i];

        for (int j = 0; j < eval_.InnerSeries.Count; ++j)
        {
          row[j + 2] = eval_.InnerSeries[j].Daily.CumulativeValueOnDate(eval_.Daily.Dates[i]);
        }
        dt.Rows.Add(row);
      }

      foreach (NumericTimeSeries nts in ultraChart.CompositeChart.Series)
        nts.DataBind();

      //FX.Controls.BoundInfraGrid grid = new FX.Controls.BoundInfraGrid();
      //grid.Bind(dt);
      //grid.ExportToExcel();

      ultraChart.InvalidateLayers();
    }
 public void Bind(ReturnsEval.DataSeriesEvaluator eval_, ReturnsEval.Period period_, string dateFormat_)
 {
   Bind(eval_, period_, dateFormat_, null);
 }
 public CorrelationAnalyzer(ReturnsEval.DataSeriesEvaluator eval1_, ReturnsEval.DataSeriesEvaluator eval2_)
   : this(new DatedDataCollectionGen<double>(eval1_.Daily.Dates,eval1_.Daily.Data),new DatedDataCollectionGen<double>(eval2_.Daily.Dates,eval2_.Daily.Data))
 {
 }
 public void Create(ReturnsEval.DataSeriesEvaluator eval_, ReturnsEval.Period period_)
 {
   Create(eval_, period_, null);
 }