Constraints

[constraints] restreint l’espace de recherche d’une optimisation. Whale-E exécute un backtest pour chaque combinaison d’hyperparamètres, et ce bloc écarte en amont celles qui ne satisfont pas une condition, avant même qu’elles ne soient testées.

Prenons un croisement de deux moyennes mobiles fast et slow, explorées sur les mêmes plages : deux sources (close et ohlc4), trois types (sma, ema et wma) et une longueur de 10 à 50, soit 41 valeurs. Chaque moyenne représente donc 2 × 3 × 41 = 246 configurations, et le croisement des deux en teste 246 × 246 = 60 516.

Beaucoup de ces combinaisons n’ont aucun intérêt, car une moyenne rapide plus longue que la moyenne lente ne correspond à aucune stratégie réelle. La contrainte fast.length < slow.length ne conserve que les paires de longueurs où la rapide est la plus courte, soit 41 × 40 / 2 = 820 paires au lieu de 41 × 41. L’optimisation tombe alors à 2 × 3 × 2 × 3 × 820 = 29 520 backtests. Le détail du calcul figure sur la page Combinaisons d’hyperparamètres.

Déclaration du bloc

Une stratégie contient au plus un bloc [constraints]. Il expose une seule clé, condition, qui contient l’expression logique évaluée pour chaque combinaison. Lorsque la condition est vraie, la combinaison est conservée et testée ; lorsqu’elle est fausse, la combinaison est écartée.

Exemples

Croisement de deux moyennes mobiles

Pour un croisement fast / slow, on impose que la période rapide reste inférieure à la période lente :

[constraints]
condition = "fast.length < slow.length"

Cohérence de source et de type

Lorsque plusieurs sources et plusieurs types sont explorés, on peut exiger en plus que les deux moyennes partagent la même source et le même type :

[constraints]
condition = "fast.length < slow.length and fast.type = slow.type and fast.source = slow.source"

Constantes optimisées

La condition référence aussi les blocs [[constant]] par leur id. Pour qu’un take profit reste au-dessus du stop loss pendant toute l’optimisation :

[constraints]
condition = "stop_loss_pct < take_profit_pct"

Paramètres du bloc

ParamètreDescription
condition
 Texte (expression)
 Obligatoire
Expression logique évaluée pour chaque combinaison d’hyperparamètres. La combinaison est conservée lorsque le résultat est vrai (différent de 0) et écartée lorsqu’il est faux (0).

Variables référençables

La condition référence les hyperparamètres explorés pendant l’optimisation :

  • les paramètres d’un bloc indicateur, sous la forme <id>.<paramètre>, par exemple fast.length, fast.type ou fast.source ;
  • les blocs [[constant]], sous leur id seul, par exemple take_profit_pct.

Les opérateurs disponibles sont les comparaisons <, >, <=, >=, = et les opérateurs logiques and et or.

Évaluation

  • La condition est évaluée pour chaque combinaison avant son backtest. Seules les combinaisons qui la satisfont sont exécutées.
  • Un seul bloc [constraints] est pris en compte. Pour combiner plusieurs règles, reliez-les avec and et or dans la même condition.