public static double GetSharpeRatio(IEnumerable <double> data) { double result = double.NaN; if (data.Any()) { var returns = data.Take(data.Count() - 1).Zip(data.Skip(1), (oldValue, newValue) => (newValue - oldValue) / oldValue * 100); if (returns.Any()) { var returnsStd = StdCalculator.GetStd(returns, true); result = returns.Average() / returnsStd; } } return(result); }
public static double GetSortinoRatio(IEnumerable <double> data) { double result = double.NaN; if (data.Any()) { var returns = data.Take(data.Count() - 1).Zip(data.Skip(1), (oldValue, newValue) => (newValue - oldValue) / oldValue * 100); var negativeReturns = returns.Where(iReturn => iReturn < 0); if (negativeReturns.Any()) { var negativeReturnsStd = StdCalculator.GetStd(negativeReturns, true); result = returns.Average() / negativeReturnsStd; } } return(result); }