Variable

[[variable]] crée une variable numérique mise à jour à chaque passage dans le flux de stratégie. Il permet de conserver un état intermédiaire entre les bougies, par exemple un compteur, une valeur lissée ou une métrique personnalisée réutilisable ensuite dans d’autres blocs.

Contrairement à un bloc de test ([[condition]], [[trend]], etc.), [[variable]] n’évalue pas un vrai/faux pour décider s’il est validé. Il est auto-validé: il calcule la variable, puis continue directement vers le bloc suivant.

Fonctionnement du bloc

  • Au démarrage du backtest, la variable est initialisée avec initialization.
  • A chaque passage sur le bloc, formula est évaluée, puis son résultat remplace la valeur de la variable.
  • Le bloc est toujours validé sur la bougie courante et enchaîne vers next_block_id.
  • Ce bloc ne peut pas être utilisé comme enfant d’un bloc [[and]] ou [[or]].

Déclaration du bloc

Une stratégie peut contenir plusieurs blocs [[variable]]. Chaque bloc gère une variable numérique nommée par variable.

La syntaxe de formula et initialization suit les règles générales des expressions. Voir Expressions et fonctions. Dans ce bloc, formula et initialization doivent rester des expressions uniques : les séparateurs ; et les opérateurs d’affectation (:=, +=, -=, *=, /=, %=) ne sont pas autorisés.

Exemples

Bloc minimal

Cet exemple initialise un compteur à 0, puis l’incrémente de 1 à chaque passage.

[[variable]]
id             = "variable_counter"
variable       = "entry_counter"
initialization = 0
formula        = "entry_counter + 1"
next_block_id  = "next_step"

Lissage d’une valeur

Cet exemple construit une valeur lissée (filtre exponentiel simple) réutilisable dans des conditions.

[[variable]]
id             = "variable_smooth_close"
variable       = "smooth_close"
initialization = "close"
formula        = "smooth_close * 0.9 + close * 0.1"
next_block_id  = "entry_filter"

Compteur dans une boucle de stratégie

Cet exemple compte le nombre de bougies haussières consécutives (close > open). Après chaque mise à jour, le bloc [[if]] vérifie si le compteur a atteint 3. Si ce n’est pas le cas, un bloc [[wait]] attend la bougie suivante puis renvoie l’exécution vers [[variable]], ce qui permet au compteur de continuer à évoluer.

[[variable]]
id             = "variable_green_streak"
variable       = "green_streak"
initialization = 0
formula        = "close > open ? green_streak + 1 : 0"
next_block_id  = "check_green_streak"

[[if]]
id            = "check_green_streak"
condition     = "green_streak >= 3"
then_block_id = "enter_long"
else_block_id = "wait_next_candle"

[[wait]]
id            = "wait_next_candle"
wait_candles  = 1
next_block_id = "variable_green_streak"

Paramètres du bloc

ParamètreDescription
id
 Texte
 Obligatoire
Identifiant unique du bloc.
variable
 Texte
 Obligatoire
Nom de la variable numérique créée/mise à jour par le bloc.
Ce nom ne doit pas être vide et doit respecter le format [A-Za-z_][A-Za-z0-9_]*.
Il doit aussi être unique dans le contexte d’exécution (pas de collision avec un symbole déjà existant).
initialization
 Expression
 Obligatoire
Valeur initiale de la variable au démarrage du backtest.
Types TOML acceptés : chaîne, entier, décimal.
formula
 Expression
 Obligatoire
Expression évaluée à chaque passage dans le bloc.
Le résultat remplace la valeur courante de variable.
Types TOML acceptés : chaîne, entier, décimal.
next_block_id
 Texte
 Obligatoire
Identifiant du bloc conditionnel exécuté juste après le calcul.

Variable exposée

Le bloc expose une variable scalaire réutilisable dans les expressions des blocs suivants.

Supposons le bloc configuré ainsi :

[[variable]]
id             = "variable_smooth_close"
variable       = "smooth_close"
initialization = "close"
formula        = "smooth_close * 0.9 + close * 0.1"
next_block_id  = "entry_filter"

Alors :

VariableDescription
smooth_close
Décimal
Valeur courante calculée par le bloc.

Notes

  • smooth_close est une variable scalaire courante, ce n’est pas une série indexée comme close[1].
  • Vous pouvez l’utiliser librement dans d’autres expressions numériques (comparaisons, arithmétique, logique).