Bars Since (barssince)
Bars Since transforme une condition en distance temporelle. Il produit un compteur exprimé en bougies qui vaut 0 chaque fois que la condition est vraie, puis augmente de 1 à chaque bougie suivante tant qu’elle reste fausse. Une nouvelle occurrence vraie remet immédiatement le compteur à 0.
La valeur indique ainsi depuis combien de bougies l’événement décrit par la condition ne s’est pas reproduit. Avant sa toute première occurrence dans l’historique disponible, aucune distance ne peut encore être calculée et la série reste à NaN. Dès que la condition devient vraie une première fois, le bloc produit des valeurs numériques et continue de compter sans limite jusqu’à la prochaine occurrence.
Déclaration du bloc
Une stratégie peut contenir plusieurs blocs [[barssince]]. Chaque bloc produit une série numérique unique, exposée sous l’id du bloc.
Dans [[barssince]], la clé condition est une expression évaluée à chaque bougie. Elle peut utiliser les séries de prix standard, les sorties d’indicateurs déjà définis dans la stratégie et les variables qu’ils exposent.
La syntaxe de condition suit les règles générales des expressions : opérateurs, fonctions, constantes réservées et indexation historique. Pour le détail complet, consultez Expressions et fonctions.
Le bloc [[barssince]] ne possède pas de paramètre source : la série produite dépend directement de l’expression condition.
[[barssince]] ne définit pas de profondeur d’historique minimale par lui-même. Si vous voulez que le compteur tienne compte d’événements survenus avant start_date, chargez un historique plus ancien avec price_history_start_date dans [backtest]. Cette date ajoute une période d’amorçage aux données de prix, sans modifier la période réelle du backtest.
[backtest]
symbol = "BINANCE:BTCUSDT"
timeframe = "60"
start_date = 2024-01-01
end_date = 2024-06-01
price_history_start_date = 2023-12-01Exemples
Configuration minimale
Ce bloc compte le nombre de bougies depuis la dernière bougie verte, définie ici par close >= open.
[[barssince]]
id = "bars_since_green"
condition = "close >= open"Condition basée sur l’historique
Ce bloc compte le nombre de bougies depuis la dernière fois où la clôture courante était supérieure à la clôture précédente.
[[barssince]]
id = "bars_since_up_close"
condition = "close > close[1]"Condition basée sur un autre indicateur
Cet exemple calcule d’abord un ATR, puis compte le nombre de bougies depuis la dernière bougie dont le corps était supérieur à 75 % de cet ATR.
[[atr]]
id = "atr14"
length = 14
[[barssince]]
id = "bars_since_strong_body"
condition = "abs(close - open) > atr14 * 0.75"Utilisation dans une condition
Cet exemple laisse passer la stratégie lorsque la dernière bougie verte remonte à trois bougies ou moins.
[[barssince]]
id = "bars_since_green"
condition = "close >= open"
[[condition]]
id = "recent_green_filter"
condition = "bars_since_green <= 3"
next_block_id = "..."Condition multi-marché
Cet exemple compte le nombre de bougies depuis la dernière bougie verte sur BINANCE:ETHUSDT. Les blocs [[price]] portent le symbole de marché ; le bloc [[barssince]] combine simplement leurs séries dans condition.
[[price]]
id = "eth_open"
symbol = "BINANCE:ETHUSDT"
source = "open"
[[price]]
id = "eth_close"
symbol = "BINANCE:ETHUSDT"
source = "close"
[[barssince]]
id = "bars_since_eth_green"
condition = "eth_close >= eth_open"Timeframe dédié
Ce bloc évalue la condition sur un timeframe de quatre heures. La condition close >= open utilise alors les bougies de ce timeframe (timeframe = "240"), et la série produite est alignée avec le timeframe principal lorsqu’elle est consommée ailleurs dans la stratégie. Voir la page Exchanges, Symboles et Timeframes pour les règles d’alignement entre ce timeframe et le timeframe principal.
[[barssince]]
id = "bars_since_green_4h"
timeframe = "240"
condition = "close >= open"Paramètres
| Paramètre | Description |
|---|---|
idTexte Obligatoire | Identifiant unique de la série produite. |
conditionExpression Obligatoire | Expression évaluée à chaque bougie pour déterminer si le compteur doit être remis à 0.La condition est considérée comme vraie lorsqu’elle produit une valeur définie et non nulle. 0 et NaN sont considérés comme faux.Entrées possibles : prix standards, identifiants d’indicateurs déjà définis, variables exposées par ces indicateurs ( fast.length, fast.type, fast.symbol, fast.timeframe, etc.), constantes numériques et fonctions d’expression.Types TOML acceptés : chaîne, entier, décimal. Les variables runtime du backtest, du portefeuille, des ordres et des trades ne sont pas disponibles dans ce bloc. |
timeframeTexte ou Tableau Optionnel | Timeframe sur lequel la condition est évaluée. Si timeframe est omis, le calcul se fait sur le timeframe principal de la grille défini dans [backtest].Pour les formats acceptés et les règles d’alignement entre timeframes, voir Exchanges, Symboles et Timeframes. |
Note : la clé symbol n’est pas autorisée sur [[barssince]]. Pour le multi-marché, définissez d’abord des indicateurs sources avec leurs propres symboles, puis combinez ces indicateurs dans condition.
Variables disponibles
Le bloc barssince expose une série numérique et la métadonnée de contexte timeframe. Ces variables sont exposées une fois la série calculée et peuvent être utilisées en aval. Elles ne sont pas disponibles dans la condition du bloc lui-même.
Supposons le bloc configuré ainsi :
[[barssince]]
id = "bars_since_green"
condition = "close >= open"Alors :
| Variable | Description |
|---|---|
bars_since_green ou bars_since_green[0]Décimal | Nombre de bougies depuis la dernière fois où condition était vraie. La valeur courante vaut 0 si la condition est vraie sur la bougie courante. |
bars_since_green[n]Décimal | Valeur du compteur il y a n bougies. |
bars_since_green.timeframeTexte | Timeframe effectivement utilisé pour l’évaluation du bloc. |
Notes
- Tant que la condition n’a jamais été vraie dans l’historique disponible, la série vaut
NaN. - Les variables numériques se combinent librement (arithmétique, comparaisons, opérateurs logiques).
- Les variables textuelles sont destinées aux comparaisons d’égalité/inégalité uniquement.
- Une condition ne peut pas référencer son propre
id(auto-référence interdite).