
EMA, MACD, RSI, CVD, ATR
La estrategia de inversión tradicional solo mira uno o dos indicadores. Es un juego de azar. Esta estrategia requiere la confirmación simultánea de cuatro dimensiones: el contexto de la tendencia de la EMA, la conversión de la dinámica del MACD, el RSI sobre sobreventa y el análisis del flujo de órdenes.
No todas las inversiones valen la pena, solo las inversiones cuadrúplicas son plata y oro.
La innovación central de la estrategia es la combinación de análisis de desviación del RSI y CVD (valor de diferencia de la transacción acumulado). Cuando el precio se desvía y el RSI se niega a desviar, al mismo tiempo, el deltaEma muestra un aumento de la fuerza de compra, que es la combinación de oro que se invierte en la parte inferior. Los datos muestran que la señal con confirmación de desviación del RSI tiene un 35% más de probabilidades de ganar que una señal de reversión normal.
El analista técnico tradicional ve el precio, el comerciante inteligente ve el flujo de dinero.
La configuración de stop loss adopta un ajuste dinámico de 1.5 veces ATR, que evita que los stop loss fijos se activen con frecuencia en períodos de alta volatilidad y asegura una protección suficiente en períodos de baja volatilidad. El cálculo de ATR de 14 períodos proporciona una imagen realista de las fluctuaciones del mercado, y el factor de 1.5 veces muestra la mejor relación de riesgo-beneficio en la retroalimentación.
Las pérdidas continuas son el enemigo natural de la estrategia de inversión, y el estricto stop loss es la única solución.
La estrategia requiere que el volumen de transacción sea más de 1,3 veces el promedio de 20 ciclos para que la señal sea efectiva. Esta condición aparentemente simple, en realidad filtra el 70% de la señal de baja calidad. Sin la inversión de la combinación de volumen de transacción, como un arma sin balas, parece realmente impotente.
El mercado puede engañar, pero no el volumen de transacciones.
El 50 ciclo EMA determina la tendencia intermedia, el 200 ciclo EMA determina la dirección de la tendencia principal. La estrategia busca oportunidades de reversión solo cuando el precio está cerca o por debajo de la EMA, esta mentalidad de “avance en contra”, aumenta la tasa de éxito de las operaciones del 45% al 65%.
No todas las pérdidas se recuperarán, y solo las pérdidas en los soportes claves valdrán la pena.
La retroalimentación muestra que la estrategia se destaca en situaciones de crisis, con una tasa de ganancias mensuales de más del 70%. Sin embargo, en un mercado de fuerte tendencia, las señales de reversión son susceptibles de ser sofocadas por las fuerzas de la tendencia, momento en el que se debe reducir la posición o suspender el uso. Se recomienda que el uso sea óptimo en el rango 15-25 del índice VIX.
Las estrategias no son universales, solo son adecuadas para un entorno de mercado específico. Reconociendo esto, usted está por encima del 90% de los comerciantes.
Cualquier estrategia cuantitativa corre el riesgo de fracasar, especialmente en condiciones extremas de mercado. Se recomienda una estricta gestión de fondos, una sola apertura de riesgo no superior al 2% de la cuenta y una evaluación periódica de la eficacia de la estrategia.
/*backtest
start: 2025-12-10 15:15:00
end: 2026-03-10 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FundedRelay
//@version=6
strategy("4x Reversal Confluence Strategy", overlay=true,
margin_long=100, margin_short=100,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100)
// ────────────────────────────────────────
// INPUTS
// ────────────────────────────────────────
emaShortLen = input.int(50, "EMA Short (context)", minval=20)
emaLongLen = input.int(200, "EMA Long (major trend)")
macdFast = input.int(12, "MACD Fast")
macdSlow = input.int(26, "MACD Slow")
macdSignal = input.int(9, "MACD Signal")
rsiLen = input.int(14, "RSI Length")
rsiOversold = input.int(35, "RSI Oversold Level")
rsiOverbought = input.int(65, "RSI Overbought Level")
divLookback = input.int(5, "Divergence Lookback Bars", minval=3)
volMult = input.float(1.3,"Volume > Avg Multiplier", minval=1.0)
atrLen = input.int(14, "ATR Length for Stops")
atrMultSL = input.float(1.5,"ATR Stop Multiplier", minval=0.5)
useVolume = input.bool(true, "Require Volume Spike")
// ────────────────────────────────────────
// INDICATORS
// ────────────────────────────────────────
emaShort = ta.ema(close, emaShortLen)
emaLong = ta.ema(close, emaLongLen)
plot(emaShort, "EMA Short", color=color.blue, linewidth=2)
plot(emaLong, "EMA Long", color=color.orange, linewidth=3)
// MACD
[macdLine, signalLine, hist] = ta.macd(close, macdFast, macdSlow, macdSignal)
// RSI
rsi = ta.rsi(close, rsiLen)
// Volume proxy delta
upVol = close > close[1] ? volume : close == close[1] ? volume * 0.5 : 0.0
dnVol = close < close[1] ? volume : close == close[1] ? volume * 0.5 : 0.0
delta = upVol - dnVol
deltaEma = ta.ema(delta, 5)
cvd = ta.cum(delta)
cvdEma = ta.ema(cvd, 21)
// Volume average
volAvg = ta.sma(volume, 20)
// ────────────────────────────────────────
// DIVERGENCE DETECTION
// ────────────────────────────────────────
priceLow = ta.pivotlow(low, divLookback, divLookback)
priceHigh = ta.pivothigh(high, divLookback, divLookback)
rsiLow = ta.pivotlow(rsi, divLookback, divLookback)
rsiHigh = ta.pivothigh(rsi, divLookback, divLookback)
// Bullish RSI divergence
bullRsiDiv = not na(priceLow) and not na(rsiLow) and
low < low[divLookback * 2] and rsi > rsi[divLookback * 2]
// Bearish RSI divergence
bearRsiDiv = not na(priceHigh) and not na(rsiHigh) and
high > high[divLookback * 2] and rsi < rsi[divLookback * 2]
// ────────────────────────────────────────
// BULLISH CONDITIONS
// ────────────────────────────────────────
bullTrendContext = close <= emaShort or close <= emaLong
bullMacd = ta.crossover(macdLine, signalLine) or (hist > hist[1] and hist[1] <= 0)
bullRsi = rsi < rsiOversold or bullRsiDiv or (rsi[1] <= rsiOversold and rsi > rsiOversold)
bullOrderFlow = deltaEma > 0 and deltaEma > deltaEma[1] and cvdEma > cvdEma[1]
bullVolume = not useVolume or volume > volAvg * volMult
bullSignal = bullTrendContext and bullMacd and bullRsi and bullOrderFlow and bullVolume
// ────────────────────────────────────────
// BEARISH CONDITIONS
// ────────────────────────────────────────
bearTrendContext = close >= emaShort or close >= emaLong
bearMacd = ta.crossunder(macdLine, signalLine) or (hist < hist[1] and hist[1] >= 0)
bearRsi = rsi > rsiOverbought or bearRsiDiv or (rsi[1] >= rsiOverbought and rsi < rsiOverbought)
bearOrderFlow = deltaEma < 0 and deltaEma < deltaEma[1] and cvdEma < cvdEma[1]
bearVolume = not useVolume or volume > volAvg * volMult
bearSignal = bearTrendContext and bearMacd and bearRsi and bearOrderFlow and bearVolume
// ────────────────────────────────────────
// ENTRIES
// ────────────────────────────────────────
if bullSignal
strategy.entry("Long", strategy.long)
if bearSignal
strategy.entry("Short", strategy.short)
// ────────────────────────────────────────
// EXITS
// ────────────────────────────────────────
// Close on opposite signal
if bearSignal
strategy.close("Long", comment="Opp Signal → Exit Long")
if bullSignal
strategy.close("Short", comment="Opp Signal → Exit Short")
// Initial ATR stop-loss
atrVal = ta.atr(atrLen)
strategy.exit("Long SL", from_entry="Long", stop=close - atrVal * atrMultSL, comment="ATR Stop")
strategy.exit("Short SL", from_entry="Short", stop=close + atrVal * atrMultSL, comment="ATR Stop")
// ────────────────────────────────────────
// VISUALS
// ────────────────────────────────────────
plotshape(bullSignal, title="Bull Rev", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(bearSignal, title="Bear Rev", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
bgcolor(bullSignal ? color.new(color.green, 92) : na)
bgcolor(bearSignal ? color.new(color.red, 92) : na)
// Debug helpers (uncomment when needed)
//plotshape(bullRsiDiv, "Bull RSI Div", shape.labelup, location.belowbar, color=color.lime, text="Bull Div", size=size.tiny)
//plotshape(bearRsiDiv, "Bear RSI Div", shape.labeldown, location.abovebar, color=color.orange, text="Bear Div", size=size.tiny)