Máquina de captura de tendencias multidimensional


Fecha de creación: 2026-03-17 11:43:45 Última modificación: 2026-03-17 11:43:45
Copiar: 13 Número de Visitas: 179
2
Seguir
451
Seguidores

Máquina de captura de tendencias multidimensional Máquina de captura de tendencias multidimensional

EMA, ATR, MOMENTUM, EFFICIENCY, BREAKOUT

Esta no es una estrategia triangular común, es una máquina multidimensional de captura de tendencias.

No te dejes engañar por la superficial configuración de la línea de tres promedios 18/50/120. El núcleo de esta estrategia es un sistema de verificación de tendencias en 8 dimensiones independientes, cada una con un criterio numérico claro. No es un simple tenedor de oro, sino que se juzga la calidad de la tendencia a través de un mecanismo de puntuación ponderado ((un mínimo de 5.0 puntos de entrada y menos de 2.5 puntos de salida)).

El problema con las estrategias de línea media tradicionales es que hay demasiadas falsas señales, y este sistema eleva la tasa de éxito de entrada a un nuevo nivel a través de múltiples filtros, como la eficiencia de la ruta (mínimo del 33%), la continuidad del impulso (más del 57% de aumento en la proporción de la línea K) y el estado de la tasa de fluctuación (más del 95% de la relación ATR).

Pruebas de calidad de la ruptura: 0.15 veces ATR es una verdadera ruptura

El 90% de las rupturas en el mercado son falsas. Esta estrategia establece que la intensidad de la ruptura debe alcanzar 0.15 veces el ATR, lo que significa que la amplitud de la ruptura debe ser superior al 15% de la fluctuación promedio reciente para ser considerada una señal válida.

El mecanismo de recuperación de reajuste es más sofisticado: requiere un reajuste profundo de al menos 0.9 veces el ATR cuando el precio está alejado de la línea rápida, y luego alcanza una intensidad de 0.15 veces el ATR cuando se vuelve a la línea media. Este diseño filtra eficazmente las falsas rupturas en las capas superficiales y solo capta los inicios de tendencias impulsados por fondos reales.

2 veces el apalancamiento + 2.8 veces el ATR seguimiento de la lógica de control de riesgo para detener los pérdidas

La configuración de 2x de apalancamiento parece radical, pero con un 2% de parada dura y un seguimiento dinámico de 2.8x de ATR, el riesgo real es controlable. Más importante aún es el mecanismo de bloqueo de ganancias de 20.8x de ATR, que aumenta automáticamente el punto de parada cuando el flotador alcanza este nivel, lo que garantiza que las ganancias en la gran tendencia no se revuelvan.

El diseño de un cable K completo para obligar a la posición impide la entrada y salida de alta frecuencia, y el período de enfriamiento de los cables K 5 evita la transacción continua emocional. Este control de ritmo es más importante que los indicadores puramente técnicos.

Los tres modos de entrada cubren diferentes estados de mercado

Entrada de continuación de la tendencia: aplica para las tendencias fuertes ya establecidas, que requieren que se cumplan todos los estándares de ruptura + inclinación + eficiencia + dinámica. Reajuste de reentrada: reajuste de tendencias saludables, que requiere suficiente profundidad y recuperación de la fuerza. Entrada de tendencia temprana: captura el período de la ventana de la línea K de 14 dorados de la conversión de tendencias.

La ventaja de este diseño multi-modo es que no se pierde ningún tipo de oportunidad de tendencia, mientras que cada modo tiene estrictos estándares de calidad. No es una red amplia, sino un francotirador preciso.

Los indicadores de eficiencia son las herramientas de evaluación de la calidad de las tendencias más subestimadas

La eficiencia de la ruta se calcula como el ratio de desplazamiento neto a desplazamiento acumulado en 18 períodos, sin tocar la tendencia por debajo del 33%. Este indicador puede identificar de manera efectiva las falsas tendencias en situaciones de crisis y evitar la pérdida repetida en los mercados de desvío horizontal.

La continuidad de la dinámica requiere que la línea de K se cierre en un 57% o más, y la dinámica de 12 ciclos debe ser positiva. Esta doble verificación asegura la fuerza interna de la tendencia, no solo la ruptura superficial del precio.

Análisis de aplicabilidad: no es una estrategia universal, pero es excelente en mercados de tendencia

La estrategia está claramente orientada hacia el mercado de tendencias, con frecuencia desencadenando señales de salida en situaciones de agitación. El diseño para forzar la salida cuando el estado de ATR es inferior al 80% y la eficiencia es inferior al 25%, muestra que la estrategia tiene requisitos claros para el entorno del mercado.

El mayor riesgo está en el retraso en la transición de tendencia, aunque hay alertas tempranas como cruces rápidos de EMA, se puede enfrentar un gran retroceso en una rápida reversión. Se recomienda usar en acciones de crecimiento o mercados de criptomonedas con un alto índice de volatilidad, y evitar la aplicación en variedades de baja volatilidad como el blue chip de gran mercado.

Alerta de riesgo: el retroceso histórico no es indicativo de ganancias futuras, la estrategia tiene riesgo de pérdidas continuas, se debe aplicar una gestión de riesgos estricta, y el rendimiento varía significativamente en diferentes entornos de mercado.

Código Fuente de la Estrategia
/*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)