public static void Go()
    {
      {
        var dailyData = BbgTalk.HistoryRequester.GetHistory(DataRetriever._dataStart, "ES1 Index", "PX_LAST", true);

        var dailyChart = dailyData.DisplayLineChart("Daily ES");

        var firstWindow = 50;

        //dailyChart.AddSeries(HelperMethods.GetRollingStat(dailyData, 21, (x) => HelperMethods.GetK(x)), "K21", 80, "##0.0#");

        //var boll = HelperMethods.CalculateBollingerBands(dailyData, 21, 1.5d);

        //for (int i = 0; i < boll.ArrayLength; ++i)
        //{
        //  dailyChart.AddSeries(boll.GetColumnValuesAsDDC(i), boll.ColumnHeadings[i], 40, "##0.0");
        //}

        dailyChart.AddSeries(HelperMethods.GetRollingStat(dailyData, firstWindow, x => x.Average()), "ma1", 40, "##0.0");
        dailyChart.AddSeries(HelperMethods.GetRollingStat(dailyData, firstWindow*2, x => x.Average()), "ma2", 40, "##0.0");
        dailyChart.AddSeries(HelperMethods.GetRollingStat(dailyData, firstWindow*4, x => x.Average()), "ma3", 40, "##0.0");

        dailyChart.AddSeries(HelperMethods.GetRollingStat(dailyData.ToReturns(),42,x=>Statistics.Stdev(x)*Math.Sqrt(252d)), "vol", 80, "##0.0%");

        var ma3Args = new SI.Research.Technicals.MA3ComplexArgs()
        {
          MA1Win = firstWindow,
          MA2Win = firstWindow*2,
          MA3Win = firstWindow*4
        };

        var signal = new SI.Research.Technicals.MA3ComplexIndicator(ma3Args).GenerateWeightSeries(dailyData,null);
        signal = CollapseToChanges(signal);
        signal.DisplayInGrid("signals");

        var pnl = GeneratePnl(dailyData, signal);

        pnl.ToCumulative().DisplayLineChart("daily ma3 trend");
      }
    }
    public static void Go_ES_NthContract(int contractIndex_ = 1)
    {
      var data = DataRetriever.GetData("ES", "Index", contractIndex_);

      var args = new SI.Research.Technicals.MA3ComplexArgs()
      {
        MA1Win = 10,
        MA2Win = 20,
        MA3Win = 40,
        Long = -1d,
        Long_1MA = -0.5d,
        Long_2MA = 0.5d,
        Short = 1d,
        Short_1MA = 0.5d,
        Short_2MA = -0.5d
      };

      var indic = new SI.Research.Technicals.MA3ComplexIndicator(args);

      var signals = indic.GenerateWeightSeries(data, null);

      signals = CollapseToChanges(signals);

      {
        var con = new ConstructGen<double>(new[] { "Signal", "CleanPrice" });
        con.SetColumnValues(0, signals);

        foreach (var date in con.Dates)
          con.SetValue(date, 1, data.ValueOnExactDate(date));

        //con.DisplayInGrid("changes with price levels");
      }

      //signals.DisplayInGrid("changes");


      var pnl = GeneratePnl(data, signals);

      var chart = pnl.ToCumulative().DisplayLineChart("ES");
      chart.AddSeries(data, "FuturePrice", 80, "#,##0.0");

      //var percentilRankedVol = HelperMethods.GetRollingStat(data, 48, (x) => Statistics.Stdev(x)).ToPercentileRanked(252);

      //for (int i = 0; i < percentilRankedVol.Length; ++i)
      //  percentilRankedVol.Data[i] = percentilRankedVol.Data[i] < 0.5 ? 0d : 1d;

      //chart.AddSeries(percentilRankedVol, "Rolling vol", 120, "#,##0.0%");

    }
    public static void Go_multiMA3Complex_MR(string futureStart_, string suffix_, int contractIndex_)
    {
      //var data = DataRetriever.GetData("ES", "Index", contractIndex_);
      var data = DataRetriever.GetData(futureStart_, suffix_, contractIndex_);
      DataRetriever.ChartData(futureStart_, suffix_, contractIndex_);

      //data = Singleton<SI.Data.FXSpots>.Instance.GetData(new DateTime(2003, 1, 1), DateTime.Today).GetColumnValuesAsDDC(SI.Data.Currency.TWD.ArrayIndex);
      //data = BbgTalk.HistoryRequester.GetHistory(new DateTime(2009, 1, 1), "ES1 Index", "PX_LAST", true);

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

      var mas = new int[] {5, 10, 15, 20, 25, 30, 35, 40, 45, 50};

      mas = new int[] {15};

      foreach (var firstWindow in mas )
      {
        var args = new SI.Research.Technicals.MA3ComplexArgs()
        {
          MA1Win = firstWindow,
          MA2Win = firstWindow*2,
          MA3Win = firstWindow*4,
          Long = -1d,
          Long_1MA = -0.5d,
          Long_2MA = 0.5d,
          Short = 1d,
          Short_1MA = 0.5d,
          Short_2MA = -0.5d
        };

        var indic = new SI.Research.Technicals.MA3ComplexIndicator(args);

        var signals = indic.GenerateWeightSeries(data, null);

        signals = CollapseToChanges(signals);

        if (true)
        {
          var con = new ConstructGen<double>(new[] { "Signal", "CleanPrice" });
          con.SetColumnValues(0, signals);

          foreach (var date in con.Dates)
            con.SetValue(date, 1, data.ValueOnExactDate(date));

          con.DisplayInGrid("changes with price levels");
        }

        //signals.DisplayInGrid("changes");


        var pnl = GeneratePnl(data, signals);

        var eval = new ReturnsEval.DataSeriesEvaluator(pnl.Dates, pnl.Data, string.Format("{2}_{0}_{1}", contractIndex_, args.ToString(),futureStart_), ReturnsEval.DataSeriesType.Returns);
        listOfEvals.Add(eval);
        //eval.Display(eval.Name);

        //pnl.ToCumulative().DisplayLineChart("ES");
      }
      listOfEvals.Display("blah");
    }