Combinaisons d'hyperparamètres
Sur cette page
Whale‑E exécute un backtest pour chaque combinaison possible des hyperparamètres d’une stratégie. Le nombre de combinaisons peut devenir très grand, mais il est possible de les filtrer pour ne conserver que les configurations pertinentes.
Prenons d’abord un indicateur avec la configuration suivante :
[[moving_average]]
id = "slow"
source = "ohlc4"
type = "sma"
length.start = 10
length.stop = 50
# length.step = 1Dans cet exemple :
sourceettypen’ont chacun qu’une seule valeur, donc 1 choix pour chaque.lengthvarie de 10 à 50 avec un pas de 1. Whale‑E supposelength.step = 1lorsqu’il est omis, soit 41 valeurs possibles.
En combinant ces choix, on obtient donc 1 (source) * 1 (type) * 41 (length) = 41 combinaisons. Whale‑E exécutera donc 41 backtests différents pour cet indicateur.
Si l’on ajoute un deuxième choix pour source afin de tester la stratégie avec la clôture classique et le prix moyen ohlc4 :
source = ["close", "ohlc4"]Le nombre de combinaisons double, passant à 2 (source) * 1 (type) * 41 (length) = 82 combinaisons.
Maintenant, si l’on souhaite tester plusieurs types de moyennes mobiles :
type = ["sma", "ema", "wma"]Le nombre de choix pour type passe de 1 à 3, ce qui triple le nombre de combinaisons : 2 (source) * 3 (type) * 41 (length) = 246. Whale‑E effectuera donc 246 backtests pour cet indicateur.
Ajoutons à présent un deuxième indicateur [[moving_average]] configuré de la même manière pour mettre en place une stratégie de crossover. Les deux blocs ne diffèrent que par leur id :
[[moving_average]]
id = "fast"
source = ["close", "ohlc4"]
type = ["sma", "ema", "wma"]
length.start = 10
length.stop = 50
[[moving_average]]
id = "slow"
source = ["close", "ohlc4"]
type = ["sma", "ema", "wma"]
length.start = 10
length.stop = 50Chaque indicateur génère 246 combinaisons, ce qui amène le total à 246 (fast) * 246 (slow) = 60 516 combinaisons pour les deux indicateurs ensemble.
Création des grilles
Une grille est une version précise de la stratégie où tous les choix « qualitatifs » sont fixés : source, timeframe, type pour les moyennes mobiles, et, le cas échéant, les symboles. Whale‑E crée une grille pour chaque combinaison de ces choix, y compris lorsque plusieurs symboles ou timeframes sont définis dans le bloc [backtest].
Les hyperparamètres numériques n’engendrent pas de nouvelles grilles. Ils sont explorés à l’intérieur de chaque grille. Il s’agit par exemple de length ou offset.
Reprenons la configuration ci‑dessus avec deux moyennes mobiles, fast et slow :
[[moving_average]]
id = "fast"
source = ["close", "ohlc4"]
type = ["sma", "ema", "wma"]
length.start = 10
length.stop = 50
[[moving_average]]
id = "slow"
source = ["close", "ohlc4"]
type = ["sma", "ema", "wma"]
length.start = 10
length.stop = 50Dans notre configuration, le bloc fast propose deux sources et trois types de moyenne mobile, soit six configurations qualitatives. Le bloc slow offre les mêmes six possibilités. Whale‑E construit une grille pour chaque couple (fast, slow), ce qui donne 6 × 6 = 36 grilles. Dans une grille, la source et le type de fast et de slow sont fixés.
A l’intérieur de chaque grille, les hyperparamètres numériques sont évalués. Les longueurs de fast et de slow prennent chacune 41 valeurs, de 10 à 50 avec un pas implicite de 1. Toutes les paires de longueurs sont testées, soit 41 × 41 = 1 681 combinaisons numériques par grille.
Le nombre total de backtests correspond au produit du nombre de grilles par le nombre de combinaisons dans une grille : 36 × 1 681 = 60 516.
Validation des combinaisons
Pour imposer que la longueur de la moyenne mobile rapide (fast) soit toujours inférieure à celle de la moyenne lente (slow) :
[constraints]
condition = "fast.length < slow.length"Cette contrainte élimine toutes les configurations où fast.length n’est pas strictement inférieur à slow.length. Pour n = 41 longueurs possibles, cela donne n (n ‑ 1) / 2 = 820 paires (fast.length, slow.length) valides.
En tenant compte également de source (2 choix : close et ohlc4) et de type (3 choix : sma, ema, wma) pour chacun des deux indicateurs, on obtient 820 (fast et slow lengths) * 2 × 3 (fast source & type) * 2 × 3 (slow source & type) = 29 520 combinaisons. Whale‑E effectuera donc 29 520 backtests au lieu de 60 516.
Si l’on veut, en plus, que les deux indicateurs utilisent la même source et le même type, la règle est complétée :
[constraints]
condition = "fast.length < slow.length and fast.source = slow.source and fast.type = slow.type"Cette nouvelle contrainte exige que fast et slow partagent la même source et le même type. Pour chaque choix de source (2) et de type (3), on conserve alors 820 paires de longueurs cohérentes. Au total, cela fait 820 * 2 (source) * 3 (type) = 4 920 combinaisons. Grâce à ces restrictions, on passe ainsi de 60 516 à 4 920 backtests.