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
Length bounds
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
Reproduce this result in the package
both snippets track the inputs above
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
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.9004Les 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
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.0 | 0.5 | 1.0 | 1.5 | 2.0 | 2.5 |
|---|---|---|---|---|---|---|
| 0.5 | 11 | · | · | · | · | · |
| 1.0 | 2.71 | 11 | · | · | · | · |
| 1.5 | 1.21 | 2.72 | 11 | · | · | · |
| 2.0 | 0.69 | 1.22 | 2.73 | 11 | · | · |
| 2.5 | 0.44 | 0.69 | 1.22 | 2.74 | 11 | · |
| 3.0 | 0.31 | 0.44 | 0.69 | 1.23 | 2.76 | 11 |
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.
| exemple | article | paquet |
|---|---|---|
| DSR, 100 essais, asymétrie −3, kurtosis 10 | SR₀ ≈ 0,1132, DSR 0,9004 | 0,1132, 0,9004 |
| Même stratégie après 46 essais | 0,9505 | 0,9505 |
| Rendements normaux après 88 essais | 0,9505 | 0,9505 |
| PSR, SR mensuel 0,458 sur 24 mois | 0,982 normal, 0,913 non normal | 0,982, 0,913 |
| MinTRL, SR 2 contre 1, quotidien / hebdomadaire / mensuel | 2,73 / 2,83 / 3,24 ans | 2,73 / 2,83 / 3,24 |
| MinTRL, mensuel, moments de l'indice HFR | 4,99 ans | 4,99 |
| Essais permis par cinq ans de données | 45 | 45 |
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 10Références
- [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]Bailey, D. H. & López de Prado, M. (2012). The Sharpe Ratio Efficient Frontier. Journal of Risk 15(2), 3–44.
- [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]Lo, A. W. (2002). The statistics of Sharpe ratios. Financial Analysts Journal 58(4), 36–52.

