public WtsAnalysisCompareControl Display(string title_)
 {
   var ctrol = new WtsAnalysisCompareControl();
   ctrol.Create(this);
   ctrol.DisplayInShowForm(title_);
   return ctrol;
 }
      protected override void OnClick(EventArgs e)
      {
        BindingList<WtsSeriesAnalyzer.WtRestriction> list = new BindingList<WtsSeriesAnalyzer.WtRestriction>();
        Array.ForEach(m_analyzer.SourceWts.ColumnHeadings, delegate(string name_) { list.Add(new WtsSeriesAnalyzer.WtRestriction(name_)); });

        ShowForm sf = new ShowForm();
        ApplyWeightRestrictionsControl con = new ApplyWeightRestrictionsControl(list);
        sf.Create(con);

        DialogResult result = DialogResult.Cancel;
        try
        {
          result = sf.ShowDialog();
        }
        catch
        {
          result = DialogResult.Cancel;
        }

        if (result == DialogResult.Cancel)
          return;

        ConstructGen<double> processWeights = m_analyzer.WhatIfTradingRestrictions(list.ToArray());

        var res = SI.Data.ReturnsFromFXWeights.DoIt_DailyWeights(processWeights);

        GetCov covDel = date_ => Singleton<CovarianceSource>.Instance.GetCovarianceForDateElesePrevious(date_);

        WtsSeriesAnalyzer w = new WtsSeriesAnalyzer(
          name_: string.Format("{0}_restricted",m_analyzer.Name),
          wts_: processWeights,
          dailyReturns_: res.CombinedPnl,
          covDelegate_: covDel
        );

        WtsSeriesAnalyzer original = new WtsSeriesAnalyzer(
          m_analyzer.Name,
          m_analyzer.SourceWts,
          m_analyzer.Performance,
          covDel);

        List<WtsSeriesAnalyzer> ll = new List<WtsSeriesAnalyzer>();
        ll.Add(original);
        ll.Add(w);



        WtsAnalysisCompareControl comparer = new WtsAnalysisCompareControl();
        comparer.Create(ll);
        comparer.DisplayInShowForm(string.Format("{0} before and after restricted weights", m_analyzer.Name));

      }
    private void btnRunStratAgainstEnvironment_Click(object sender, EventArgs e)
    {
      var kvp = SI.Research.FXStrat.BacktestHelper.getWE(m_calc.Strat);
      var cum = new DatedDataCollectionGen<double>(kvp.Value.All.Dates, kvp.Value.All.CumulativeReturnSeries);
      var result = m_calc.Run_newPnl_changes(kvp);

      var newDaily = result.Item1;
      var multChanges = result.Item2;

      lineChartDataDisplayBottom.ClearSeries();

      lineChartDataDisplayBottom.AddSeries(cum, "Original", 40, "##0.0#%");
      lineChartDataDisplayBottom.AddSeries(newDaily.ToCumulative(), "New", 40, "##0.0#%");

      var newWts = m_calc.GiveMeProcessedWeights();


      var listOfControls = new List<KeyValuePair<string, Control>>();

      if (cbShowAfterTransformStats.Checked)
      {
        listOfControls.Add(new KeyValuePair<string, Control>(
          "New performance stats",
          new ReturnsEval.DataSeriesEvaluator(newDaily.Dates, newDaily.Data, "New", ReturnsEval.DataSeriesType.Returns)
            .GetReturnsDisplay()
          ));
      }

      if (cbShowBeforeEval.Checked)
      {
        listOfControls.Add(new KeyValuePair<string, Control>(
          "Original performance stats",
          kvp.Value.GetReturnsDisplay()
          ));
      }

      if (cbShowNewWeights.Checked)
      {
        listOfControls.Add(new KeyValuePair<string, Control>(
          "New weights",
          newWts.DisplayInGrid("New weights", false)
          ));
      }

      if (cbShowNewWeightsAnalysis.Checked)
      {
        var contr = new WtsAnalysisCompareControl();
        var listOfWts = new List<WtsSeriesAnalyzer>();

        //listOfWts.Add(new Strategy.WtsAnalysis.WtsSeriesAnalyzer("Original", kvp.Key,
        //  kvp.Value.GetInnerDailyAsConstruct(), x=>Singleton<CovarianceSource>.Instance.GetCovarianceForDateElesePrevious(x)));

        //listOfWts.Add(new Strategy.WtsAnalysis.WtsSeriesAnalyzer("New", newWts,
        //  ReturnsFromFXWeights.DoIt_DailyWeights(newWts).CombinedPnl,
        //  x => Singleton<CovarianceSource>.Instance.GetCovarianceForDateElesePrevious(x)));

        listOfWts.Add(new WtsSeriesAnalyzer("Original", kvp.Key,
  kvp.Value.GetInnerDailyAsConstruct(), null));

        listOfWts.Add(new WtsSeriesAnalyzer("New", newWts,
          ReturnsFromFXWeights.DoIt_DailyWeights(newWts).CombinedPnl, null));

        contr.Create(listOfWts);

        listOfControls.Add(new KeyValuePair<string, Control>("Weights analysis", contr));

        //var listOfEvals = new List<ReturnsEval.DataSeriesEvaluator>();

        //{
        //  var oldFlow = BacktestHelper.GetFlow(kvp.Key);
        //  var eval = new ReturnsEval.DataSeriesEvaluator("Original flow", ReturnsEval.DataSeriesType.Returns);
        //  eval.AddInnerSeries(oldFlow.Dates.ToArray(), oldFlow.ToArray(), oldFlow.ColumnHeadings);
        //  listOfEvals.Add(eval);
        //}

        //{
        //  var newFlow = BacktestHelper.GetFlow(newWts);
        //  var eval = new ReturnsEval.DataSeriesEvaluator("New flow", ReturnsEval.DataSeriesType.Returns);
        //  eval.AddInnerSeries(newFlow.Dates.ToArray(), newFlow.ToArray(), newFlow.ColumnHeadings);
        //  listOfEvals.Add(eval);
        //}
        //listOfControls.Add(new KeyValuePair<string, Control>(
        //  "Before/After Flow comparison",
        //  listOfEvals.GetComparerDisplay()
        //  ));
      }

      if (cbShowInComparer.Checked)
      {
        var listOfEvals = new List<ReturnsEval.DataSeriesEvaluator>();
        kvp.Value.Name = "Original";
        listOfEvals.Add(kvp.Value);
        listOfEvals.Add(new ReturnsEval.DataSeriesEvaluator(newDaily.Dates, newDaily.Data, "New",
          ReturnsEval.DataSeriesType.Returns));

        listOfControls.Add(new KeyValuePair<string, Control>(
          "Before/After Performance Comparison", 
          listOfEvals.GetComparerDisplay()
          ));
      }

      if (listOfControls.Count > 0)
        listOfControls.DisplayInShowForm("Results");

      //if ((ModifierKeys & Keys.Shift) != 0 && (ModifierKeys & Keys.Control) != 0)
      //{
      //  BacktestHelper.DisplayAvgFlow(kvp.Key, "Before - Average Flow");
      //  BacktestHelper.DisplayAvgFlow(m_calc.GiveMeProcessedWeights(), "After - Average Flow");
      //  return;
      //}

      //if ((ModifierKeys & Keys.Shift) != 0)
      //{
      //  kvp.Value.Display("Original");
      //  new ReturnsEval.DataSeriesEvaluator(newDaily.Dates, newDaily.Data, "New", ReturnsEval.DataSeriesType.Returns).Display("New");
      //  return;
      //}

      //if ((ModifierKeys & Keys.Control) != 0)
      //{
      //  var listOfEvals = new List<ReturnsEval.DataSeriesEvaluator>();
      //  kvp.Value.Name = "Original";
      //  listOfEvals.Add(kvp.Value);
      //  listOfEvals.Add(new ReturnsEval.DataSeriesEvaluator(newDaily.Dates, newDaily.Data, "New",
      //    ReturnsEval.DataSeriesType.Returns));

      //  listOfEvals.Display("Comparison");
      //  return;
      //}
    }