Lab

Lab · surajustement de backtest

Calculateur de Deflated Sharpe Ratio

Quelle est la probabilité que le ratio de Sharpe d'un backtest soit réel, une fois comptées les configurations essayées pour le trouver ? Un paquet Python et une CLI sans dépendances, vérifiés contre chaque exemple des articles sources.

Un backtest arrive sous la forme d'un ratio de Sharpe, d'une longueur d'échantillon et de peu d'autre chose. Le dégonfler pose une question différente : à quelle fréquence une recherche de cette taille produirait-elle un nombre aussi bon sans aucune compétence derrière. Remplissez le backtest ci-dessous et chaque quantité se met à jour à la frappe.

Deflated Sharpe Ratio calculator

examples
Return frequency
1,250 observations

Length bounds

minimum track record to beat zero0.67 y
minimum backtest length for 100 trials1.02 y

The second is the data needed before a search that size stops producing 2.50 by chance.

Bailey and López de Prado (2014): a treasury seasonality backtest, best of 100 configurations. Published answer: SR₀ 0.1132 per day and DSR 0.9004, short of the 95% bar.

Deflated Sharpe Ratio

0.9004

below the 95% bar

Undeflated PSR

1.0000

probability the true Sharpe ratio beats zero, before the search is counted

Selection threshold SR₀

1.79

annualised, against 2.50 observed

Trials this result survives

46

at 95% confidence

Track record needed to pass

8.21 y

holding the trial count at 100

Sharpe ratio needed to pass

2.71

annualised, same sample and trials

0.000.250.500.751.0095% bar1101001,00010,000100,000distinct trials, log scale

Reproduce this result in the package

both snippets track the inputs above

Command line
dsr deflate --sharpe 2.5000 --annual --periods-per-year 250 --n-obs 1250 --trials 100 --trial-variance 0.5000 --skew -3.0000 --kurtosis 10.0000
Python
from deflated_sharpe import deflated_sharpe_ratio

result = deflated_sharpe_ratio(
    sharpe=0.15811388,   # per period
    n_obs=1250,
    n_trials=100,
    var_trials=0.0020000000,
    skew=-3.0000,
    kurtosis=10.0000,
)
result.dsr   # 0.9004

Les mathématiques

Toutes les quantités sont par période : un ratio de Sharpe quotidien est le rendement quotidien moyen divisé par son écart-type, et T compte les observations quotidiennes. Le Probabilistic Sharpe Ratio (Bailey et López de Prado 2012) est la probabilité que le vrai ratio de Sharpe dépasse une référence SR*, en tenant compte de l'asymétrie γ₃ et du kurtosis brut γ₄ des rendements :

Si N stratégies sans compétence sont essayées et que leurs ratios de Sharpe estimés ont une variance V, la meilleure d'entre elles devrait afficher

où γ ≈ 0,5772 est la constante d'Euler-Mascheroni. Le Deflated Sharpe Ratio est le Probabilistic Sharpe Ratio avec ce maximum attendu comme référence, , de sorte qu'il corrige la recherche et la non-normalité des rendements en même temps.

Deux bornes de longueur découlent de la même algèbre. La longueur minimale d'historique est le nombre d'observations à partir duquel le PSR atteint une confiance choisie 1 − α, et la longueur minimale de backtest est le nombre d'années de données avant que N essais cessent de produire un ratio de Sharpe annualisé de E[max] par hasard (Bailey, Borwein, López de Prado et Zhu 2014) :

Ces quatre expressions produisent chaque nombre du calculateur ci-dessus. Il s'ouvre sur l'exemple détaillé de Bailey et López de Prado (2014), un ratio de Sharpe annualisé de 2,5 sur cinq ans de rendements quotidiens, choisi parmi 100 configurations dont les ratios de Sharpe ont une variance 0,5, avec une asymétrie de −3 et un kurtosis de 10. Ce backtest atteint 0,9004 et reste sous la barre des 95%, alors que les mêmes rendements auraient passé en tant que meilleur de 46 essais.

Pourquoi un ratio de Sharpe doit être dégonflé

Un chercheur qui essaie cent versions d'une stratégie et n'en rapporte que la meilleure a mené cent expériences et publié la plus chanceuse. Même lorsqu'aucune des versions n'a la moindre compétence, la meilleure affiche un ratio de Sharpe respectable, et une recherche plus longue produit un gagnant d'apparence encore meilleure. Le Deflated Sharpe Ratio de Bailey et López de Prado (2014) estime la probabilité que le vrai ratio de Sharpe de la stratégie sélectionnée soit supérieur à zéro une fois cette recherche prise en compte.

La démo ci-dessous rend le problème concret. Chaque stratégie qu'elle contient a un vrai ratio de Sharpe d'exactement zéro, pourtant la meilleure de soixante affiche habituellement un ratio de Sharpe annualisé supérieur à 1.

Demo: the best of N strategies with no skill

Every strategy below has a true Sharpe ratio of exactly zero over 250 daily returns, and they share a market factor. The best one still looks tradeable. SR₀ is where the best is expected to land by luck alone.

best, annualised

1.90

participation ratio

3.8

SR₀ from NSR₀ from participation ratiobest-4-2024annualised Sharpe ratio of each zero-skill strategy

Quelle longueur d'historique est nécessaire

Même à ratio de Sharpe annualisé égal, la fréquence compte, parce que moins d'observations par an portent moins d'information, et les queues épaisses pèsent plus que la fréquence. Les rendements mensuels ayant les moments de l'indice de hedge funds HFR demandent près de cinq ans pour montrer qu'un ratio de Sharpe de 2 bat 1, contre moins de trois pour des rendements quotidiens.

Figure: minimum track record length, years

How long a track record must be before an observed annualised Sharpe ratio is significantly above a benchmark at 95%. The outlined cell is the example in Bailey and López de Prado (2012).

observed SR ↓ / benchmark →0.00.51.01.52.02.5
0.511·····
1.02.7111····
1.51.212.7211···
2.00.691.222.7311··
2.50.440.691.222.7411·
3.00.310.440.691.232.7611

A dot means the observed Sharpe ratio does not exceed the benchmark, so no track record is long enough. Hover a cell to read it.

Le nombre d'essais qui compte

N doit être le nombre de configurations distinctes essayées, y compris celles abandonnées tôt. Comme les variantes d'une stratégie sont corrélées, le remplacer par un compte effectif tel que le ratio de participation des valeurs propres paraît plus prudent, mais lorsque V est mesurée sur les essais eux-mêmes cela corrige la corrélation deux fois. Un facteur commun déplace ensemble le ratio de Sharpe de chaque essai et réduit donc déjà leur dispersion, ce qui place la corrélation à l'intérieur de √V avant même que N soit touché.

Lancer le lot de la première démo le vérifie. Avec le compte distinct, le meilleur d'un corpus à compétence nulle dépasse SR₀ environ la moitié du temps à toute corrélation, ce qu'un maximum attendu devrait faire. Avec le ratio de participation, 73 à 85 pour cent des corpus nuls corrélés le dépassent dans la simulation de référence du paquet, si bien qu'une barre construite ainsi laisse passer la plus grande partie du pur bruit.

Validation

Le paquet reproduit chaque exemple numérique imprimé dans les trois articles sources, et chacun est un test qui s'exécute sur Python 3.10 à 3.13 sous Linux, macOS et Windows.

exemplearticlepaquet
DSR, 100 essais, asymétrie −3, kurtosis 10SR₀ ≈ 0,1132, DSR 0,90040,1132, 0,9004
Même stratégie après 46 essais0,95050,9505
Rendements normaux après 88 essais0,95050,9505
PSR, SR mensuel 0,458 sur 24 mois0,982 normal, 0,913 non normal0,982, 0,913
MinTRL, SR 2 contre 1, quotidien / hebdomadaire / mensuel2,73 / 2,83 / 3,24 ans2,73 / 2,83 / 3,24
MinTRL, mensuel, moments de l'indice HFR4,99 ans4,99
Essais permis par cinq ans de données4545

Des tests de Monte-Carlo vérifient le reste. Le PSR franchit 0,95 sur environ 5% des échantillons à compétence nulle, et le maximum attendu correspond aux maxima simulés, les surestimant de 2,5% à dix essais et de moins de 1% à partir de cent. La longueur minimale d'historique tombe exactement là où le PSR atteint son niveau de confiance.

Ce qu'un DSR ne dit pas

Un DSR supérieur à 0,95 indique que la sélection a peu de chances de s'expliquer par la seule recherche et la seule forme des rendements. Il ne dit rien des coûts de transaction, de la capacité, de l'anticipation dans les données, des changements de régime ou des essais qui n'ont jamais été consignés. Un DSR inférieur à 0,95 ne prouve pas non plus l'absence de compétence, en particulier sur des échantillons courts.

Chaque formule suppose aussi des rendements sériellement indépendants. Les positions tenues sur plusieurs barres rendent les rendements autocorrélés, si bien que le paquet fournit une taille d'échantillon effective AR(1) à passer à la place du nombre brut d'observations.

Reproductibilité

DaruFinance / deflated-sharpe

Python · implémentation de référence open-source

Invocation minimale

from deflated_sharpe import deflated_sharpe_ratio, to_period_sharpe, to_period_variance

result = deflated_sharpe_ratio(
    sharpe=to_period_sharpe(2.5, 250),        # annualised 2.5 on daily data
    n_obs=1250,                               # five years
    n_trials=100,                             # configurations tried
    var_trials=to_period_variance(0.5, 250),  # variance of their Sharpe ratios
    skew=-3, kurtosis=10,                     # raw kurtosis: normal = 3
)
result.dsr   # 0.9004, below the 95% bar

# or from the command line
# dsr deflate --sharpe 2.5 --annual --periods-per-year 250 --n-obs 1250 \
#     --trials 100 --trial-variance 0.5 --skew -3 --kurtosis 10

Références

  1. [1]Bailey, D. H. & López de Prado, M. (2014). The Deflated Sharpe Ratio: correcting for selection bias, backtest overfitting and non-normality. Journal of Portfolio Management 40(5), 94–107.
  2. [2]Bailey, D. H. & López de Prado, M. (2012). The Sharpe Ratio Efficient Frontier. Journal of Risk 15(2), 3–44.
  3. [3]Bailey, D. H., Borwein, J. M., López de Prado, M. & Zhu, Q. J. (2014). Pseudo-mathematics and financial charlatanism: the effects of backtest overfitting on out-of-sample performance. Notices of the American Mathematical Society 61(5), 458–471.
  4. [4]Lo, A. W. (2002). The statistics of Sharpe ratios. Financial Analysts Journal 58(4), 36–52.