/// <summary> /// /// </summary> /// <param name="portfolio"></param> /// <param name="riskFreeRate">Risk-free rate of return specified as a fractional value, e.g. 0.05 for 5%</param> /// <returns></returns> public static double SharpeRatio(ITimeSeries <double> portfolio, double riskFreeRate = 0) { // Check parameters if (riskFreeRate >= 1 || riskFreeRate < 0) { throw new ArgumentException("The risk-free rate should be a value between 0 and 1"); } return(Math.Round((portfolio.AnnualisedMean() - riskFreeRate) / portfolio.AnnualisedStdDev(), DecimalDigits)); }
/// <summary> /// Calculates the annualised return of the given time series /// </summary> /// <param name="timeseries">A time series of returns</param> /// <returns>Annualised return</returns> public static double AnnualisedReturn(ITimeSeries <double> timeseries) { return(Math.Round(timeseries.AnnualisedMean(), DecimalDigits)); }
/// <summary> /// Calculates the portfolio active premium, i.e. the difference between the annualised mean of the portfolio and the benchmark return /// </summary> /// <param name="portfolio">Portfolio time series</param> /// <param name="benchmark">Benchmark time series</param> /// <returns>Annualised active premium</returns> public static double ActivePremium(ITimeSeries <double> portfolio, ITimeSeries <double> benchmark) { return(Math.Round(portfolio.AnnualisedMean() - benchmark.AnnualisedMean(), DecimalDigits)); }