Les objectifs
Sur cette page
Une stratégie explore un ensemble de combinaisons de paramètres. Un objectif est une formule qui transforme le résultat d’un backtest en un score. Ce score sert à classer les combinaisons selon le critère choisi.
Une stratégie peut définir plusieurs objectifs. Le moteur produit alors un classement par objectif à partir des mêmes backtests.
Un objectif ne modifie pas la logique de trading ; il ne change que le classement des résultats.
Le bloc [filters] écarte les résultats qui ne respectent pas vos critères.
Les objectifs classent ensuite ceux qui restent.
Les variables sharpe_ratio et sortino_ratio sont calculées à partir des rendements de l’equity du portefeuille, observés à chaque clôture du timeframe natif du backtest, puis annualisées afin de comparer de manière cohérente des tests exécutés sur des timeframes différents. La variable calmar_ratio est calculée une seule fois en fin de backtest à partir de CAGR / MDD, en utilisant la période effective du backtest et le drawdown maximal final du moteur.
Déclaration dans le TOML
Un objectif se déclare avec un bloc [[objective]] qui définit un identifiant id et une formule formula.
L’identifiant id permet de retrouver l’objectif dans les sorties et doit être unique dans la stratégie.
Le champ ascending indique si le meilleur score est le plus petit (true) ou le plus grand (false).
[[objective]]
id = "profit"
formula = "netprofit"
ascending = falseSi vous ne déclarez aucun bloc [[objective]], un objectif par défaut basé sur le net profit est utilisé.
[[objective]]
id = "netprofit"
formula = "netprofit"
ascending = falseQuand une formule devient longue, vous pouvez l’écrire sur plusieurs lignes avec des triples guillemets. Les exemples suivants utilisent cette syntaxe quand elle améliore la lecture.
Exemples
Ratio de Sortino
Le ratio de Sortino classe les combinaisons à partir des rendements de l’equity du portefeuille en ne retenant que la volatilité baissière.
[[objective]]
id = "sortino"
formula = "sortino_ratio"
ascending = falseRatio de Calmar
Le ratio de Calmar compare la croissance annualisée composée au drawdown maximal sur la fenêtre effective du backtest.
[[objective]]
id = "calmar"
formula = "calmar_ratio"
ascending = falseRecovery factor
Le recovery factor compare le profit net final au drawdown maximal en valeur absolue.
Un score de 4 signifie, par exemple, que le profit net représente quatre fois le pire drawdown observé.
[[objective]]
id = "recovery_factor"
formula = "netprofit / max_drawdown"
ascending = falseRatio retour / drawdown sur rendement total
Cette formule correspond à un score personnalisé rendement / drawdown fondé sur le rendement total du portefeuille, exprimé en pourcentage, puis divisé par le drawdown maximal en pourcentage.
Si une stratégie gagne 100 % avec un drawdown maximal de 25 %, son score est 4.
[[objective]]
id = "total_return_over_dd"
formula = "((profit_multiplier - 1) * 100) / max_drawdown_percent"
ascending = falseExpectancy score
Cet objectif reconstruit l’espérance d’un trade à partir du taux de réussite, du gain moyen et de la perte moyenne, puis l’amplifie avec le nombre de trades clôturés. Le score mesure si l’avantage moyen par trade reste crédible lorsque le nombre d’observations augmente.
Ici, avg_losing_trade est une valeur positive.
La partie liée aux pertes est donc soustraite explicitement dans la formule.
[[objective]]
id = "expectancy_score"
formula = """\
((((percent_profitable / 100) * avg_winning_trade) - \
(((100 - percent_profitable) / 100) * avg_losing_trade)) / \
avg_losing_trade) * closedtrades\
"""
ascending = falsePessimistic Return on Capital (PROC) adapté
Le PROC est une lecture volontairement prudente du retour sur capital. La formule réduit légèrement le poids des gains et augmente légèrement le poids des pertes à l’aide d’une pénalité en racine carrée. Le résultat met moins en avant les backtests dont la performance repose sur peu de trades favorables et valorise davantage les profils plus réguliers.
Le score final est exprimé en pourcentage du capital initial ; il correspond donc à un rendement conservateur déjà ajusté par une pénalisation de l’échantillon.
[[objective]]
id = "pessimistic_return_on_capital"
formula = """\
(((avg_winning_trade * ((closedtrades * percent_profitable / 100) - \
((closedtrades * percent_profitable / 100) ^ 0.5))) - \
(avg_losing_trade * ((closedtrades * (1 - percent_profitable / 100)) + \
((closedtrades * (1 - percent_profitable / 100)) ^ 0.5)))) / \
initial_capital) * 100\
"""
ascending = falsePlusieurs objectifs
Vous pouvez déclarer plusieurs objectifs pour obtenir, lors d’une même optimisation, un classement par objectif. Le premier peut faire ressortir les combinaisons les plus régulières, tandis que le second met l’accent sur le rapport entre profit net et drawdown.
[[objective]]
id = "sortino"
formula = "sortino_ratio"
ascending = false
[[objective]]
id = "recovery_factor"
formula = "netprofit / max_drawdown"
ascending = falseVariables disponibles
Les formules d’objectif utilisent les variables du backtest. La colonne Disponibilité indique si une variable est utilisable dans les expressions de trading de la stratégie ou réservée aux objectifs. Les séries de bougies (OHLCV), les sorties d’indicateurs et les variables liées au contexte marché ou à l’état d’une position ne sont pas disponibles dans les objectifs.
La syntaxe des expressions, des opérateurs et des fonctions est décrite dans Expressions dans les stratégies TOML.
| Variable | Description | Disponibilité |
|---|---|---|
initial_capital | Capital de départ du backtest. | Stratégie et objectifs |
equity | Valeur actuelle du portefeuille. | Stratégie et objectifs |
netprofit | Profit net final. | Stratégie et objectifs |
grossprofit | Somme des profits des trades gagnants. | Stratégie et objectifs |
grossloss | Somme des pertes des trades perdants (valeur positive). | Stratégie et objectifs |
grossprofit_percent | Profit brut, en pourcentage du capital initial. | Stratégie et objectifs |
grossloss_percent | Perte brute, en pourcentage du capital initial. | Stratégie et objectifs |
avg_winning_trade | Profit moyen des trades gagnants. | Stratégie et objectifs |
avg_losing_trade | Perte moyenne des trades perdants. | Stratégie et objectifs |
avg_winning_trade_percent | Profit moyen des trades gagnants, en pourcentage. | Stratégie et objectifs |
avg_losing_trade_percent | Perte moyenne des trades perdants, en pourcentage. | Stratégie et objectifs |
avg_trade | Profit ou perte moyen par trade. | Stratégie et objectifs |
avg_trade_percent | Profit ou perte moyen par trade, en pourcentage. | Stratégie et objectifs |
closedtrades | Nombre total de trades clôturés. | Stratégie et objectifs |
max_drawdown | Drawdown maximal. | Stratégie et objectifs |
max_drawdown_percent | Drawdown maximal, en pourcentage. | Stratégie et objectifs |
max_runup | Run-up maximal. | Stratégie et objectifs |
max_runup_percent | Run-up maximal, en pourcentage. | Stratégie et objectifs |
sharpe_ratio | Ratio de Sharpe annualisé, calculé à partir des rendements de l’equity du portefeuille au timeframe natif du backtest. | Objectifs uniquement |
sortino_ratio | Ratio de Sortino annualisé, calculé à partir des rendements de l’equity du portefeuille au timeframe natif du backtest. | Objectifs uniquement |
calmar_ratio | Ratio de Calmar calculé comme CAGR / MDD sur la période effective du backtest, avec max_drawdown_percent / 100 comme fraction de drawdown. | Objectifs uniquement |
profit_factor | Profit factor, calculé comme grossprofit / abs(grossloss) (NaN si aucune perte). | Objectifs uniquement |
percent_profitable | Pourcentage de trades gagnants. | Objectifs uniquement |
profit_multiplier | Multiplicateur de capital (capital final / capital initial). | Objectifs uniquement |
exposure_pct | Exposition au marché, en pourcentage. | Objectifs uniquement |
commission_paid | Total des frais (en devise de cotation). | Objectifs uniquement |
Pour une description plus détaillée des variables intégrées, de leur cadence de mise à jour et de l’indexation des séries, voir Variables intégrées.