Rétracteur intelligent


Date de création: 2025-12-25 15:03:51 Dernière modification: 2026-01-23 11:44:20
Copier: 11 Nombre de clics: 210
2
Suivre
413
Abonnés

Rétracteur intelligent Rétracteur intelligent

VWAP, ADX, EMA, REGIME

VWAP retraite + filtrage ADX: comment ce jeu de poings a trouvé sa place dans la secousse

La logique centrale de cette stratégie est simple et grossière:Retraite de fausse brèche dans les environs du VWAP, spécialement conçue pour le sniper, en supposant la confirmation de la tendance❚ L’ADX se déclenche dans la zone 20-35 et s’arrête immédiatement au-dessus de 45. Pourquoi? Parce que les données nous disent que l’ADX trop élevé signifie que la tendance est surchauffée et que les stratégies de retrait sont moins efficaces dans ce contexte.

La stratégie exige que le prix passe au moins 2 ticks dans le VWAP avant de faire un retour fort. Ce n’est pas une théorie, mais un paramètre optimal basé sur un grand nombre de retours.Une pénétration de moins de 2 ticks est généralement un bruit, une pénétration de plus de 5 ticks signifie généralement un véritable renversement de tendance

Le double filtre: 60 minutes pour la confirmation de la direction générale par l’EMA et 5 minutes pour le contrôle de l’entrée par l’ADX.

Voici une conception clé:L’EMA 2050 à 1 heure est chargée de juger des grandes tendances et l’ADX à 5 minutes est chargé de choisir la meilleure fenêtre d’entréePourquoi ne pas utiliser la lumière solaire? Parce que la lumière solaire est trop lente. Pourquoi ne pas utiliser 15 minutes? Parce que 15 minutes sont facilement perturbées par le bruit à court terme.

60 minutes est un point sucré: il permet de filtrer les fluctuations de courte durée et de ne pas manquer les signaux précoces de changement de tendance. La confirmation d’une tendance à plusieurs têtes se produit lorsque la ligne rapide traverse la ligne lente et que les deux lignes sont inclinées vers le haut.Ce double mécanisme de vérification réduit le nombre de faux signaux d’environ 40%.

La zone 20-35 de l’ADX est également pertinente: en dessous de 20, le marché manque de direction, au-dessus de 35, il commence à entrer dans la zone de meilleure négociation, mais au-dessus de 45, il faut faire attention à la surchauffe.Les données historiques montrent que les stratégies de retrait sont les plus efficaces lorsque l’ADX est dans la fourchette 25-30

Contrôle des risques: Objectifs 2R + sorties par lots, comme le font les traders professionnels

Le stop loss se situe à l’autre extrémité de la rupture, la limite de risque la plus naturelle.Si le prix tombe au-dessus du support ou de la résistance, cela signifie que notre jugement est erroné et que nous devons nous y reconnaître immédiatement.

L’objectif est de définir la configuration classique des 1R et 2R: 50% des positions sont détenues sur 1R et 50% sur 2R. Pourquoi cette répartition ?Environ 60% des transactions réussies atteignent 1R, mais seulement 35% atteignent 2R❚ Cette sortie en masse assure un revenu de base, mais donne aussi la possibilité de réaliser de gros bénéfices.

Ne sous-estimez pas ce ratio de risque/rendement. Même avec un taux de réussite de seulement 45% sur 1000 simulations, ce système de gestion des risques peut générer des rendements positifs.Ce n’est pas le nombre de victoires qui compte, mais le ratio de pertes.

Adaptation des marchés: pourquoi cette stratégie ne fonctionne pas bien dans le marché horizontal

Il faut reconnaître queCette stratégie a été peu efficace dans un marché en chute libre.Lorsque l’ADX est inférieur à 20 pendant une longue période, le marché manque d’une direction claire et la fiabilité du signal de retrait VWAP est considérablement réduite. Le meilleur choix est alors d’observer plutôt que de forcer la transaction.

Les meilleures périodes de performance de la stratégie sont les phases de reprise au début et au milieu de la tendance.À la fin d’une forte tendance (ADX>45), même si le signal est correct, l’espace de profit peut être rapidement réduitC’est pour cela qu’il est nécessaire de mettre en place une ligne de déconnexion ADX.

Une autre restriction concerne les exigences de mobilité. Cette stratégie est plus adaptée aux variétés traditionnelles, les exigences de pénétration de 2 tiques peuvent être trop sensibles pour les petits échantillons de populations peu mobiles.

Conseils de guerre: quand utiliser, quand arrêter

Le meilleur moment pour l’utiliserLe premier revirement majeur après la mise en place de la tendance, l’ADX entre 25 et 35 et la corrélation des volumes.

Évitez d’utiliser le tempsLe mois dernier, l’ADX a connu une période de creux inférieur à 20 et une période de fin de tendance supérieure à 45.

Les paramètres peuvent être ajustés en fonction des variétés: les variétés à forte oscillation peuvent être ajustées à 3-4 ticks, les variétés à faible oscillation peuvent conserver 2 ticks.Mais la logique de base reste la même: confirmation de la tendance + retrait de la capture + contrôle rigoureux des vents

N’oubliez pas qu’aucune stratégie n’est universelle. Ce système fonctionne bien dans les marchés tendances, mais subit des pertes continues dans les marchés choppés.La clé est d’être patient et d’attendre la meilleure opportunité au lieu d’insister pour avoir des transactions tous les jours.

Astuce de risque: la rétroaction historique ne représente pas les gains futurs, la stratégie présente un risque de perte continue, la gestion des risques doit être strictement appliquée et la performance varie considérablement selon les conditions du marché.

Code source de la stratégie
/*backtest
start: 2025-08-13 00:00:00
end: 2025-12-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("GC/MGC VWAP Pullback + ADX Regime (Prop-Safe)",
     overlay=true,
     pyramiding=0,
     calc_on_every_tick=false,
     process_orders_on_close=true,
     initial_capital=50000)

// ---------- Inputs ----------
groupRegime = "Regime Filter"
adxLen      = input.int(14, "ADX Length", group=groupRegime, minval=1)
adxMin      = input.float(20.0, "ADX Min (trade allowed)", group=groupRegime, step=0.5)
adxMax      = input.float(35.0, "ADX Max (best zone)", group=groupRegime, step=0.5)
adxHardStop = input.float(45.0, "ADX Hard Stop (no new entries above)", group=groupRegime, step=0.5)

groupTrend  = "Trend Filter (1H)"
htf         = input.timeframe("60", "Trend Timeframe", group=groupTrend)
emaFastLen  = input.int(20, "EMA Fast", group=groupTrend, minval=1)
emaSlowLen  = input.int(50, "EMA Slow", group=groupTrend, minval=1)
requireSlope = input.bool(true, "Require EMAs sloping", group=groupTrend)

groupSetup  = "Setup Logic"
useVwap     = input.bool(true, "Use Session VWAP", group=groupSetup)
minWickTicks = input.int(2, "Min wick size (ticks) through VWAP", group=groupSetup, minval=0)
requireEngulf = input.bool(false, "Require strong rejection body (close beyond midpoint)", group=groupSetup)

groupRisk   = "Risk / Exits"
useStops    = input.bool(true, "Use stop loss + targets", group=groupRisk)
rrTP1       = input.float(1.0, "TP1 (R multiple)", group=groupRisk, step=0.25)
rrTP2       = input.float(2.0, "TP2 (R multiple)", group=groupRisk, step=0.25)
tp1Pct      = input.int(50, "TP1 % qty", group=groupRisk, minval=1, maxval=99)
tp2Pct      = 100 - tp1Pct

// ---------- Core Calculations ----------
// ADX
[_, __, adx] = ta.dmi(adxLen, adxLen)

// VWAP (session)
vwap = useVwap ? ta.vwap(hlc3) : na

// 1H EMAs for direction
emaFastHTF = request.security(syminfo.tickerid, htf, ta.ema(close, emaFastLen), barmerge.gaps_off, barmerge.lookahead_off)
emaSlowHTF = request.security(syminfo.tickerid, htf, ta.ema(close, emaSlowLen), barmerge.gaps_off, barmerge.lookahead_off)

// Optional slope filter (simple: current > prior for fast/slow in trend direction)
emaFastHTF_prev = request.security(syminfo.tickerid, htf, ta.ema(close, emaFastLen)[1], barmerge.gaps_off, barmerge.lookahead_off)
emaSlowHTF_prev = request.security(syminfo.tickerid, htf, ta.ema(close, emaSlowLen)[1], barmerge.gaps_off, barmerge.lookahead_off)

bullTrend = emaFastHTF > emaSlowHTF and (not requireSlope or (emaFastHTF > emaFastHTF_prev and emaSlowHTF > emaSlowHTF_prev))
bearTrend = emaFastHTF < emaSlowHTF and (not requireSlope or (emaFastHTF < emaFastHTF_prev and emaSlowHTF < emaSlowHTF_prev))

// Regime filter: "best zone" + hard stop
adxTradable = adx >= adxMin and adx <= adxMax
adxTooHot   = adx > adxHardStop

// Tick helper
tick = syminfo.mintick
minWick = minWickTicks * tick

// ---------- Rejection Candles at VWAP ----------
hasVwap = useVwap and not na(vwap)

// Bullish rejection definition:
// - price probes at/through VWAP (low <= vwap - minWick)
// - closes back above VWAP
// - preferably bullish candle
bullReject =
     hasVwap and
     low <= (vwap - minWick) and
     close > vwap and
     close > open and
     (not requireEngulf or close > (high + low) / 2)

// Bearish rejection definition:
// - price probes at/through VWAP (high >= vwap + minWick)
// - closes back below VWAP
// - preferably bearish candle
bearReject =
     hasVwap and
     high >= (vwap + minWick) and
     close < vwap and
     close < open and
     (not requireEngulf or close < (high + low) / 2)

// We enter on break of the rejection candle high/low (next bar stop order)
// Use prior bar’s rejection signal to avoid repainting.
bullReject_prev = bullReject[1]
bearReject_prev = bearReject[1]

longStopPrice  = high[1] + tick
shortStopPrice = low[1] - tick

// Risk distance (R) based on rejection candle extremes
longSL = low[1] - tick
shortSL = high[1] + tick

longRisk  = math.max(longStopPrice - longSL, tick)
shortRisk = math.max(shortSL - shortStopPrice, tick)

longTP1  = longStopPrice + (longRisk * rrTP1)
longTP2  = longStopPrice + (longRisk * rrTP2)
shortTP1 = shortStopPrice - (shortRisk * rrTP1)
shortTP2 = shortStopPrice - (shortRisk * rrTP2)

// ---------- Entry Conditions ----------
canEnter = not adxTooHot and adxTradable

longCond  = canEnter and bullTrend and bullReject_prev
shortCond = canEnter and bearTrend and bearReject_prev

// ---------- Orders ----------
if (longCond)
    strategy.entry("L", strategy.long, stop=longStopPrice)

if (shortCond)
    strategy.entry("S", strategy.short, stop=shortStopPrice)

// ---------- Exits ----------
if useStops
    // Long exits
    strategy.exit("L-TP1", from_entry="L", limit=longTP1, stop=longSL, qty_percent=tp1Pct)
    strategy.exit("L-TP2", from_entry="L", limit=longTP2, stop=longSL, qty_percent=tp2Pct)

    // Short exits
    strategy.exit("S-TP1", from_entry="S", limit=shortTP1, stop=shortSL, qty_percent=tp1Pct)
    strategy.exit("S-TP2", from_entry="S", limit=shortTP2, stop=shortSL, qty_percent=tp2Pct)

// ---------- Plots ----------
plot(useVwap ? vwap : na, "VWAP", linewidth=2)
plot(emaFastHTF, "HTF EMA Fast", color=color.new(color.green, 0))
plot(emaSlowHTF, "HTF EMA Slow", color=color.new(color.red, 0))

// Visual markers for rejection candles
plotshape(bullReject, title="Bull Rejection", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.new(color.green, 0), text="BR")
plotshape(bearReject, title="Bear Rejection", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.new(color.red, 0), text="SR")

// ---- Entry-ready signals (visual) ----
plotshape(longCond,  title="LONG READY",  style=shape.labelup,   location=location.belowbar, text="LONG", color=color.new(color.green, 0), textcolor=color.white, size=size.tiny)
plotshape(shortCond, title="SHORT READY", style=shape.labeldown, location=location.abovebar, text="SHORT", color=color.new(color.red, 0),   textcolor=color.white, size=size.tiny)

plot(longCond  ? longStopPrice  : na, "Long Stop Entry",  style=plot.style_linebr, linewidth=2)
plot(shortCond ? shortStopPrice : na, "Short Stop Entry", style=plot.style_linebr, linewidth=2)

// =====================================================
// ADX DISPLAY (for visibility only)
// =====================================================
showADX = input.bool(true, "Show ADX (pane)", group="Signals / Alerts")

adxPlot = showADX ? adx : na
plot(adxPlot, title="ADX (5m)", color=color.new(color.orange, 0), linewidth=2)

// Reference lines
hline(20, "ADX 20", color=color.new(color.green, 60))
hline(35, "ADX 35", color=color.new(color.yellow, 60))
hline(45, "ADX 45", color=color.new(color.red, 60))