Máquina de captura de tendências multidimensionais


Data de criação: 2026-03-17 11:43:45 última modificação: 2026-03-17 11:43:45
cópia: 13 Cliques: 179
2
focar em
451
Seguidores

Máquina de captura de tendências multidimensionais Máquina de captura de tendências multidimensionais

EMA, ATR, MOMENTUM, EFFICIENCY, BREAKOUT

Esta não é uma estratégia comum de linha de equilíbrio, é uma máquina de captura de tendências multidimensionais.

Não se deixe enganar pela configuração superficial de 18/50/120 de três médias. O núcleo desta estratégia é um sistema de verificação de tendências em 8 dimensões independentes, cada uma com padrões numéricos claros.

O problema com a estratégia de linha média tradicional é que há muitos falsos sinais, o sistema eleva a taxa de sucesso de entrada a um novo patamar através de filtragem múltipla da eficiência do caminho (mínimo de 33%), da continuidade do impulso (aumento de mais de 57% na proporção de linhas K) e do estado de flutuação (aumento de mais de 95% no índice ATR).

Breakout em testes de qualidade: 0,15 vezes o ATR é um verdadeiro avanço

90% das rupturas no mercado são falsas. Esta estratégia estabelece que a intensidade da ruptura deve atingir 0,15 vezes o ATR, o que significa que a amplitude da ruptura deve exceder 15% da média de flutuação recente para ser considerada um sinal válido.

O mecanismo de retomada de retorno é mais sofisticado: exige uma profundidade de retorno de pelo menos 0,9 vezes o ATR a partir da linha rápida e, em seguida, uma intensidade de 0,15 vezes o ATR para a linha média. Este design filtra eficazmente as falsas rupturas em camadas superficiais e captura apenas os lançamentos de tendências realmente financiados.

2x Leverage + 2.8x ATR Logística de Controle de Risco para o rastreamento de perdas

A configuração de 2x de alavancagem pode parecer radical, mas com 2% de parada dura e 2.8x de rastreamento dinâmico do ATR, o risco real é controlado. Mais importante ainda é o mecanismo de bloqueio de lucro de 20.8x do ATR, que automaticamente aumenta o ponto de parada quando a flutuação atinge esse nível, garantindo que os lucros da grande tendência não retornam.

O design de uma linha K completa para a manutenção obrigatória impede a entrada e saída de alta frequência, e o período de resfriamento de cinco linhas K evita a transação emocionalmente contínua. Esse controle de ritmo é mais importante do que um indicador puramente técnico.

Três modos de entrada cobrem diferentes estados de mercado

Entradas de tendências continuadas: Aplicadas a tendências fortes já estabelecidas, requerem que a ruptura + inclinação + eficiência + dinâmica atinja todos os parâmetros. Reajustes de reentrada: Reajustes de tendências saudáveis, requerem profundidade suficiente e recuperação de força.

A vantagem deste design multi-modo é não perder qualquer tipo de oportunidade de tendência, e cada modo tem um padrão de qualidade rigoroso. Não é uma rede ampla, mas um sniper de precisão.

Os indicadores de eficiência são a ferramenta de avaliação de qualidade mais subestimada

A eficácia do caminho é calculada em 18 ciclos de deslocamento líquido e deslocamento acumulado, com menos de 33% de tendência constante. Este indicador é eficaz para identificar falsas tendências em situações de choque, evitando ser detido repetidamente em mercados horizontais.

A sustentabilidade da dinâmica requer que a linha K seja positiva em mais de 57% do tempo, combinada com a dinâmica de 12 ciclos. Esta dupla verificação garante a força interna da tendência, e não apenas a ruptura superficial do preço.

Análise de aplicabilidade: não é uma estratégia universal, mas é excelente em mercados de tendência

Esta estratégia é claramente orientada para o mercado de tendências, e em situações de turbulência, frequentemente, o sinal de saída é acionado. O projeto de forçar a saída quando o estado de ATR é inferior a 80% e a eficiência é inferior a 25%, indicando que a estratégia tem requisitos claros para o ambiente do mercado.

O maior risco é o atraso na transição de tendência, embora haja alertas precoces, como cruzamentos rápidos de EMA, que ainda podem enfrentar um retorno maior em uma reversão rápida. Recomenda-se o uso em ações de crescimento ou mercados de criptomoedas com alta volatilidade, evitando a aplicação em variedades de baixa volatilidade, como blue chips de capital aberto.

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 deve ser rigorosamente executada e a diferença de desempenho em diferentes condições de mercado é significativa.

Código-fonte da estratégia
/*backtest
start: 2026-01-07 15:30:00
end: 2026-03-15 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"XAG_USDT","balance":500000}]
*/

//@version=5
strategy("Quant Trend Engine Long Only v2 - Manual Leverage Fixed", overlay=true)

// === Core lengths ===
fastLen = input.int(18, "Fast EMA")
midLen = input.int(50, "Mid EMA")
slowLen = input.int(120, "Slow EMA")
smoothLen = input.int(3, "EMA Smoothing")
pullbackLen = input.int(8, "Pullback Lookback")
breakoutLen = input.int(20, "Breakout Length")
effLen = input.int(18, "Efficiency Length")
persistLen = input.int(7, "Persistence Length")
momLen = input.int(12, "Momentum Length")
slopeLen = input.int(10, "Slope Length")
atrLen = input.int(14, "ATR Length")
atrBaseLen = input.int(40, "ATR Baseline Length")

// === Thresholds ===
minScore = input.float(5.0, "Minimum Entry Score", step=0.25)
exitScore = input.float(2.5, "Weak Trend Exit Score", step=0.25)
minSepPerc = input.float(0.30, "Min EMA Separation %", step=0.05)
minSlowSlopePerc = input.float(0.03, "Min Slow Slope %", step=0.01)
minEff = input.float(0.33, "Min Efficiency", step=0.01)
minAtrRegime = input.float(0.95, "Min ATR Regime", step=0.05)
minBreakoutAtr = input.float(0.15, "Min Breakout ATR Strength", step=0.05)
pullbackAtrMult = input.float(0.90, "Pullback Distance ATR", step=0.05)
reclaimAtrMult = input.float(0.15, "Reclaim Distance ATR", step=0.05)
cooldownBars = input.int(5, "Cooldown Bars After Exit")

// === Risk ===
leverage = input.float(2.0, "Leverage", step=0.1, minval=0.1)
hardStopPerc = input.float(2.0, "Hard Stop %", step=0.1)
trailAtrMult = input.float(2.8, "ATR Trail Mult", step=0.1)
profitLockAtrMult = input.float(20.8, "Profit Lock ATR Mult", step=0.1)

// === Smoothed EMAs ===
fast = ta.ema(ta.ema(close, fastLen), smoothLen)
mid = ta.ema(ta.ema(close, midLen), smoothLen)
slow = ta.ema(ta.ema(close, slowLen), smoothLen)

// === Regime structure ===
bullStack = fast > mid and mid > slow
sepPerc = slow != 0 ? math.abs(fast - slow) / slow * 100 : 0.0
sepOk = sepPerc >= minSepPerc

fastSlope = fast[slopeLen] != 0 ? (fast - fast[slopeLen]) / fast[slopeLen] * 100 : 0.0
midSlope = mid[slopeLen] != 0 ? (mid - mid[slopeLen]) / mid[slopeLen] * 100 : 0.0
slowSlope = slow[slopeLen] != 0 ? (slow - slow[slopeLen]) / slow[slopeLen] * 100 : 0.0
slopeOk = slowSlope >= minSlowSlopePerc and midSlope > 0 and fastSlope > 0

// === Path efficiency ===
netMove = math.abs(close - close[effLen])
stepMove = 0.0
for i = 1 to effLen
    stepMove += math.abs(close[i - 1] - close[i])
efficiency = stepMove != 0 ? netMove / stepMove : 0.0
effOk = efficiency >= minEff

// === Momentum persistence ===
upBars = 0.0
for i = 0 to persistLen - 1
    upBars += close[i] > close[i + 1] ? 1 : 0
persistRatio = persistLen > 0 ? upBars / persistLen : 0.0
momRaw = close[momLen] != 0 ? (close - close[momLen]) / close[momLen] * 100 : 0.0
momOk = momRaw > 0 and persistRatio >= 0.57

// === Volatility regime ===
atr = ta.atr(atrLen)
atrBase = ta.sma(atr, atrBaseLen)
atrRegime = atrBase != 0 ? atr / atrBase : 0.0
atrOk = atrRegime >= minAtrRegime

// === Breakout quality ===
hh = ta.highest(high, breakoutLen)[1]
breakoutDist = close - hh
breakoutStrength = atr != 0 ? breakoutDist / atr : 0.0
breakoutOk = close > hh and breakoutStrength >= minBreakoutAtr

// === Pullback / reclaim logic ===
pullbackLow = ta.lowest(low, pullbackLen)
distFromFastAtr = atr != 0 ? (fast - pullbackLow) / atr : 0.0
deepEnoughPullback = distFromFastAtr >= pullbackAtrMult
reclaimFast = close > fast and close[1] <= fast[1]
reclaimMid = close > mid and close[1] <= mid[1]
reclaimStrength = atr != 0 ? (close - fast) / atr : 0.0
reclaimOk = (reclaimFast or reclaimMid) and reclaimStrength >= reclaimAtrMult

// === Transition memory ===
bullCross = ta.crossover(fast, mid) or ta.crossover(fast, slow) or ta.crossover(mid, slow)
barsSinceBullCross = ta.barssince(bullCross)
recentTrendBirth = barsSinceBullCross >= 0 and barsSinceBullCross <= 14

// === Weighted score ===
trendScore = 0.0
trendScore += bullStack ? 1.50 : 0.0
trendScore += sepOk ? 0.90 : 0.0
trendScore += slopeOk ? 1.10 : 0.0
trendScore += effOk ? 1.00 : 0.0
trendScore += atrOk ? 0.80 : 0.0
trendScore += momOk ? 1.00 : 0.0
trendScore += breakoutOk ? 1.25 : 0.0
trendScore += reclaimOk ? 1.10 : 0.0

// === Entry models ===
trendContinuationEntry = bullStack and breakoutOk and slopeOk and effOk and momOk
pullbackReentry = bullStack and sepOk and slopeOk and deepEnoughPullback and reclaimOk and effOk
earlyTrendEntry = recentTrendBirth and bullStack and sepOk and slopeOk and atrOk and momOk

// === Cooldown ===
var int lastExitBar = na
cooldownOk = na(lastExitBar) or bar_index - lastExitBar > cooldownBars

// === Final entry ===
enterLong = strategy.position_size == 0 and cooldownOk and trendScore >= minScore and close > slow and (trendContinuationEntry or pullbackReentry or earlyTrendEntry)

// === Manual leveraged sizing only ===
equity = math.max(strategy.equity, 0)
positionValue = equity * leverage
qty = positionValue > 0 ? positionValue / (close * syminfo.pointvalue) : 0.0

// === Entry tracking / mandatory 1 full candle hold ===
var int entryBarIndex = na
justOpened = strategy.position_size > 0 and strategy.position_size[1] == 0
if justOpened
    entryBarIndex := bar_index

canExitNow = strategy.position_size > 0 and not na(entryBarIndex) and bar_index > entryBarIndex

// === Entry order ===
if enterLong and qty > 0
    strategy.entry("Long", strategy.long, qty=qty)

// === Risk logic ===
hardStopPrice = strategy.position_size > 0 ? strategy.position_avg_price * (1 - hardStopPerc / 100) : na

var float trailStop = na
var float highSinceEntry = na
highSinceEntry := strategy.position_size > 0 ? (na(highSinceEntry) ? high : math.max(highSinceEntry, high)) : na

rawTrail = strategy.position_size > 0 ? close - atr * trailAtrMult : na
profitLock = strategy.position_size > 0 ? highSinceEntry - atr * profitLockAtrMult : na
combinedTrail = strategy.position_size > 0 ? math.max(rawTrail, profitLock) : na
trailStop := strategy.position_size > 0 ? (na(trailStop) ? combinedTrail : math.max(trailStop, combinedTrail)) : na

// === Exit logic ===
bearCross = ta.crossunder(fast, mid) or ta.crossunder(fast, slow)
structureBreak = close < mid and fast < mid
scoreWeak = trendScore <= exitScore
momentumFailure = persistRatio < 0.40 and momRaw < 0
regimeFailure = atrRegime < 0.80 and efficiency < 0.25

exitLong = strategy.position_size > 0 and canExitNow and (bearCross or structureBreak or scoreWeak or momentumFailure or regimeFailure)

// Only allow stop/trailing exits after 1 full candle has passed
if strategy.position_size > 0 and canExitNow
    strategy.exit("Risk Exit", from_entry="Long", stop=math.max(hardStopPrice, trailStop))

justClosed = strategy.position_size[1] > 0 and strategy.position_size == 0
if justClosed
    lastExitBar := bar_index
    trailStop := na
    highSinceEntry := na
    entryBarIndex := na

if exitLong
    strategy.close("Long")

// === Plots ===
plot(fast, color=color.green, linewidth=2, title="Fast EMA")
plot(mid, color=color.orange, linewidth=2, title="Mid EMA")
plot(slow, color=color.red, linewidth=2, title="Slow EMA")
plot(strategy.position_size > 0 ? trailStop : na, color=color.blue, linewidth=2, title="Adaptive Trail")
plot(trendScore, title="Trend Score", color=color.aqua)
plot(efficiency, title="Efficiency", color=color.fuchsia)
plot(atrRegime, title="ATR Regime", color=color.yellow)
plot(breakoutStrength, title="Breakout Strength", color=color.lime)
plot(persistRatio, title="Persistence Ratio", color=color.white)