FOREX SIGNAL ↗ Ouvrir l'app

VWAP Pullback H1 — retest du VWAP London en tendance NY

Stratégie trend-following candidate ancrée sur la session VWAP. Anchor à 08:00 UTC (London open), évaluation tendance à 11:00 UTC, entry sur pullback à VWAP pendant la fenêtre NY 12-16 UTC. Conçue comme miroir trend-following de LonBO #12 (qui est breakout) : même contrainte temporelle forte, niveau de référence structurel différent (VWAP vs Asian range).

🛑🛑 STATUT au 2026-05-12 : REJETÉ OOS — pas d'EA livré. Backtest 8 ans 4 mois Dukascopy : 1091 trades, expectancy IS −0.002 R / OOS −0.104 R (clairement sous gate +0.20), hit rate 10.1% (très sous BE 33.3%), max DD OOS −36.9 R (au-dessus gate 20). 3/4 gates échouent. Verdict détaillé : mt5/AUDIT_2026-05-12_vwap_pullback.md.

Particularité : edge disparu post-2019. Seule année positive sur 9 (2019 +0.118 R), puis 7 années consécutives négatives. Décomposition par heure trigger révèle 12h OOS catastrophique (−0.266 R, sur-arbitré) mais 15-16h marginalement positifs (+0.19, +0.14, sample petit). Variante "v2 trigger 15-16h only" = cherry-picking post-hoc, refusée par méthodologie.

Aucun EA MQL5 livré. La fiche reste comme référence méthodologique + point de départ pour d'éventuelles variantes v2 (fenêtre 15-16h ex ante, filtre slope magnitude, anchor 00:00 UTC). Chaque variante = nouveau cycle complet.

🛑 STATUT ORIGINEL : CANDIDATE — backtest gate à passer avant tout EA. Cette fiche décrit une stratégie candidate au registry Hermes V2+ (hors scope V1.5 strict qui fixe 4 stratégies actives). Aucune ligne d'EA MQL5 ne sera écrite avant que le backtest Dukascopy 2018-2026 passe les 4 gates OOS : expectancy ≥ +0.20 R, max DD < 20 R, n ≥ 30 trades, ratio OOS/IS ≥ 0.6. Si rejet → archivage comme les 5 précédentes (script de backtest conservé, EA non livré).

Caveat forex : VWAP utilise le tick volume Dukascopy (nombre de ticks par bar), pas du volume réel — le forex étant OTC décentralisé n'a pas de volume consolidé. Tick volume est un proxy reconnu (corrélation ~0.7-0.9 avec volume CME futures sur EUR/USD) mais introduit du bruit. Si la stratégie passe les gates en backtest, validation cross-broker requise avant EA.

Pourquoi VWAP après 5 rejets

Bilan des 5 candidates testées en mai 2026 (toutes rejetées OOS) :

Strat TF Type Contexte structurel Verdict
BCMR M5 Mean-rev aucun (signal indicateur)
RSI Learn M15 Trend+momentum aucun ❌ broken
Alligator Learn M15 Trend aucun
MACD Zone Cross H1 Momentum cross aucun
NY Reversal H1 Reversal session session NY first H1 ❌ (gate sous-edge)

LonBO #12 (seule validée, +0.342 R OOS) repose sur :

VWAP Pullback applique le même principe avec un niveau de référence dynamique (VWAP session) au lieu d'un range statique (Asian high/low) :

Différenciation méthodologique vs LonBO :

Mécanique

Bars H1 EUR/USD, timestamps UTC, avec colonne tick_volume.

Notation : "bar à HH:00 UTC" = bar qui ouvre à HH:00 et ferme à HH+1:00.

1. Anchored VWAP (reset quotidien à 08:00 UTC) :
   - À partir du bar 08:00 UTC, cumul :
     typical_price_i = (high_i + low_i + close_i) / 3
     cum_pv_i  = Σ (typical_price_k × volume_k) pour k ∈ [08:00, i]
     cum_vol_i = Σ volume_k                     pour k ∈ [08:00, i]
     VWAP_i    = cum_pv_i / cum_vol_i
   - Au bar 08:00 lui-même : VWAP_08 = typical_price_08
   - VWAP recalculé chaque jour, indépendamment des jours précédents.

2. Évaluation tendance à la clôture du bar 11:00 UTC :
   - VWAP_11 = VWAP calculé sur les 4 bars 08, 09, 10, 11
   - close_11 = close du bar 11:00
   - VWAP_slope = VWAP_11 - VWAP_08 (déviation sur la fenêtre 4 bars)
   - Trend UP   ssi : close_11 > VWAP_11 AND VWAP_slope > 0
   - Trend DOWN ssi : close_11 < VWAP_11 AND VWAP_slope < 0
   - Sinon : SKIP (pas de trend clair)

3. Fenêtre entry : bars 12, 13, 14, 15, 16 UTC (5 bars H1 max)
   Trigger évalué à la clôture de chacun de ces bars, dans l'ordre.

4. Trigger pullback (trend UP) :
   - bar.low ≤ VWAP_at_bar    (le prix a tagué le VWAP)
   - bar.close > VWAP_at_bar  (la bougie a clôturé au-dessus)
   - bar.close > bar.open     (bougie haussière = continuation)
   → Entry LONG au close du bar trigger
   Symétrique pour trend DOWN → Entry SHORT.

   Premier trigger valide pris dans la journée. Les suivants ignorés.

5. SL / TP ATR-based :
   - ATR(14) au bar trigger
   - LONG  : SL = entry - 1.5 × ATR, TP = entry + 3.0 × ATR
   - SHORT : SL = entry + 1.5 × ATR, TP = entry - 3.0 × ATR
   - RR théorique fixe = 2.0

6. Filtre coût (live uniquement) :
   - Skip si spread courant > 30 points (3 pips 5-digit, aligné LonBO)

7. Cooldown : 1 trade max / jour calendaire UTC. Si trigger validé à 12h
   pour LONG, aucune ré-entry possible à 13h/14h/etc le même jour.

8. Timeout : exit forcé à clôture du bar 21:00 UTC si ni SL ni TP touché.

Pourquoi anchor 08:00 UTC

Pourquoi VWAP_slope = VWAP_11 - VWAP_08

Pourquoi fenêtre entry 12-16 UTC

Pourquoi trigger = tag + close-back + bullish-bar

3 conditions pour filtrer les faux retests :

  1. bar.low ≤ VWAP : le prix est vraiment allé chercher le VWAP (pas juste une approche distale)
  2. bar.close > VWAP : la mèche basse a été rejetée, le bar referme au-dessus = invalidation du pullback
  3. bar.close > bar.open : bougie de continuation, pas un doji ou un rejet faible

Les trois ensemble = signal de "pullback complete + reprise trend" classique. Conceptuellement proche du "hammer at support" mais avec le VWAP comme support dynamique.

Pourquoi RR=2.0 et pas 2.5 (comme LonBO)

Pourquoi SL/TP en ATR multiples (pas niveaux VWAP)

Paramètres baseline

Paramètre Valeur Justification
AnchorUTC 8 London cash open
TrendEvalUTC 11 Close du 11:00 bar = 4 bars cumulés
EntryWindowStartUTC 12 Début NY transition
EntryWindowEndUTC 16 Fin fenêtre, avant London close drift
ATRPeriod 14 Wilder standard
SLATRMult 1.5 ~1 ATR au-dessus du noise typique H1
TPATRMult 3.0 RR théorique 2.0
TimeoutH 21 Exit forcé 21:00 UTC (mi-NY)
MaxSpreadPoints 30 3 pips 5-digit (aligné LonBO, live uniquement)
MagicNumber 90909090 Identifiant EA (TBD si livraison)

Aucune optimisation post-backtest. Si l'edge n'apparaît pas avec ces paramètres, l'hypothèse de "retest VWAP institutionnel sur EUR/USD H1" est invalidée — pas qu'il faut tuner.

Fréquence attendue

Sur 8 ans 4 mois (2018-01 → 2026-05) ≈ 2100 jours ouvrés, on attend ~800-1300 signaux. Largement au-dessus du gate n ≥ 30 trades OOS.

Gates OOS (méthodologie BCMR, non négociables)

# Gate Cible Action si raté
1 OOS expectancy ≥ +0.20 R / trade edge réel après random walk + frais rejet définitif
2 OOS max DD < 20 R gestion risque acceptable rejet (~10% capital à 0.5%/trade)
3 OOS n ≥ 30 trades significativité statistique rejet (sample trop petit)
4 Ratio OOS/IS expectancy ≥ 0.6 robustesse / pas d'effondrement OOS rejet (sur-fit IS)

Découpage IS/OOS : 2018-01-01 → 2023-12-31 = IS (6 ans), 2024-01-01 → 2026-05-11 = OOS (~2.4 ans), soit ~72/28.

Performance attendue (à confirmer)

Métrique Cible Acceptable Rejet
Hit rate à RR=2.0 ≥ 42% ≥ 33.3% (BE) < 30%
Expectancy R ≥ +0.35 ≥ +0.20 < +0.10
Profit factor ≥ 1.5 ≥ 1.2 < 1.0
Max DD OOS < 12 R < 20 R ≥ 25 R

Conditions favorables

Pièges connus

1. Tick volume ≠ volume réel

La principale incertitude méthodologique. Tick volume mesure l'activité (nb de transactions), pas la taille en lots. Corrélation ~0.7-0.9 avec volume CME futures mais variable selon broker. Risque : VWAP calculé sur tick volume ≠ VWAP "vrai" institutionnel → faux niveau de retest.

Mitigation v2 possible : recalcul cross-broker (IC Markets vs Dukascopy) avant promotion EA. Pas en v1.

2. Trend à 11:00 contredit par news 14:30

Le filtre tendance fixe son verdict à 11:00 UTC. À 14:30, une news US (NFP, CPI) peut inverser brutalement le trend. Un trigger pullback à 15:00 ou 16:00 prend alors à contre-trend post-news.

Mitigation v2 possible : skip si news rouge USD pendant la fenêtre 12-17 UTC. Pas en v1 (pas de filtre news).

3. VWAP plat = condition rare mais possible

Si London a été ranging (close_11 ≈ VWAP_11), le filtre rejette. C'est souhaité mais signifie ~40% des jours sont éliminés. Capital cumulé plus faible que LonBO (qui prend tous les jours qualifiés sans filtre tendance).

4. Bias direction (long vs short)

Décompo LONG/SHORT obligatoire dans le backtest. Si l'edge est concentré sur un côté, variante v2 LONG-only ou SHORT-only à tester séparément (comme NY Reversal a révélé SHORT seul a un edge marginal).

5. Conflit avec LonBO

Possible mais peu probable. Un breakout LonBO (close > asian_high) implique typiquement éloignement marqué du VWAP → pas de pullback trigger ce jour. Si conflict en live : priorité à LonBO (validée).

6. Premier trigger pris vs meilleur trigger

On prend le premier pullback valide du jour. Hindsight pourrait suggérer attendre le 2e/3e mais c'est du tuning post-hoc. La règle "premier trigger" est aligned avec LonBO ("premier breakout pris").

7. Volume = 0 ou anomalie

Sur certaines périodes (jours fériés), le tick volume Dukascopy peut être 0 sur des bars. Si cum_vol = 0 → VWAP indéfini → skip ce jour (géré explicitement dans le backtest).

Variantes envisagées (non implémentées en v1)

Variante Modification Rationale
Anchor 00:00 UTC VWAP daily standard Comparaison vs anchor London
Anchor 13:00 UTC VWAP NY only Si edge London faible
Fenêtre 12-20 UTC Plus large Plus de chances de trigger
Filtre slope magnitude ` VWAP_slope
Multi-TF D1 align Skip si D1 contre-trend Évite contre-trend D1
Trigger sans bullish bar 2 conditions au lieu de 3 Plus de trades
RR=1.5 ou 2.5 TP ajusté Ajustement risk-reward
LONG only ou SHORT only Selon bias EUR/USD Si décompo asymétrique
Filtre news rouge Skip ±30 min news USD Évite spike

Toutes attendent que la baseline passe le gate.

Couplage piliers A↔B↔C (CLAUDE.md root)

Pilier Fichier
A (docs) docs/strategies/trend/vwap-pullback.md (cette fiche)
C (spec) mt5/tests/test_vwap_pullback_spec.py
B (R&D) hermes/scripts/backtest_vwap_pullback.py
C (EA) mt5/VWAP_Pullback_v1.mq5 + includes — uniquement si gates OOS verts

Pas d'EA tant que le backtest n'a pas validé l'edge.

Liens