Skip to main content
aifinhub

Worked example

Running the shipped risk-adjusted-returns engine on the input below produces exactly this output. Continuous integration recomputes it against the engine bundle on every build, so these numbers cannot drift from the code.

Input

{
  "tool": "risk-adjusted-returns",
  "risk_free_annual": 0,
  "returns": [
    0.01,
    0.02,
    -0.005,
    0.015,
    -0.01
  ],
  "benchmark": [
    0.01,
    0.02,
    -0.005,
    0.015,
    -0.01
  ]
}

Output

{
  "count": 5,
  "meanDaily": 0.005999999999999998,
  "stdevDaily": 0.012942179105544785,
  "downsideStdev": 0.005,
  "skewness": -0.17436912281206235,
  "excessKurtosis": -2.106010247271107,
  "sharpeAnn": 7.359428920089569,
  "sortinoAnn": 19.049409439665048,
  "omega": 3,
  "maxDrawdown": 0.01000000000000012,
  "calmar": 351.53471079085546,
  "annReturn": 3.515347107908597,
  "annVol": 0.2054507240191672,
  "trackingError": 0,
  "informationRatio": 0,
  "beta": 1,
  "alphaAnn": 0
}

Frequently asked questions

What does the Risk-Adjusted Returns methodology page document?
Formulas, assumptions, annualization conventions, and limitations for the Risk-Adjusted Returns Calculator. Source citations, assumption deltas, and as-of It states the formulas, assumptions, data sources, limitations, and reproducibility steps behind the Risk-Adjusted Returns, in the Finance category.
When was the Risk-Adjusted Returns methodology last reviewed?
This methodology was last reviewed on 2026-04-20. The matching tool is at https://aifinhub.io/risk-adjusted-returns/.
Are the Risk-Adjusted Returns numbers reproducible?
Yes. This page embeds a worked example whose output is the verbatim result of running the shipped risk-adjusted-returns engine on a fixed input; the embedded JSON is recomputed and diffed against the engine in CI, so the numbers cannot drift from the code.

Methodology · Calculator · Last updated 2026-04-20

How Risk-Adjusted Returns works

How the Risk-Adjusted Returns Calculator tool actually works — assumptions, algorithms, limitations.

Scope

Reports standard risk-adjusted performance metrics on a daily simple-returns series, optionally with a benchmark column. Annualized via √252 trading days.

Input format

date,strategy,benchmark
2024-01-02,0.0012,0.0008
2024-01-03,-0.0005,-0.0002
...

The benchmark column is optional. If present it enables beta / alpha / tracking error / information ratio.

Formulas

Sharpe (annualized): (mean(excess) / stdev(excess)) × √252 where excess = r - rf_daily.

Sortino (annualized): (mean(excess) / downside_stdev) × √252. Downside stdev uses only negative excess returns: √(Σ min(0, r-rf)² / N).

Omega: Σ max(0, r_excess) / Σ max(0, -r_excess). Threshold = 0 (above rf). Returns positive infinity if there are no negative excess returns.

Calmar: ann_return / max_drawdown. Max drawdown computed on cumulative wealth starting at 1.

Beta: cov(r, b) / var(b).

Alpha (CAPM, annualized): R_p - R_f - β · (R_b - R_f) where R_p and R_b are the annualized returns of strategy and benchmark, R_f is the annualized risk-free rate.

Tracking error (annualized): stdev(r - b) × √252.

Information ratio: (mean(r - b) × √252) / tracking_error.

Skewness: standardized third moment.

Excess kurtosis: standardized fourth moment − 3.

Assumptions + limitations

  1. Daily frequency. Annualization constant 252 assumes daily bars on a trading calendar. For weekly/monthly data, adjust externally.
  2. Simple returns. Not log returns. For strategies reported in log returns, convert before upload.
  3. Independent observations. Serial correlation inflates the apparent Sharpe. For strategies with material autocorrelation, expect the annualized number to overstate live realisation by 10–30%.
  4. Normal-ish tails assumed for some intuitions. Skew + kurtosis flag deviation; Sharpe itself does not penalize non-normality. Use Sortino + Calmar + kurtosis together.
  5. Risk-free rate is a constant annual percentage; de-annualized to daily for the subtraction. A time-varying rf requires preprocessing.
  6. Benchmark alignment. The strategy and benchmark columns are expected to share the same dates. Missing or mis-aligned rows produce biased beta.
  7. Sample size. Minimum 20 observations enforced. Stable estimates typically require 2+ years of daily data.

References

  • Sharpe, W. F. (1966). "Mutual Fund Performance." Journal of Business 39(1).
  • Sortino, F. A., & van der Meer, R. (1991). "Downside Risk." Journal of Portfolio Management 17(4).
  • Young, T. W. (1991). "Calmar Ratio: A Smoother Tool." Futures (magazine).
  • Keating, C., & Shadwick, W. F. (2002). "A Universal Performance Measure." Journal of Performance Measurement 6(3).
  • Bailey, D. H., & Lopez de Prado, M. (2014). "The Deflated Sharpe Ratio." Journal of Portfolio Management 40(5).

Connects to

External resources

Changelog

  • 2026-04-20 — Initial release.
Planning estimates only — not financial, tax, or investment advice.