Estratégia de confirmação múltipla de varredura de liquidez

LIQUIDITY VOLUME EMA Pivot
Data de criação: 2025-12-17 15:33:28 última modificação: 2025-12-17 15:33:28
cópia: 10 Cliques: 288
2
focar em
421
Seguidores

Estratégia de confirmação múltipla de varredura de liquidez Estratégia de confirmação múltipla de varredura de liquidez

A limpeza de liquidez + confirmação de transações é o verdadeiro pensamento institucional

Deixe de acreditar em um único indicador. Esta estratégia combina perfeitamente as três dimensões de limpeza de fluidez, anomalias de volume de tráfego, tendências EMA, 11 ciclos de oscilação para identificar a resistência de suporte crítico, 31 ciclos de filtragem de tendências EMA. O retrospectivo mostra que o mecanismo de confirmação múltipla reduz efetivamente a interferência de falsas rupturas, mas ao custo de uma queda de cerca de 30% na frequência do sinal.

Filtragem ampliada para rejeitar sinais de baixa qualidade

O maior problema da estratégia de limpeza de fluidez normal é o ruído demais. Usando 1x a linha média de transação de 11 ciclos como filtro, apenas a quebra de volume desencadeia o sinal. Os dados comprovam que, após a confirmação de transação, a taxa de vitória aumenta em 15-20%, mas perde parte da quebra efetiva da classe leve.

“O sinal de reversão é imediato, não há guerra”

O projeto mais acentuado aqui é o seguinte: liquidar imediatamente a posição assim que surgir um sinal de limpeza de liquidez inverso. Esta lógica de “invasão e retorno” é mais sensível do que o stop loss tradicional e pode ser retirada logo no início da reversão da tendência.

A EMA rompe com a retirada obrigatória e a tendência é a favor

A EMA de 31 ciclos é usada não apenas como um filtro de entrada, mas também como a última linha de defesa para forçar a saída. O desenho do equilíbrio incondicional quando o preço despenca da EMA reflete a idéia central de que “a tendência é o rei”.

Mecanismos de bloqueio de sinais anti-duplicação para evitar transações excessivas

O design do buy_lock e sell_lock no código é muito inteligente. Uma vez que o sinal de limpeza é acionado, ele bloqueia o sinal na mesma direção até que o preço volte à posição-chave. Isso evita a abertura de posições repetidas na mesma onda de mercado, reduzindo os custos de negociação e a exposição ao risco.

Cenários de aplicação: Mercado com tendências claras e flutuante

Esta estratégia é mais adequada para ambientes de mercado com tendências claras, mas com grande volatilidade. Performance excelente em ascensões ou quedas unilaterais, mas com frequência ocorre perda em oscilações de disco lateral. Recomenda-se o uso em níveis de linha do dia, o ruído em níveis de minuto é muito grande.

DISCUSSO: O histórico não representa o futuro

Há risco de perdas contínuas na estratégia, especialmente quando a estrutura do mercado muda. A identificação de oscilação do ciclo 11 pode falhar em alguns cenários extremos, e o ciclo 31 de EMA está atrasado em uma reversão rápida. Recomenda-se o controle rigoroso de posições individuais não superiores a 10% do capital total e o ajuste dos parâmetros de acordo com a situação do mercado.

Código-fonte da estratégia
/*backtest
start: 2024-12-17 00:00:00
end: 2025-12-15 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy(
     "Liquidity Sweep + Volume + OB + EMA Cross Exit (Fixed)",
     overlay=true,
     max_boxes_count=500,
     max_lines_count=500,
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=10,
     pyramiding=1)

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// INPUTS
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
len = input.int(11, "Swing Length", minval=1)

volLen  = input.int(11, "Volume MA Length", group="Volume Filter")
volMult = input.float(1, "Volume Multiplier", step=0.1, group="Volume Filter")

emaLength  = input.int(31, "EMA Length", minval=1, group="EMA Filter")
extendBoxes = input.bool(true, "Extend Boxes")

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// EMA
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
emaVal = ta.ema(close, emaLength)
plot(emaVal, title="EMA", color=color.orange)


//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// COLORS
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
buyCol   = color.lime
sellCol  = color.red

liqBuyCol  = color.new(color.lime, 85)
liqSellCol = color.new(color.red, 85)

obBuyCol  = color.new(color.green, 75)
obSellCol = color.new(color.maroon, 75)

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// VOLUME FILTER
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
volMA   = ta.sma(volume, volLen)
highVol = volume > volMA * volMult

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// PIVOTS
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ph = ta.pivothigh(len, len)
pl = ta.pivotlow(len, len)

var float lastPH = na
var float lastPL = na

if not na(ph)
    lastPH := ph
if not na(pl)
    lastPL := pl

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// LIQUIDITY SWEEPS
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
sellSweep = not na(lastPH) and high > lastPH and close < lastPH and highVol
buySweep  = not na(lastPL) and low  < lastPL and close > lastPL and highVol

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ANTI-SPAM LOCK
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
var bool buyLock  = false
var bool sellLock = false

if buySweep
    buyLock := true
else if not na(lastPL) and close < lastPL
    buyLock := false

if sellSweep
    sellLock := true
else if not na(lastPH) and close > lastPH
    sellLock := false

buySignal  = buySweep  and not buyLock[1]
sellSignal = sellSweep and not sellLock[1]

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// TRADE STATE
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
var float entryPrice = na
var int   entryBar   = na
var int   entryDir   = 0   // 1 = BUY, -1 = SELL
var bool  tradeAlive = false

//━━━━━━━━ ENTRY ━━━━━━━━━━━━━━━━━━━
if buySignal and not tradeAlive
    strategy.entry("BUY", strategy.long)
    entryPrice := close
    entryBar   := bar_index
    entryDir   := 1
    tradeAlive := true

if sellSignal and not tradeAlive
    strategy.entry("SELL", strategy.short)
    entryPrice := close
    entryBar   := bar_index
    entryDir   := -1
    tradeAlive := true

barsFromEntry = tradeAlive ? bar_index - entryBar : na

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// EXIT LOGIC
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
exitBuyAfter3  = tradeAlive and entryDir == 1  and barsFromEntry >= 3 and close < entryPrice
exitSellAfter3 = tradeAlive and entryDir == -1 and barsFromEntry >= 3 and close > entryPrice

exitOppBuy  = tradeAlive and entryDir == 1  and sellSignal
exitOppSell = tradeAlive and entryDir == -1 and buySignal

// EMA downside cross exit
emaCrossDown = tradeAlive and ta.crossunder(close, emaVal)
exitEMA      = emaCrossDown

exitSignal = exitBuyAfter3 or exitSellAfter3 or exitOppBuy or exitOppSell or exitEMA

if exitSignal
    if entryDir == 1
        strategy.close("BUY")
    if entryDir == -1
        strategy.close("SELL")

    tradeAlive := false
    entryPrice := na
    entryBar   := na
    entryDir   := 0

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// PLOTS
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
plotshape(buySignal,  "BUY",  shape.labelup,   location.belowbar, color=buyCol,  text="BUY",  textcolor=color.black)
plotshape(sellSignal, "SELL", shape.labeldown, location.abovebar, color=sellCol, text="SELL", textcolor=color.white)

plotshape(exitBuyAfter3,  "EXIT BUY 3+",  shape.xcross, location.abovebar, color=color.orange)
plotshape(exitSellAfter3, "EXIT SELL 3+", shape.xcross, location.belowbar, color=color.orange)

plotshape(exitOppBuy,  "EXIT BUY OPP",  shape.flag, location.abovebar, color=color.yellow)
plotshape(exitOppSell, "EXIT SELL OPP", shape.flag, location.belowbar, color=color.yellow)

plotshape(exitEMA and entryDir == 1, "EXIT EMA BUY",  shape.triangledown, location.abovebar, color=color.blue)
plotshape(exitEMA and entryDir == -1, "EXIT EMA SELL", shape.triangleup,  location.belowbar, color=color.blue)

//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ALERTS
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
alertcondition(buySignal,  "BUY Alert",  "Liquidity Sweep BUY")
alertcondition(sellSignal, "SELL Alert", "Liquidity Sweep SELL")
alertcondition(exitEMA,title="EXIT EMA CROSS",message="Price crossed below EMA")