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; }
public bool SetValuesForLineAndFocus(BondAnalysisLine line_, BondField field_) { m_allValues = line_.GetHistoricValuesForField(field_); m_seriesName= BondAnalysisLineHelper.FindColumnNameForField(field_); return reloadInstrumentHistory(); }