Les objectifs

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 = false

Si 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 = false

Quand 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 = false

Ratio 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 = false

Recovery 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 = false

Ratio 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 = false

Expectancy 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 = false

Pessimistic 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 = false

Plusieurs 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 = false

Variables 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.

VariableDescriptionDisponibilité
initial_capitalCapital de départ du backtest.Stratégie et objectifs
equityValeur actuelle du portefeuille.Stratégie et objectifs
netprofitProfit net final.Stratégie et objectifs
grossprofitSomme des profits des trades gagnants.Stratégie et objectifs
grosslossSomme des pertes des trades perdants (valeur positive).Stratégie et objectifs
grossprofit_percentProfit brut, en pourcentage du capital initial.Stratégie et objectifs
grossloss_percentPerte brute, en pourcentage du capital initial.Stratégie et objectifs
avg_winning_tradeProfit moyen des trades gagnants.Stratégie et objectifs
avg_losing_tradePerte moyenne des trades perdants.Stratégie et objectifs
avg_winning_trade_percentProfit moyen des trades gagnants, en pourcentage.Stratégie et objectifs
avg_losing_trade_percentPerte moyenne des trades perdants, en pourcentage.Stratégie et objectifs
avg_tradeProfit ou perte moyen par trade.Stratégie et objectifs
avg_trade_percentProfit ou perte moyen par trade, en pourcentage.Stratégie et objectifs
closedtradesNombre total de trades clôturés.Stratégie et objectifs
max_drawdownDrawdown maximal.Stratégie et objectifs
max_drawdown_percentDrawdown maximal, en pourcentage.Stratégie et objectifs
max_runupRun-up maximal.Stratégie et objectifs
max_runup_percentRun-up maximal, en pourcentage.Stratégie et objectifs
sharpe_ratioRatio de Sharpe annualisé, calculé à partir des rendements de l’equity du portefeuille au timeframe natif du backtest.Objectifs uniquement
sortino_ratioRatio de Sortino annualisé, calculé à partir des rendements de l’equity du portefeuille au timeframe natif du backtest.Objectifs uniquement
calmar_ratioRatio 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_factorProfit factor, calculé comme grossprofit / abs(grossloss) (NaN si aucune perte).Objectifs uniquement
percent_profitablePourcentage de trades gagnants.Objectifs uniquement
profit_multiplierMultiplicateur de capital (capital final / capital initial).Objectifs uniquement
exposure_pctExposition au marché, en pourcentage.Objectifs uniquement
commission_paidTotal 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.