예제 #1
0
    private void btnCombinePnl_Click(object sender, EventArgs e)
    {
      var all = spreadWeightGeneratorCollectionGrid1.ListOfGenerators;

      if (all.Count() == 0) return;

      ConstructGen<double> con = new ConstructGen<double>(all.Count());
      con.ColumnHeadings = new string[con.ArrayLength];

      for (int i = 0; i < con.ArrayLength; ++i)
      {
        var item = all.ElementAt(i);
        con.ColumnHeadings[i] = item.ToString();
        con.SetColumnValues(i, item.GetSimplePnl());
      }

      if (con.NeedsToSortKeys())
        con.SortKeys();

      var eval = new ReturnsEval.DataSeriesEvaluator("Combined", ReturnsEval.DataSeriesType.Returns);
      eval.AddInnerSeries(con.Dates.ToArray(), con.ToArray(), con.ColumnHeadings);

      eval.Display("Combined");
    }
예제 #2
0
    protected override ReturnsEval.DataSeriesEvaluator doPnl(TraderArgs args_, ConstructGen<double> wts_)
    {
      var priceReturns =
        args_.AllProductPrices(fillInGapsWithPrevious_: true)
          .ToReturns(args_.Products.Select(x => x.Convention).ToArray());


      var stratReturns = new ConstructGen<double>(priceReturns.ColumnHeadings);

      double[] appliedWeights = null;

      for (int i = 0; i < priceReturns.Dates.Count; ++i)
      {
        var date = priceReturns.Dates[i];

        var priceReturnsArr = priceReturns.GetValues(date);

        if (appliedWeights != null)
        {
          for (int j = 0; j < priceReturnsArr.Length; ++j)
            stratReturns.SetValue(date, j, appliedWeights[j]*priceReturnsArr[j]);
        }

        if (wts_.Dates.Contains(date))
        {
          appliedWeights = wts_.GetValues(date);
        }
      }

      var eval = new ReturnsEval.DataSeriesEvaluator("Gen pnl from weights", ReturnsEval.DataSeriesType.Returns);
      eval.AddInnerSeries(stratReturns.Dates.ToArray(), stratReturns.ToArray(), stratReturns.ColumnHeadings);

      return eval;
    }
예제 #3
0
    public void ShowPortfolioPnlProgression()
    {
      var pnl = new ConstructGen<double>(Positions.Select(x=>x.Security).ToArray());

      var flp = new System.Windows.Forms.FlowLayoutPanel();

      var listOfInfraBoxes = new List<Infragistics.Win.Misc.UltraGroupBox>();

      for (int i = 0; i < pnl.ArrayLength; ++i)
      {
        var posPnl = Positions[i].GeneratePnlSinceFix();

        for (int d = 0; d < posPnl.Length; ++d)
        {
          pnl.SetValue(posPnl.Dates[d], i, posPnl.Data[d].Close);
        }

        {
          Infragistics.Win.Misc.UltraGroupBox box = new Infragistics.Win.Misc.UltraGroupBox();
          box.Text = string.Format("{0} {1}", Positions[i].Security, Positions[i].Pnl.ToString("###0.0#;(###0.0#);-"));
          box.Tag = Positions[i].Pnl;
          box.Size = new System.Drawing.Size(250, 250);

          var chart = new SI.Controls.BarDataPointChart();
          chart.SetYAxisFormat("##0.0#");
          chart.Dock = System.Windows.Forms.DockStyle.Fill;
          chart.Create(posPnl);
          box.Controls.Add(chart);
          listOfInfraBoxes.Add(box);
        }
      }

      Infragistics.Win.Misc.UltraGroupBox[] boxArr = listOfInfraBoxes.OrderByDescending(x => (double)x.Tag).ToArray();

      {
        double max = 0d;
        foreach (Infragistics.Win.Misc.UltraGroupBox box in boxArr)
        {
          max = Math.Max(max, ((SI.Controls.BarDataPointChart)box.Controls[0]).YAxisAbsoluteMax);
        }

        foreach (Infragistics.Win.Misc.UltraGroupBox box in boxArr)
        {
          ((SI.Controls.BarDataPointChart)box.Controls[0]).SetMaxMinYAxisRange(max);
        }
      }

      foreach (Infragistics.Win.Misc.UltraGroupBox box in boxArr)
      {
        flp.Controls.Add(box);
      }


      pnl.SortKeys();

      for (int i = 0; i < pnl.ArrayLength; ++i)
      {
        DatedDataCollectionGen<double> col = pnl.GetColumnValuesAsDDC(i);
        double last = col.Data[0];

        for (int j = 1; j < col.Length; ++j)
        {
          double val = col.Data[j];

          if (val == 0d)
          {
            if (last != 0d)
            {
              pnl.SetValue(col.Dates[j], i, last);
            }
          }
          else
            last = val;
        }
      }

      DatedDataCollectionGen<double> total = pnl.SumRows();

      KeyValuePair<string, System.Windows.Forms.Control>[] cons = new KeyValuePair<string, System.Windows.Forms.Control>[3];

      var stack = new Controls.SimpleStackedColumnChart();

      stack.Create<string, string>(
        pnl.Dates.Select(x => x.ToString("HH:mm")).ToArray(),
        Positions.Select(x => x.Security).ToArray(),
        pnl.ToArray());
      cons[0] = new KeyValuePair<string, System.Windows.Forms.Control>("position attributed", stack);


      //stack.DisplayInShowForm(string.Format("{0} pnl progression, position attributed", this.Name));

      var lcdd = new SI.Controls.LineChartDataDisplay();
      lcdd.AddSeries(total.Dates, total.Data, Name, 40, "#0.0#");
      lcdd.SetXAxisFormat("HH:mm");
      //lcdd.DisplayInShowForm(string.Format("{0} total pnl progression", m_p.DisplayName));
      cons[1] = new KeyValuePair<string, Control>("total", lcdd);

      cons[2] = new KeyValuePair<string, Control>("comp", flp);

      cons.DisplayInShowForm(string.Format("{0} pnl progression", Name));

    }
    public static void Test()
    {
      const int lookback = 5;
      const WeightGeneratorType genType = WeightGeneratorType.LongestZScoreOverThreshold;

      SpreadWeightGenerator[] arr = new[]
      {
        new SpreadWeightGenerator(
          new WeightGeneratorArgs()
          {
            Lookback = lookback,
            WeightGenerationType = genType,
            MinWindowLength = 50,
            ZScoreThreshold = 1.3d
          },
          new SpreadDefinition(
            new MonthYearOffset(ComIDs.Sugar, 0, MonthCode.V),
            new MonthYearOffset(ComIDs.Sugar, 1, MonthCode.K),
            false)),
        //new SpreadWeightGenerator(
        //  new WeightGeneratorArgs()
        //  {
        //    Lookback = lookback,
        //    WeightGenerationType = genType,
        //    MinWindowLength = 40,
        //    ZScoreThreshold = 1d
        //  },
        //  new SpreadDefinition(
        //    new MonthYearOffset(ComIDs.Sugar, 0, MonthCode.V),
        //    new MonthYearOffset(ComIDs.Sugar, 1, MonthCode.K),
        //    false)),
        //new SpreadWeightGenerator(
        //  new WeightGeneratorArgs()
        //  {
        //    Lookback = lookback,
        //    WeightGenerationType = genType,
        //    MinWindowLength = 40,
        //    ZScoreThreshold = 1.5d
        //  },
        //  new SpreadDefinition(
        //    new MonthYearOffset(ComIDs.NatGas, 0, MonthCode.H),
        //    new MonthYearOffset(ComIDs.NatGas, 0, MonthCode.X),
        //    false)),
        new SpreadWeightGenerator(
          new WeightGeneratorArgs()
          {
            Lookback = lookback,
            WeightGenerationType = genType,
            MinWindowLength = 60,
            ZScoreThreshold = 1.2d
          },
          new SpreadDefinition(
            new MonthYearOffset(ComIDs.NymexGas, 0, MonthCode.H),
            new MonthYearOffset(ComIDs.NymexGas, 0, MonthCode.X),
            false)),
        //new SpreadWeightGenerator(
        //  new WeightGeneratorArgs()
        //  {
        //    Lookback = lookback,
        //    WeightGenerationType = genType,
        //    MinWindowLength = 90,
        //    ZScoreThreshold = 1.7d
        //  },
        //  new SpreadDefinition(
        //    new MonthYearOffset(ComIDs.NatGas, 0, MonthCode.H),
        //    new MonthYearOffset(ComIDs.NatGas, 0, MonthCode.X),
        //    false)),
        //new SpreadWeightGenerator(
        //  new WeightGeneratorArgs()
        //  {
        //    Lookback = lookback,
        //    WeightGenerationType = genType,
        //    MinWindowLength = 40,
        //    ZScoreThreshold = 1.6d
        //  },
        //  new SpreadDefinition(
        //    new MonthYearOffset(ComIDs.Corn, 0, MonthCode.U),
        //    new MonthYearOffset(ComIDs.Corn, 0, MonthCode.Z),
        //    false)),
        new SpreadWeightGenerator(
          new WeightGeneratorArgs()
          {
            Lookback = lookback,
            WeightGenerationType = genType,
            MinWindowLength = 60,
            ZScoreThreshold = 1.3d
          },
          new SpreadDefinition(
            new MonthYearOffset(ComIDs.Corn, 0, MonthCode.U),
            new MonthYearOffset(ComIDs.Corn, 0, MonthCode.Z),
            false)),
        //new SpreadWeightGenerator(
        //  new WeightGeneratorArgs()
        //  {
        //    Lookback = lookback,
        //    WeightGenerationType = genType,
        //    MinWindowLength = 90,
        //    ZScoreThreshold = 0.8d
        //  },
        //  new SpreadDefinition(
        //    new MonthYearOffset(ComIDs.Corn, 0, MonthCode.U),
        //    new MonthYearOffset(ComIDs.Corn, 0, MonthCode.Z),
        //    false)),
        new SpreadWeightGenerator(
          new WeightGeneratorArgs()
          {
            Lookback = lookback,
            WeightGenerationType = genType,
            MinWindowLength = 40,
            ZScoreThreshold = 1.5d
          },
          new SpreadDefinition(
            new MonthYearOffset(ComIDs.Wheat, 0, MonthCode.U),
            new MonthYearOffset(ComIDs.Wheat, 0, MonthCode.Z),
            false)),
        //new SpreadWeightGenerator(
        //  new WeightGeneratorArgs()
        //  {
        //    Lookback = lookback,
        //    WeightGenerationType = genType,
        //    MinWindowLength = 50,
        //    ZScoreThreshold = 1.3d
        //  },
        //  new SpreadDefinition(
        //    new MonthYearOffset(ComIDs.Wheat, 0, MonthCode.U),
        //    new MonthYearOffset(ComIDs.Wheat, 0, MonthCode.Z),
        //    false)),
        //new SpreadWeightGenerator(
        //  new WeightGeneratorArgs()
        //  {
        //    Lookback = lookback,
        //    WeightGenerationType = genType,
        //    MinWindowLength = 70,
        //    ZScoreThreshold = 1.1d
        //  },
        //  new SpreadDefinition(
        //    new MonthYearOffset(ComIDs.Wheat, 0, MonthCode.U),
        //    new MonthYearOffset(ComIDs.Wheat, 0, MonthCode.Z),
        //    false)),
        new SpreadWeightGenerator(
          new WeightGeneratorArgs()
          {
            Lookback = lookback,
            WeightGenerationType = genType,
            MinWindowLength = 50,
            ZScoreThreshold = 1.6d
          },
          new SpreadDefinition(
            new MonthYearOffset(ComIDs.RBOB, 0, MonthCode.J),
            new MonthYearOffset(ComIDs.RBOB, 0, MonthCode.U),
            false)),
      };

      var comb = new SpreadWeightGeneratorCombiner(arr) {NumDaysForCovariance = 42, TargetVol = 0.06};
      comb.Go();

      {
        var combinedPnl = new ConstructGen<double>(arr.Length);

        combinedPnl.ColumnHeadings =
          arr.Select(x => string.Format("{0} / {1} / {2}", x.Spread, x.Args.MinWindowLength, x.Args.ZScoreThreshold))
            .ToArray();

        for (int i = 0; i < arr.Length; ++i)
          combinedPnl.SetColumnValues(i, arr[i].GetCombinedPnl());

        if (combinedPnl.NeedsToSortKeys())
          combinedPnl.SortKeys();


        var eval = new ReturnsEval.DataSeriesEvaluator("Combined", ReturnsEval.DataSeriesType.Returns);
        eval.AddInnerSeries(combinedPnl.Dates.ToArray(), combinedPnl.ToArray(), combinedPnl.ColumnHeadings);
        eval.Display("Combined");

        combinedPnl.SumRows().ToCumulative().DisplayLineChart("combined pnl of scaled weights");
      }

    }
예제 #5
0
    public static void EquityCTAEnviron()
    {
      //var copperIndex = Singleton<ComIDs>.Instance.First(x => x.Name.Equals("Copper")).ArrayIndex;

      //var index =
      //  Singleton<ComIndexPrices>.Instance.GetData(DataConstants.DATA_START, DateTime.Today)
      //    .GetColumnValuesAsDDC(copperIndex);

      //var index = EquityIndexOfSorts();

      //var countries = new[] { "Germany", "US" };
      //var instruments =
      //  Singleton<DBFut_Chains>.Instance.Where(
      //    x => x.AssetClass.Equals("Fixed Income") && countries.Any(y => y.Equals(x.Country))).ToArray();

      var instruments=
        Singleton<DBFut_Chains>.Instance.Where(
          x => x.AssetClass.Equals("Equities")).ToArray();

      foreach (var v in instruments)
      {
        var px = Singleton<DBFut_ChainGenericCache>.Instance.GetGenericSeries(v);
        showCombinedStdevFromMean(px, v.BbgTicker, new[] {21, 42, 63, 89, 100, 126, 150, 189, 252, 512});
      }
      return;

      //var instruments = Singleton<DBFut_Chains>.Instance.Where(x => x.AssetClass.Equals("Equities")).ToArray();

      var con = new ConstructGen<double>(instruments.Select(x => x.BbgTicker).ToArray());

      for(int i=0;i<instruments.Length;++i)
      {
        var index = Singleton<DBFut_ChainGenericCache>.Instance.GetGenericSeries(instruments[i]);
        if (index == null || index.Length == 0) continue;

        var prop = getMADiffPercentiles(index, new PercDiffArgs[]
      {
        //new PercDiffArgs() {MA1 = 21, MA2 = 42, PercWindow = 126},
        //new PercDiffArgs() {MA1 = 21, MA2 = 63, PercWindow = 126},
        //new PercDiffArgs() {MA1 = 21, MA2 = 89, PercWindow = 126},
        new PercDiffArgs() {MA1 = 42, MA2 = 89, PercWindow = 126},
        new PercDiffArgs() {MA1 = 42, MA2 = 126, PercWindow = 126},
        new PercDiffArgs() {MA1 = 63, MA2 = 126, PercWindow = 126},
        new PercDiffArgs() {MA1 = 89, MA2 = 180, PercWindow = 126},
        new PercDiffArgs() {MA1 = 89, MA2 = 252, PercWindow = 126},
        new PercDiffArgs() {MA1 = 126, MA2 = 252, PercWindow = 126},

        //new PercDiffArgs() {MA1 = 21, MA2 = 42, PercWindow = 252},
        //new PercDiffArgs() {MA1 = 21, MA2 = 63, PercWindow = 252},
        //new PercDiffArgs() {MA1 = 21, MA2 = 89, PercWindow = 252},
        new PercDiffArgs() {MA1 = 42, MA2 = 89, PercWindow = 252},
        new PercDiffArgs() {MA1 = 42, MA2 = 126, PercWindow = 252},
        new PercDiffArgs() {MA1 = 63, MA2 = 126, PercWindow = 252},
        new PercDiffArgs() {MA1 = 89, MA2 = 180, PercWindow = 252},
        new PercDiffArgs() {MA1 = 89, MA2 = 252, PercWindow = 252},
        new PercDiffArgs() {MA1 = 126, MA2 = 252, PercWindow = 252},

        new PercDiffArgs() {MA1 = 42, MA2 = 89, PercWindow = 504},
        new PercDiffArgs() {MA1 = 42, MA2 = 126, PercWindow = 504},
        new PercDiffArgs() {MA1 = 63, MA2 = 126, PercWindow = 504},
        new PercDiffArgs() {MA1 = 89, MA2 = 180, PercWindow = 504},
        new PercDiffArgs() {MA1 = 89, MA2 = 252, PercWindow = 504},
        new PercDiffArgs() {MA1 = 126, MA2 = 252, PercWindow = 504},
      });

        //var c = new SI.Controls.LineChartDataDisplay();

        //c.AddSeries(index, "index", 40, "##0.0#");
        //c.AddSeries(dates_: prop.Dates,
        //  values_: prop.Data,
        //  desc_: "prop",
        //  yAxisExtent_: 40,
        //  yLabelFormat_: "##0.0#",
        //  color_: System.Drawing.Color.Orange,
        //  yAxisLeft_: false);

        //c.DisplayInShowForm("blah");

        con.SetColumnValues(i, index.ToReturns().MultiplyBy(prop));
      }
      con.SortKeys();

      var eval = new ReturnsEval.DataSeriesEvaluator("combined", DataSeriesType.Returns);
      eval.AddInnerSeries(con.Dates.ToArray(), con.ToArray(), con.ColumnHeadings);
      eval.Display();

    }