coletor de retração inteligente


Data de criação: 2025-12-25 15:03:51 última modificação: 2026-01-23 11:44:20
cópia: 11 Cliques: 210
2
focar em
413
Seguidores

coletor de retração inteligente coletor de retração inteligente

VWAP, ADX, EMA, REGIME

Retirada do VWAP + filtragem do sistema ADX: como este conjunto de punhos consegue encontrar a direção em meio a um tremor

A lógica central desta estratégia é simples e grosseira:Retirada de falsa brecha em torno de VWAP, com o objetivo de apontar para uma tendência confirmadaPorque os dados nos dizem que um ADX muito alto significa que a tendência está superaquecida, e as estratégias de retração caem rapidamente nesse ambiente.

A estratégia exige que o preço atravesse o VWAP por pelo menos 2 ticks e depois retroceda fortemente. Isso não é ficção, mas é baseado em um grande número de parâmetros de otimização.Menos de 2 ticks de penetração tendem a ser ruídos, e mais de 5 ticks de penetração geralmente significam uma verdadeira reversão de tendência

Mecanismo de dupla filtragem: 60 minutos EMA confirma a direção geral, 5 minutos ADX controle de entrada de tempo

Aqui está um projeto-chave:A EMA 2050 em nível de 1 hora é responsável por julgar as grandes tendências, e o ADX de 5 minutos é responsável por escolher a melhor janela de entradaPorque é que não usam luz solar? Porque a luz solar é muito lenta. Porque é que não usam 15 minutos? Porque 15 minutos são facilmente perturbados por ruídos de curta duração.

60 minutos é um ponto doce: pode filtrar oscilações de curto prazo e não perder os sinais iniciais de mudança de tendência. A confirmação de tendência múltipla ocorre quando a linha rápida atravessa a linha lenta e ambas as linhas estão inclinadas para cima.O mecanismo de dupla verificação reduz os sinais falsos em cerca de 40%.

A definição de 20-35 no ADX também é importante: abaixo de 20 indica falta de direção do mercado, acima de 35 começa a entrar na melhor zona de negociação, mas acima de 45 é preciso ter cuidado com a tendência de superaquecimento.Os dados históricos mostram que a estratégia de retração é mais bem sucedida quando o ADX está na faixa 25-30

Controle de Risco: Objetivos 2R + Sair em massa, como fazem os profissionais

O ponto de paralisação fica no outro extremo da barreira de ruptura, que é a fronteira mais natural de risco.Se o preço derrubar o suporte ou se a resistência for quebrada, então o nosso julgamento está errado e temos que admitir isso imediatamente.

O objetivo é definir a configuração clássica de 1R e 2R: 50% de posições em 1R e 50% restantes em 2R. Por que essa distribuição?Cerca de 60% dos negócios bem sucedidos atingem 1R, mas apenas 35% atingem 2R│ │ │ │ │ │ │ │ │ │

Não subestime a relação de risco/retorno. Mesmo com uma taxa de sucesso de 45% em 1000 simulações, o sistema de gestão de risco ainda consegue obter um lucro positivo.O que importa não é o número de vitórias, mas a proporção de perdas.

Adaptabilidade do mercado: por que essa estratégia não funciona no mercado horizontal

É preciso reconhecer que não há nada de errado com isso.Esta estratégia não funcionou em mercados de baixa volatilidade.Quando o ADX está abaixo de 20 por um longo período, o mercado não tem uma direção clara e a confiabilidade do sinal de retirada do VWAP diminui drasticamente. A melhor opção é esperar, não forçar a negociação.

O melhor período de desempenho da estratégia é o início da tendência e a fase de correção no meio da tendência.No final de uma forte tendência (ADX>45), o espaço de ganho será rapidamente reduzido, mesmo que o sinal esteja corretoÉ por isso que o ADX tem uma linha dura.

Outra restrição é a exigência de mobilidade. Esta estratégia é mais adequada para as raças principais, pois a exigência de penetração de 2 ticks pode ser muito sensível para os pequenos indicadores de população com pouca mobilidade.

Recomendações de combate: quando usar e quando parar

O melhor momento para usarA primeira retracção significativa após a tendência estabelecida, o ADX ficou na faixa de 25-35, acompanhado por volume de transações.

Evitar o uso do tempoO ADX ficou abaixo de 20 em períodos de baixa horizontal, e o ADX ficou acima de 45 no final da tendência.

Os parâmetros podem ser ajustados de acordo com a variedade: variedades com alta taxa de flutuação podem ajustar a penetração mínima para 3-4 ticks, variedades com baixa taxa de flutuação podem manter 2 ticks.Mas a lógica central não muda: confirmação de tendência + retirada da captura + controle rigoroso do vento

Lembre-se de que nenhuma estratégia é universal. Este sistema funciona muito bem em mercados de tendência, mas sofre pequenos prejuízos em mercados de choppy.A chave é ter paciência para esperar a melhor oportunidade, em vez de insistir em ter transações todos os dias.

Dica de Risco: A retrospectiva histórica não é indicativa de lucro futuro, há risco de perdas contínuas na estratégia, a gestão de risco precisa ser rigorosamente executada e a diferença de desempenho em diferentes condições de mercado é significativa.

Código-fonte da estratégia
/*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))