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,
formulaest é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ètre | Description |
|---|---|
idTexte Obligatoire | Identifiant unique du bloc. |
variableTexte 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). |
initializationExpression Obligatoire | Valeur initiale de la variable au démarrage du backtest. Types TOML acceptés : chaîne, entier, décimal. |
formulaExpression 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_idTexte 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 :
| Variable | Description |
|---|---|
smooth_closeDécimal | Valeur courante calculée par le bloc. |
Notes
smooth_closeest une variable scalaire courante, ce n’est pas une série indexée commeclose[1].- Vous pouvez l’utiliser librement dans d’autres expressions numériques (comparaisons, arithmétique, logique).