Expected Behavior
PortfolioStatistics exposes two additional risk-adjusted return statistics in the backtest/live report:
-
Adjusted Sharpe Ratio (ASR) — the Sharpe Ratio penalised for non-normality of the return distribution, per Pezier & White (2006):
ASR = SR * (1 + (S / 6) * SR - ((K - 3) / 24) * SR^2)
where S is the skewness and K the kurtosis of the return series. Negative skew and fat tails reduce the ratio, which is the point of the metric for mean-reversion and short-volatility strategies whose plain Sharpe flatters them.
-
Adjusted CAGR — a risk/quality-adjusted compounding annual return, alongside the existing raw CompoundingAnnualReturn. The exact definition is worth pinning down before implementation: candidates are CAGR scaled by a drawdown or volatility penalty, or CAGR restated on the skew/kurtosis-adjusted return distribution.
Actual Behavior
Neither exists. Common/Statistics/PortfolioStatistics.cs currently exposes SharpeRatio, ProbabilisticSharpeRatio, SortinoRatio, CompoundingAnnualReturn, InformationRatio, TreynorRatio, ValueAtRisk95/99, and friends — nothing skew/kurtosis-adjusted, and no adjusted variant of CAGR.
Potential Solution
The inputs for ASR are already computed in the codebase: Statistics.ProbabilisticSharpeRatio (Common/Statistics/Statistics.cs) calls listPerformance.Skewness() and listPerformance.Kurtosis() from MathNet, so ASR is a small addition on top of the existing ObservedSharpeRatio / annualised Sharpe plumbing rather than new machinery.
Points to settle:
- Whether ASR is built from the annualised
SharpeRatio or the non-annualised ObservedSharpeRatio.
- Whether the kurtosis term is excess or raw. The existing PSR code uses
(kurtosis - 1) against MathNet's Kurtosis(), which is worth confirming against the convention chosen for ASR so the two statistics agree on the same input.
- A concrete definition for "Adjusted CAGR", since the term is not standardised.
Reproducing the Problem
N/A — feature request.
System Information
N/A
Related
Requested by a long-time user who has been maintaining their own implementation (Intercom conversation 215476003778646).
Checklist
Expected Behavior
PortfolioStatisticsexposes two additional risk-adjusted return statistics in the backtest/live report:Adjusted Sharpe Ratio (ASR) — the Sharpe Ratio penalised for non-normality of the return distribution, per Pezier & White (2006):
ASR = SR * (1 + (S / 6) * SR - ((K - 3) / 24) * SR^2)where
Sis the skewness andKthe kurtosis of the return series. Negative skew and fat tails reduce the ratio, which is the point of the metric for mean-reversion and short-volatility strategies whose plain Sharpe flatters them.Adjusted CAGR — a risk/quality-adjusted compounding annual return, alongside the existing raw
CompoundingAnnualReturn. The exact definition is worth pinning down before implementation: candidates are CAGR scaled by a drawdown or volatility penalty, or CAGR restated on the skew/kurtosis-adjusted return distribution.Actual Behavior
Neither exists.
Common/Statistics/PortfolioStatistics.cscurrently exposesSharpeRatio,ProbabilisticSharpeRatio,SortinoRatio,CompoundingAnnualReturn,InformationRatio,TreynorRatio,ValueAtRisk95/99, and friends — nothing skew/kurtosis-adjusted, and no adjusted variant of CAGR.Potential Solution
The inputs for ASR are already computed in the codebase:
Statistics.ProbabilisticSharpeRatio(Common/Statistics/Statistics.cs) callslistPerformance.Skewness()andlistPerformance.Kurtosis()from MathNet, so ASR is a small addition on top of the existingObservedSharpeRatio/ annualised Sharpe plumbing rather than new machinery.Points to settle:
SharpeRatioor the non-annualisedObservedSharpeRatio.(kurtosis - 1)against MathNet'sKurtosis(), which is worth confirming against the convention chosen for ASR so the two statistics agree on the same input.Reproducing the Problem
N/A — feature request.
System Information
N/A
Related
SkewandKurtosisamong other statistics. Adjacent, but it does not cover a skew/kurtosis-adjusted Sharpe or an adjusted CAGR.Requested by a long-time user who has been maintaining their own implementation (Intercom conversation 215476003778646).
Checklist
masterbranch