示例#1
0
    public override void Create(ConstructGen<double> wts_, ConstructGen<double> c2v_, ConstructGen<double> perf_)
    {
      base.Create(wts_, c2v_, perf_);

      if(RegionBreakdown!=null && RegionBreakdown.Count>0)
        foreach (WtsAnalyzerFXGroup wa in RegionBreakdown)
          wa.Create(wts_, c2v_,perf_);

      NumRebals = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), ExtensionMethods.GenerateArrayAllOfValue<double>(1d, wts_.Dates.Count)), DataEncapsDispValueType.Sum, "NumRebals");
      Sharpe = (Statistics.Average(base.Return.Data.Data) * 252d) / (Statistics.Stdev(base.Return.Data.Data) * Math.Sqrt(252d));

      ConstructGen<double> ccyTCosts = getTCostForDates(wts_.Dates);
      double[] tCcosts = new double[wts_.Dates.Count];

      if (false)
      {
        int[] ndfIndincies =
          Singleton<FXIDs>.Instance.Where<Currency>(x => x.IsGroup(FXGroup.NDF))
            .Select<Currency, int>(x => x.ArrayIndex)
            .ToArray<int>();

        DatedDataCollectionGen<double> adjReturn = (DatedDataCollectionGen<double>) Return.Data.Clone();

        for (int i = 0; i < wts_.Dates.Count; ++i)
        {
          int indexOfReturn = adjReturn.IndexOf(wts_.Dates[i]);
          double dayAdj = 0d;

          double[] wtsToday = wts_.GetValues(wts_.Dates[i]);
          if (i == 0)
          {
            foreach (int ndfIndex in ndfIndincies)
              dayAdj += -Math.Abs(wtsToday[ndfIndex]*ccyTCosts.GetValue(wts_.Dates[i], ndfIndex));
          }
          else
          {
            double[] wtsYest = wts_.GetValues(wts_.Dates[i - 1]);

            foreach (int ndfIndex in ndfIndincies)
              dayAdj += -Math.Abs((wtsToday[ndfIndex] - wtsYest[ndfIndex])*ccyTCosts.GetValue(wts_.Dates[i], ndfIndex));
          }

          tCcosts[i] += dayAdj;

          if (indexOfReturn != -1)
            adjReturn.Data[indexOfReturn] += dayAdj;
        }
      }

      NDF_TCost = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray(), tCcosts), DataEncapsDispValueType.Sum, "NDF_TCosts");
      NetReturn = new DataEncapsValue(Return.Data,DataEncapsDispValueType.Sum, "AdjReturn");
    }
示例#2
0
    public virtual void Create(ConstructGen<double> wts_, ConstructGen<double> c2v_, ConstructGen<double> perf_)
    {
      double[] dollWts = new double[wts_.Dates.Count];
      double[] turnover = new double[wts_.Dates.Count];
      double[] flow = new double[wts_.Dates.Count];
      double[] leverage = new double[wts_.Dates.Count];

      for(int i=0;i<wts_.Dates.Count;++i)
      {
        double[] todayWts = wts_.GetValues(wts_.Dates[i]);
        dollWts[i]=Statistics.Sum(todayWts);
        leverage[i] = Statistics.SumAbs(todayWts);

        if(i==0)
        {
          turnover[i] = flow[i]=dollWts[i];
        }
        else
        {
          double[] prevWts = wts_.GetValues(wts_.Dates[i-1]);

          double t = 0d;
          double f = 0d;

          for (int j = 0; j < prevWts.Length; ++j)
          {
            if (todayWts[j] == prevWts[j] && todayWts[j] == 0d) continue;
            t += prevWts[j]==0d ? todayWts[j] : Math.Abs((todayWts[j] - prevWts[j]) / prevWts[j]);
            f += Math.Abs(todayWts[j] - prevWts[j]);
          }

          flow[i] = f;
          turnover[i] = t;
        }
      }

      SumWt = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), dollWts),"SumWt");
      Turnover = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), turnover),"Turnover");
      Flow = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), flow),"Flow");
      Leverage = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), leverage),"Leverage");
      //C2V = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), ExtensionMethods.GenerateArrayAllOfValue<double>(1d, wts_.Dates.Count)),"C2V");

      double[] perf = new double[perf_.Dates.Count];
      for (int i = 0; i < perf_.Dates.Count; ++i)
        perf[i] = Statistics.Sum(perf_.GetValues(perf_.Dates[i]));
      Return = new DataEncapsValue(new DatedDataCollectionGen<double>(perf_.Dates.ToArray<DateTime>(), perf),DataEncapsDispValueType.Sum,"Return");

    }
    public override void Create(ConstructGen<double> wts_, ConstructGen<double> c2v_, ConstructGen<double> perf_)
    {
      var indicies =
        Singleton<FXIDs>.Instance.Where<Currency>(x => x.IsGroup(FX_Group))
          .Select<Currency, int>(x => x.ArrayIndex)
          .ToArray();


      var wtsForGroup = wts_.GetColumnValues(indicies);
      var c2vForGroup = c2v_.GetColumnValues(indicies);
      var perfForGroup = perf_.GetColumnValues(indicies);

      base.Create(wtsForGroup, c2vForGroup, perf_);

      double[] ctvDaily = new double[c2vForGroup.Dates.Count];
      for (int i = 0; i < c2vForGroup.Dates.Count; ++i)
        ctvDaily[i] = Statistics.Sum(c2vForGroup.GetValues(c2vForGroup.Dates[i]));
      C2V = new DataEncapsValue(new DatedDataCollectionGen<double>(c2vForGroup.Dates.ToArray(), ctvDaily),"C2V");

      double[] perfDaily = new double[perfForGroup.Dates.Count];
      for (int i = 0; i < perfForGroup.Dates.Count; ++i)
        perfDaily[i] = Statistics.Sum(perfForGroup.GetValues(perfForGroup.Dates[i]));
      Return = new DataEncapsValue(new DatedDataCollectionGen<double>(perfForGroup.Dates.ToArray(), perfDaily), DataEncapsDispValueType.Sum, "Return");
    }