コード例 #1
0
    public static double[] GetFlyWeightings(BondAnalysisLine A_, BondAnalysisLine B_, BondAnalysisLine C_, FlyWeightingMethod method_ = FlyWeightingMethod.Standard, int history_ = 100)
    {
      switch (method_)
      {
        case FlyWeightingMethod.Standard:
        {
          return new[] {Bfly_Wing, Bfly_Belly, Bfly_Wing};
        }
        case FlyWeightingMethod.Value:
        {
          var Avals =
            A_.GetHistoricValuesForField(BondField.YieldLive)
              .GetEndValues(history_ + 1)
              .GetSubValues<double>(excludeFunction_: double.IsNaN);
          var Bvals =
            B_.GetHistoricValuesForField(BondField.YieldLive)
              .GetEndValues(history_ + 1)
              .GetSubValues(excludeFunction_: double.IsNaN);
          var Cvals =
            C_.GetHistoricValuesForField(BondField.YieldLive)
              .GetEndValues(history_ + 1)
              .GetSubValues(excludeFunction_: double.IsNaN);

          var CminusB = Cvals.Minus(Bvals).ToDifferences().Stdev();
          var BminusA = Bvals.Minus(Avals).ToDifferences().Stdev();

          var ratio = CminusB/BminusA;

          return new double[]
          {
            ratio/(ratio+1d),
            1d,
            1d/(ratio+1d)
          };
        }
        case FlyWeightingMethod.PCAyield:
        case FlyWeightingMethod.PCAasw:
        {
          var Avals =
            A_.GetHistoricValuesForField(method_==FlyWeightingMethod.PCAyield ? BondField.YieldLive : BondField.ASWLive)
              .GetEndValues(history_ + 1)
              .GetSubValues<double>(excludeFunction_: double.IsNaN);
          var Bvals =
            B_.GetHistoricValuesForField(method_ == FlyWeightingMethod.PCAyield ? BondField.YieldLive : BondField.ASWLive)
              .GetEndValues(history_ + 1)
              .GetSubValues(excludeFunction_: double.IsNaN);
          var Cvals =
            C_.GetHistoricValuesForField(method_ == FlyWeightingMethod.PCAyield ? BondField.YieldLive : BondField.ASWLive)
              .GetEndValues(history_ + 1)
              .GetSubValues(excludeFunction_: double.IsNaN);

          var inlineDates = new[] {Avals, Bvals, Cvals}.IntersectDatesKeepSeparate();

          var dblArr = new double[inlineDates[0].Length, 3];
          for(int i=0;i<inlineDates[0].Length;++i)
            for (int j = 0; j < 3; ++j)
              dblArr[i, j] = inlineDates[j].Data[i];

          var pcaWeights = Symmetry.Analytics.PCA.CalculateOptimalHedgeRatios(dblArr, false, 3,
            new double?[] {null, 1d, null});

          return pcaWeights;
        }
      }

      return null;
    }
コード例 #2
0
 public bool SetValuesForLineAndFocus(BondAnalysisLine line_, BondField field_)
 {
   m_allValues = line_.GetHistoricValuesForField(field_);
   m_seriesName= BondAnalysisLineHelper.FindColumnNameForField(field_);
   return reloadInstrumentHistory();
 }