/// <summary> /// Berechnet die ReturnRiskRatio und legt das Ergebnis in einem neuen Datencontainer ab. /// </summary> /// <param name="source">Datensatz, von dem die ReturnRiskRatio gebildet werden soll</param> /// <param name="nRange">Anzahl der einzubeziehenden Daten pro Berechnung</param> /// <returns>Neuer DatenContainer mit den Ergebnisdaten</returns> public static DataContainer CreateFrom(DataContainer source, int nRange) { //DataContainer sourceperf = RelativePerformance.CreateFrom(source); DataContainer sourcechange = RelativeChange.CreateFrom(source); DataContainer changemovavg = MovingAverage.CreateFrom(sourcechange, nRange); DataContainer volatility = Volatility.CreateFrom(sourcechange, nRange); DataContainer result = new DataContainer(); //WorkDate historydate = volatility.OldestDate.Clone() - (int)nRange; WorkDate workdate = volatility.OldestDate.Clone(); for (; workdate <= volatility.YoungestDate; workdate++ /*, historydate++*/) { double dReturn = changemovavg[workdate]; //sourceperf[workdate] - sourceperf[historydate]; double dRisk = volatility[workdate]; // Standardabweichung //result[workdate] = dReturn / (dRisk + 1.0); result[workdate] = dReturn - dRisk; } return(result); }
/// <summary> /// Berechnet Beta und legt das Ergebnis in einem neuen Datencontainer ab. /// </summary> /// <param name="source">Datensatz, von dem Beta gebildet werden soll</param> /// <param name="reference">Referenz, zu dem Beta gebildet werden soll</param> /// <param name="nRange">Anzahl der einzubeziehenden Daten pro Beta-Berechnung</param> /// <returns>Neuer DatenContainer mit den Ergebnisdaten</returns> public static DataContainer CreateFrom(DataContainer source, DataContainer reference, int nRange) { if (nRange < 1) { throw new ArgumentOutOfRangeException("Range", nRange, "Must be greater than zero."); } DataContainer covariance = CoVariance.CreateFrom(source, reference, nRange); DataContainer sigma = Volatility.CreateFrom(reference, nRange); DataContainer result = new DataContainer(); WorkDate workdate = covariance.OldestDate.Clone(); for (; workdate <= covariance.YoungestDate; workdate++) { double dSigma = sigma[workdate]; double dBeta = covariance[workdate] / (dSigma * dSigma); result[workdate] = dBeta; } return(result); }
/// <summary> /// Berechnet die Korrelation und legt das Ergebnis in einem neuen Datencontainer ab. /// </summary> /// <param name="a">Datensatz A, zwischen denen die Korrelation gebildet werden soll</param> /// <param name="b">Datensatz B, zwischen denen die Korrelation gebildet werden soll</param> /// <param name="nRange">Anzahl der einzubeziehenden Daten pro Korrelationsberechnung</param> /// <returns>Neuer DatenContainer mit den Ergebnisdaten</returns> public static DataContainer CreateFrom(DataContainer a, DataContainer b, int nRange) { if (nRange < 1) { throw new ArgumentOutOfRangeException("Range", nRange, "Must be greater than zero."); } DataContainer covariance = CoVariance.CreateFrom(a, b, nRange); DataContainer sigma_a = Volatility.CreateFrom(a, nRange); DataContainer sigma_b = Volatility.CreateFrom(b, nRange); DataContainer result = new DataContainer(); WorkDate workdate = covariance.OldestDate.Clone(); for (; workdate <= covariance.YoungestDate; workdate++) { double dCorrelation = covariance[workdate] / (sigma_a[workdate] * sigma_b[workdate]); result[workdate] = dCorrelation; } return(result); }