Indicateurs
Chaque indicateur connu du moteur de règles, avec ses paramètres et champs de sortie.
Un indicateur est référencé dans un leaf comme `{indicator: <kind>, ...params}`. Chaque type expose un ou plusieurs champs de sortie adressables via `field: <name>` (omets `field` pour prendre le premier). Le multi-timeframe est supporté via `timeframe: '4h'` sur n'importe quel indicateur.
| Type | Paramètres | Champs de sortie | Usage typique |
|---|---|---|---|
| ema | period (>=1) | value | Filtre de tendance. `ema20 > ema50` pour un biais haussier. |
| sma | period (>=1) | value | Comme EMA mais sans mémoire de lissage. |
| rsi | period (par défaut 14, >=2) | value (0–100) | Mean reversion. `rsi < 30` long, `rsi > 70` short. |
| macd | fast (12), slow (26), signal (9); fast < slow | line, signal, hist | Momentum. `hist crosses_above 0` comme entrée. |
| bollinger | period (20), std_mult (2.0) | mid, upper, lower | Enveloppe de volatilité. `close < lower` pour des entrées de rebond. |
| atr | period (14, >=2) | value | Sizing de la distance au stop. `stop = entry - atr14 * 2`. |
| atr_sma | atr_period (default 14), sma_period (default 14) | value (smoothed ATR), atr (raw) | Base de volatilité plus stable. `atr14 > atr_sma` = volatilité croissante. |
| stochastic | period (14), smooth_d (3) | k, d (les deux 0–100) | Croisement des lignes 20 / 80 pour mean reversion. |
| adx | period (14) | adx, plus_di, minus_di | `adx > 25` = en tendance. À combiner avec `plus_di > minus_di` pour un biais haussier. |
| vwap | anchor (session/day/week/month/rolling), period (20, rolling uniquement) | value | Référence de juste valeur. `close > vwap` = prix au-dessus de la moyenne. |
| volume_ma | period (20) | value | Confirmation de breakout. `volume > volume_ma * 1.5`. |
| donchian | period (default 20, >=2) | upper, lower, mid | Canal de cassure. `close > upper` pour les entrées en cassure ; `mid` comme référence de tendance. |
| swing | lookback (1) | last_high, last_low, prev_high, prev_low | Entrées sur breakout (`close > last_high`) et filtres HH / HL. |
| s_trend | lookback (1) | value (-1 / 0 / +1) | Régime de tendance style SMC (BOS / CHoCH) — bascule après deux breakouts de swing du même côté. |
| blackflag_fts | atr_period (14), atr_factor (1.6), fib_lookback (8) | trail, extreme, state, fib1, fib2, fib3 | Variante du SuperTrend avec le True Range modifié de Black Flag et une échelle de pullbacks Fibonacci 38,2 / 50 / 61,8. |
| super_trend | atr_period (10), factor (3.0) | trail, state | SuperTrend standard sur `hl2`. `state == 1` régime haussier, `state == -1` régime baissier. |
| trend_magic | cci_period (20), atr_period (5), atr_mult (1.0) | trail, state, cci | Cliquet ATR validé par CCI. Le stop avance dans la direction de la tendance tant que le CCI confirme le régime. |
| ema_pullback | ema_fast (100), ema_slow (200), ema_regime (500), atr_period (14), … | long_signal, short_signal, ema_fast, ema_slow, ema_regime, atr, wait_long, wait_short | Modèle d'entrée composite long/short. `long_signal == 1` pour entrer sur un repli confirmé. |
| vfi | length (130), coef (0.2), v_coef (2.5), signal (5) | vfi, signal, hist | Volume Flow Indicator. Oscillateur — `vfi > 0` accumulation, `< 0` distribution, `hist` pour les signaux de croisement. |
| market_structure | swing_lookback (5) | state, bos_signal, choch_signal, pivot_high, pivot_low, last_pivot_high, last_pivot_low | Structure de marché SMC sur les pivots de swing. `state` = régime courant, `bos_signal` / `choch_signal` se déclenchent sur une bougie. |
| fair_value_gap | min_gap_pct (0.0), expire_bars (0 = jamais) | bull_top, bull_bottom, bear_top, bear_bottom, bull_signal, bear_signal, bull_filled, bear_filled | Déséquilibre 3 bougies avec suivi de comblement. Utilise `bull_signal` pour entrer à la formation du FVG, `bull_filled` pour suivre la mitigation. |
| order_block | swing_lookback (5), retest_tolerance_pct (0.1) | bull_top, bull_bottom, bear_top, bear_bottom, bull_signal, bear_signal, bull_retest, bear_retest, bull_mitigated, bear_mitigated | Dernière bougie de sens inverse avant un BOS. `bull_retest` se déclenche quand le prix revient dans la zone. |
| equal_highs_lows | lookback (10), tolerance_pct (0.05) | eqh_level, eql_level, eqh_signal, eql_signal, eqh_swept, eql_swept | Détection de pools de liquidité. `eqh_swept` confirme une chasse aux stops au-dessus des Equal Highs — déclencheur courant de retournement. |
| prior_period_levels | (sans paramètre — calculé à partir du timestamp de la bougie) | pdh, pdl, pdo, pdc, pwh, pwl, pwo, pwc, pmh, pml, pmo, pmc | Niveaux H/L/O/C du jour, semaine et mois précédents. `close > pdh` pour des filtres de momentum sur cassure du plus-haut du jour précédent. |
| premium_discount_zones | trailing_lookback (50) | trailing_top, trailing_bottom, premium_top, premium_bottom, equilibrium_top, equilibrium_bottom, discount_top, discount_bottom, current_zone | Classification en zones Fibonacci du range glissant. `current_zone == 'discount'` pour un biais long SMC. |
Nouveau catalogue d'indicateurs
Les dix indicateurs ajoutés lors des vagues de port Pine et de SMC clean-room. Chaque carte liste description, paramètres et valeurs par défaut, champs de sortie et un snippet YAML à copier-coller.
Exponential Moving Average (EMA)
emaMoyenne mobile exponentielle — une ligne de tendance qui pondère davantage les prix récents, donc plus réactive qu'une SMA. Sa pente donne la direction ; une EMA rapide au-dessus d'une lente indique un biais haussier.
- Paramètres:
- period (20)
- Champs:
- value
YAML
leaf:
lhs: { price: close }
op: gt
rhs: { indicator: ema, period: 50, field: value }
dir: longSimple Moving Average (SMA)
smaMoyenne mobile simple — la moyenne des clôtures sur N bougies, une ligne de tendance lisse. Le prix au-dessus de la SMA indique un biais haussier ; les croisements de deux SMA signalent les changements de tendance.
- Paramètres:
- period (20)
- Champs:
- value
YAML
leaf:
lhs: { price: close }
op: gt
rhs: { indicator: sma, period: 200, field: value }
dir: longRelative Strength Index (RSI)
rsiIndice de force relative — un oscillateur de momentum de 0 à 100. Lectures classiques : sous 30 survendu (chercher des longs), au-dessus de 70 suracheté (chercher des shorts), 50 comme pivot de tendance.
- Paramètres:
- period (14)
- Champs:
- value
YAML
leaf:
lhs: { indicator: rsi, period: 14, field: value }
op: lt
rhs: { value: 30 }
dir: longMACD
macdConvergence/divergence de moyennes mobiles — momentum lu dans l'écart entre une EMA rapide et lente. Le passage de l'histogramme à zéro, ou la ligne MACD croisant sa ligne de signal, marque les changements de momentum.
- Paramètres:
- fast (12), slow (26), signal (9)
- Champs:
- line, signal, hist, fast_ema, slow_ema
YAML
leaf:
lhs: { indicator: macd, field: hist }
op: crosses_above
rhs: { value: 0 }
dir: longBollinger Bands
bollingerUne moyenne mobile encadrée par des bandes de volatilité (± N écarts-types). Le prix touchant la bande inférieure peut signaler un excès propice à un rebond ; la largeur des bandes indique la volatilité.
- Paramètres:
- period (20), std_mult (2.0)
- Champs:
- mid, upper, lower
YAML
leaf:
lhs: { price: close }
op: lt
rhs: { indicator: bollinger, period: 20, field: lower }
dir: longStochastic Oscillator
stochasticOscillateur stochastique — la position de la clôture dans la plage haut–bas récente, en %K et %D lissé (0–100). Sous 20 survendu, au-dessus de 80 suracheté ; %K croisant %D rythme les entrées.
- Paramètres:
- period (14), smooth_d (3)
- Champs:
- k, d
YAML
leaf:
lhs: { indicator: stochastic, field: k }
op: crosses_above
rhs: { indicator: stochastic, field: d }
dir: longAverage Directional Index (ADX)
adxAverage Directional Index — mesure la force de la tendance (pas la direction) de 0 à 100, avec +DI/−DI pour la direction. Au-dessus de ~25 indique une vraie tendance ; +DI au-dessus de −DI pour un biais haussier.
- Paramètres:
- period (14)
- Champs:
- adx, plus_di, minus_di
YAML
leaf:
lhs: { indicator: adx, period: 14, field: adx }
op: gt
rhs: { value: 25 }
dir: longAverage True Range (ATR)
atrAverage True Range — l'amplitude moyenne d'une bougie, c.-à-d. de combien le prix bouge habituellement. Sert surtout à dimensionner stops et objectifs selon la volatilité (ex. stop = entrée − 2×ATR).
- Paramètres:
- period (14)
- Champs:
- value
YAML
# ATR is typically used for stop sizing, e.g.
risk:
stop: { anchor: atr, indicator: atr14, mult: 2.0 }ATR (smoothed)
atr_smaUn ATR lissé — la moyenne mobile simple de l'ATR — pour une base de volatilité plus stable. Comparez l'ATR brut à celle-ci pour distinguer volatilité croissante et décroissante.
- Paramètres:
- atr_period (14), sma_period (14)
- Champs:
- value, atr
YAML
leaf:
lhs: { indicator: atr, period: 14, field: value }
op: gt
rhs: { indicator: atr_sma, atr_period: 14, sma_period: 14, field: value }
dir: longVolume-Weighted Average Price (VWAP)
vwapPrix moyen pondéré par le volume — le prix moyen payé, pondéré par le volume et ancré à une session, un jour, une semaine ou un mois. Au-dessus du VWAP, les acheteurs dominent ; une référence de juste valeur et un aimant de retour à la moyenne.
- Paramètres:
- anchor (session), period (20)
- Champs:
- value
YAML
leaf:
lhs: { price: close }
op: gt
rhs: { indicator: vwap, anchor: session, field: value }
dir: longVolume Moving Average
volume_maUne moyenne mobile du volume — votre référence de participation « normale ». Un volume bien au-dessus de sa moyenne (ex. 1,5×) confirme la conviction derrière une cassure.
- Paramètres:
- period (20)
- Champs:
- value
YAML
leaf:
lhs: { price: volume }
op: gt
rhs: { indicator: volume_ma, period: 20, field: value }
dir: longDonchian Channel
donchianCanal de Donchian — le plus haut et le plus bas des N dernières bougies. Une clôture au-dessus de la bande supérieure est une entrée de cassure classique ; la ligne médiane sert de référence de tendance.
- Paramètres:
- period (20)
- Champs:
- upper, lower, mid
YAML
leaf:
lhs: { price: close }
op: gt
rhs: { indicator: donchian, period: 20, field: upper }
dir: longVolume Flow Indicator
vfiLe Volume Flow Indicator de Markos Katsanos — un oscillateur lissé et pondéré par le volume qui change de signe en franchissant la ligne zéro quand l'accumulation devient distribution. Combine l'histogramme avec un filtre de tendance pour des entrées confirmées.
- Paramètres:
- length (130), coef (0.2), vcoef (2.5), signal_length (5), smooth_vfi (false)
- Champs:
- vfi, signal, hist
YAML
leaf:
lhs: { indicator: vfi, length: 130, field: hist }
op: crosses_above
rhs: { value: 0 }
dir: longSwing High / Low
swingPivots de swing récents — les derniers haut et bas confirmés et la paire précédente. Briques de base pour les entrées en cassure (clôture au-dessus du dernier haut) et les filtres de tendance higher-high / higher-low.
- Paramètres:
- lookback (1)
- Champs:
- last_high, last_low, prev_high, prev_low
YAML
leaf:
lhs: { price: close }
op: gt
rhs: { indicator: swing, lookback: 5, field: last_high }
dir: longStructural Trend
s_trendÉtat de tendance structurel (+1 hausse, −1 baisse, 0 neutre) issu des cassures de swing confirmées — il ne bascule qu'après deux cassures du même côté, filtrant le bruit. Un filtre de régime léger.
- Paramètres:
- lookback (2)
- Champs:
- value
YAML
leaf:
lhs: { indicator: s_trend, lookback: 2, field: value }
op: eq
rhs: { value: 1 }
dir: longSuperTrend
super_trendLe SuperTrend de manuel — trailing stop sur bandes ATR autour de hl2. `state` ne bascule entre +1 et -1 que sur une clôture au-delà de la bande opposée.
- Paramètres:
- atr_period (10), factor (3.0)
- Champs:
- trail, state
YAML
leaf:
lhs: { indicator: super_trend, atr_period: 10, factor: 3.0, field: state }
op: eq
rhs: { value: 1 }
dir: longTrend Magic
trend_magicTrailing stop à cliquet ATR validé par le CCI. Le trail n'avance vers le prix que lorsque le CCI confirme la direction dominante — plus calme que le SuperTrend en range.
- Paramètres:
- period (20), atr_period (5), coeff (1.0)
- Champs:
- trail, state, cci
YAML
leaf:
lhs: { bar: close }
op: gt
rhs: { indicator: trend_magic, atr_period: 5, atr_mult: 1.0, field: trail }
dir: longBlack Flag Futures Trading System
blackflag_ftsVariante du SuperTrend par Black Flag. Utilise un True Range modifié et ajoute une échelle de pullbacks Fibonacci en trois marches (38,2 / 50 / 61,8) pour des prises partielles ou des ré-entrées échelonnées dans une tendance en cours.
- Paramètres:
- atr_period (28), atr_factor (5.0), trail_type (modified), fib1 (0.618), fib2 (0.786), fib3 (0.886)
- Champs:
- trail, extreme, state, fib1, fib2, fib3
YAML
leaf:
lhs: { indicator: blackflag_fts, atr_period: 14, atr_factor: 1.6, field: state }
op: eq
rhs: { value: 1 }
dir: longEMA Pullback
ema_pullbackUn modèle d'entrée complet long et short : trois EMA fixent la tendance et le régime, puis il attend un repli (dans la tolérance) et un déclencheur filtré par l'ATR avant d'émettre long_signal / short_signal.
- Paramètres:
- ema_fast (100), ema_slow (200), ema_regime (500), atr_period (14), atr_sma (50), atr_mult_long (1.0), atr_mult_short (1.5), pullback_tol_pct (0.1), max_wait_bars (50)
- Champs:
- long_signal, short_signal, ema_fast, ema_slow, ema_regime, atr, wait_long, wait_short
YAML
leaf:
lhs: { indicator: ema_pullback, field: long_signal }
op: eq
rhs: { value: 1 }
dir: longStructure de marché (BOS / CHoCH)
market_structureDétecte les pivots et émet un Break of Structure ou un Change of Character à chaque cassure de pivot. Le champ `state` porte le régime courant, ce qui te permet de l'utiliser comme filtre de tendance avec état.
- Paramètres:
- swing_length (50)
- Champs:
- state, bos_signal, choch_signal, pivot_high, pivot_low
YAML
leaf:
lhs: { indicator: market_structure, swing_lookback: 5, field: bos_signal }
op: eq
rhs: { value: 1 }
dir: longOrder block
order_blockDernière bougie de couleur opposée avant un Break of Structure. Le bloc reste armé jusqu'à ce que le prix le retest (`bull_retest`) ou le balaye (`bull_mitigated`).
- Paramètres:
- swing_length (10)
- Champs:
- bull_top, bull_bottom, bear_top, bear_bottom, bull_signal, bear_signal
YAML
leaf:
lhs: { indicator: order_block, swing_lookback: 5, field: bull_retest }
op: eq
rhs: { value: 1 }
dir: longFair Value Gap (FVG)
fair_value_gapDéséquilibre sur trois bougies : un écart entre la mèche de la bougie[n-2] et celle de la bougie[n]. Suit la zone jusqu'à ce que le prix la comble ; `bull_signal` se déclenche à la formation, `bull_filled` quand le gap est refermé.
- Paramètres:
- min_gap_pct (0)
- Champs:
- bull_top, bull_bottom, bear_top, bear_bottom, bull_signal, bear_signal
YAML
leaf:
lhs: { indicator: fair_value_gap, min_gap_pct: 0.1, field: bull_signal }
op: eq
rhs: { value: 1 }
dir: longEqual highs / lows
equal_highs_lowsDétecteur de pools de liquidité. Marque un niveau quand des plus-hauts (ou plus-bas) consécutifs se situent dans une tolérance `tolerance_pct` l'un de l'autre. `eqh_swept` se déclenche la bougie où le niveau est cassé — déclencheur classique de retournement sur chasse aux stops.
- Paramètres:
- swing_length (3), threshold (0.1), atr_period (200)
- Champs:
- eqh_level, eql_level, eqh_signal, eql_signal
YAML
leaf:
lhs: { indicator: equal_highs_lows, lookback: 10, field: eqh_swept }
op: eq
rhs: { value: 1 }
dir: shortNiveaux de période précédente (PDH / PDL / PWH / PWL …)
prior_period_levelsOpen / high / low / close du jour, de la semaine et du mois précédents. Calculés à partir du timestamp de la bougie — sans paramètre. Utiles pour les trades de cassure de période précédente et de retour à la clôture précédente.
- Paramètres:
- none
- Champs:
- pdh, pdl, pwh, pwl, pmh, pml
YAML
leaf:
lhs: { bar: close }
op: gt
rhs: { indicator: prior_period_levels, field: pdh }
dir: longMulti-unités de temps
Ajoute `timeframe: '4h'` à n'importe quelle spec d'indicateur pour le calculer sur une unité de temps supérieure et rediffuser la valeur sur les bougies de base de ta stratégie. Le moteur gère le ré-échantillonnage — tu continues d'écrire des règles sur les bougies de ton intervalle de base.
Exemple
leaf:
lhs: { indicator: rsi, period: 14, timeframe: '4h' }
op: lt
rhs: { value: 35 }
dir: longWarmup et gestion des NaN
Les indicateurs émettent NaN tant qu'ils n'ont pas assez de bougies pour être honnêtes. Un leaf porteur de NaN retourne False — il n'erreur pas, il s'abstient. Donc des stratégies neuves peuvent rester inactives pendant les N premières bougies d'un backtest ; c'est normal.