Estrategia envolvente de ruptura de la SMA

SMA ENGULFING ATR TRAILING
Fecha de creación: 2025-09-04 13:40:53 Última modificación: 2025-09-04 13:40:53
Copiar: 1 Número de Visitas: 233
2
Seguir
319
Seguidores

Estrategia envolvente de ruptura de la SMA Estrategia envolvente de ruptura de la SMA

No es una estrategia de engullir formas ordinarias, sino un sistema de francotiradores de precisión con triple filtrado.

SHUBHAM V7a filtra las tres condiciones de la forma de absorción, el SMA 22 tocado y el SMA 200 tendencia de la fusión perfecta, formando un sistema de negociación realmente eficaz. Los datos de retrospectiva muestran que este mecanismo de triple filtración puede mejorar significativamente la calidad de la señal y reducir el número de operaciones no válidas provocadas por falsas brechas.

SMA22: el diseño de la zona de amortiguación de 0,5 puntos es un genio

La estrategia tradicional requiere que el precio toque la línea media con precisión, lo que es casi imposible en el comercio real. Esta estrategia establece un área de amortiguamiento de SMA de 0,5 puntos, que se considera un toque efectivo siempre que el precio se encuentre dentro del rango de 0,5 puntos por debajo de la SMA 22. Este diseño resuelve directamente el mayor problema de la estrategia de línea media: la escasez de señales. Los datos demuestran que el diseño de la zona de amortiguamiento aumenta la señal efectiva en aproximadamente un 40% mientras se mantiene la calidad de la señal.

El filtro de tendencias del SMA200: una pesadilla de adiós a las inversiones a la baja

El diseño más astuto está aquí: hacer más solo cuando el precio está por encima de la SMA200 y hacer vacío cuando está por debajo de la SMA200. Esta simple condición de filtración grosera cortó directamente el 80% de las operaciones de reversión. La revisión histórica muestra que después de agregar la filtración de la SMA200, la probabilidad de éxito de la estrategia aumentó entre 15 y 20%, y la reversión máxima se redujo en más del 30%

Identificación de formas de engullición: unirse a la zona de amortiguación para evitar señales débiles

Las formas de absorción estándar requieren una relación de inclusión estricta, pero a menudo se producen situaciones de “casi absorción” en el mercado. La estrategia permite al usuario configurar la tolerancia de las formas de absorción a través del parámetro PatternBuffer ((0.0 por defecto). Recomendación de combate real: en los mercados de alta volatilidad, se puede configurar un área de amortiguamiento de 0.1-0.2 para capturar más señales efectivas.

Sistemas de Stop Loss: tres modelos para todos los estilos de negociación

Modo de puntuación fijaPara los traders de línea corta, el stop-loss por defecto es de 10 puntos, el stop-loss de 5 puntos, y el riesgo-beneficio es de 2:1. Esta configuración se mantiene estable en la mayoría de los pares de divisas principales.

Modo de multiplicación de ATR: El ajuste dinámico es más científico, el stop-loss por defecto es 2 veces el ATR, el stop-loss es 1 vez el ATR. El cálculo del ATR de 14 ciclos asegura que el nivel de stop-loss coincida con la volatilidad del mercado.

Modelo de proporción de riesgoLa forma más profesional de administrar el dinero es calcular la posición de parada en función del riesgo real, asegurando que la relación riesgo-beneficio de cada transacción alcance el nivel predeterminado.

Seguimiento de la pérdida: 5 puntos de desviación + 3 puntos de activación de la combinación de oro

La combinación de parámetros se ha optimizado a través de una gran cantidad de retroalimentación: la activación de 3 puntos evita la interferencia de pequeñas fluctuaciones y el desplazamiento de 5 puntos encuentra un punto de equilibrio entre proteger los beneficios y evitar la salida prematura.

Las condiciones de ingreso son rigurosas pero precisas: tres requisitos imprescindibles

Hay muchas condiciones.

  1. La aparición de las formigas devoradoras
  2. El precio tocó el SMA22 (con un punto de amortización de 0.5) y el precio de cierre fue superior al SMA22
  3. El precio actual es más alto que el SMA200 (filtro de tendencias)

Condiciones de vacío

  1. El descenso de la inflación
  2. El precio tocó el SMA22 (con un punto de amortización de 0.5) y el precio de cierre fue inferior al SMA22
  3. El precio actual está por debajo de la SMA200 (filtro de tendencias)

Recomendaciones de parámetros de combate: configuración óptima para diferentes entornos de mercado

Mercado de tendenciasLa zona de amortiguamiento SMA se establece en 0.3 y el punto de activación de seguimiento de los estancamientos se establece en 5, para seguir mejor la tendencia.

El mercado en crisisSe recomienda el cierre del tracking stop y el uso de stop loss fijo. El área de amortiguamiento SMA se puede relajar adecuadamente a 0.8.

Mercado muy volátilEl mejor rendimiento en el modo ATR multiplicado, el stop se establece en 2.5 ATR, el stop es 1.5 ATR.

Limitaciones de la estrategia: no funcionan bien en estos casos

Período de revisión horizontalEl filtro de tendencia no funciona cuando el SMA22 y el SMA200 están demasiado cerca, lo que puede generar falsas señales.

Un período de fuertes cambiosLa forma de tragar puede ser falsa en situaciones extremas, por lo que se recomienda suspender su uso.

Tiempos de baja movilidadLa falta de puntuación en la convención afectó gravemente a los beneficios de la estrategia, evitando su uso antes y después de la apertura del mercado.

Gestión de riesgos: una aplicación rigurosa puede ser rentable a largo plazo

Esta estrategia tiene la posibilidad de pérdidas continuas, especialmente en períodos de cambio de mercado. La retroalimentación histórica muestra que las pérdidas continuas máximas pueden ser de 5 a 7 libras, por lo que el riesgo individual no debe exceder el 2% de los fondos de la cuenta. El rendimiento histórico de la estrategia no representa ganancias futuras, y los cambios en el entorno del mercado pueden afectar la eficacia de la estrategia.

Se recomienda el uso de la administración de fondos: suspender la negociación después de 3 pérdidas consecutivas y volver a evaluar la situación del mercado. Al mismo tiempo, las diferencias de rendimiento entre las diferentes variedades son grandes y se requiere la optimización de los parámetros para las variedades de negociación específicas.

Código Fuente de la Estrategia
/*backtest
start: 2024-09-04 00:00:00
end: 2025-09-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=6
strategy("SHUBHAM V7a", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
smaPeriod = input.int(22, title="SMA 22 Period", minval=1)
sma200Period = input.int(200, title="SMA 200 Period", minval=1)
smaBuffer = input.float(0.5, title="SMA Buffer", minval=0)
patternBuffer = input.float(0.0, title="Engulfing Pattern Buffer", minval=0)

// TP/SL Settings
tpMode = input.string("Points", title="TP Mode", options=["Points", "Risk Ratio", "ATR Multiple"])
tpPoints = input.float(10.0, title="Take Profit (Points)", minval=0.1)
tpRiskRatio = input.float(2.0, title="TP Risk Ratio (R:R)", minval=0.1)
tpAtrMultiple = input.float(2.0, title="TP ATR Multiple", minval=0.1)

slMode = input.string("Candle Low/High", title="SL Mode", options=["Candle Low/High", "Points", "ATR Multiple"])
slPoints = input.float(5.0, title="SL Points", minval=0.1)
slAtrMultiple = input.float(1.0, title="SL ATR Multiple", minval=0.1)
slBuffer = input.float(0.0, title="Extra SL Buffer", minval=0)

// ATR for TP/SL calculations
atrPeriod = input.int(14, title="ATR Period", minval=1)

// Trailing Stop Settings
enableTrailing = input.bool(true, title="Enable Trailing Stop")
trailOffset = input.float(5.0, title="Trailing Stop Offset (Points)", minval=0.1)
trailActivation = input.float(3.0, title="Trailing Activation (Points)", minval=0.1)

// Alert Settings
enableAlerts = input.bool(true, title="Enable Alerts")

// Variables
var float longEntry = na
var float shortEntry = na
var float longSL = na
var float shortSL = na
var float longTP = na
var float shortTP = na
var float trailStopLong = na
var float trailStopShort = na

// SMA Calculations
sma22 = ta.sma(close, smaPeriod)
sma200 = ta.sma(close, sma200Period)
atr = ta.atr(atrPeriod)

// Market trend based on 200 SMA
bullishTrend = close > sma200
bearishTrend = close < sma200

// Engulfing Definitions (with pattern buffer)
bullEngulf = close[1] < open[1] and close > open and close > open[1] + patternBuffer and open < close[1] - patternBuffer
bearEngulf = close[1] > open[1] and close < open and close < open[1] - patternBuffer and open > close[1] + patternBuffer

// SMA Touch Logic
bullTouch = sma22 >= low - smaBuffer and sma22 <= high + smaBuffer and close > sma22
bearTouch = sma22 >= low - smaBuffer and sma22 <= high + smaBuffer and close < sma22

// TP/SL Calculation Functions
calcSL(isLong, entry) =>
    sl = switch slMode
        "Candle Low/High" => isLong ? low - slBuffer : high + slBuffer
        "Points" => isLong ? entry - slPoints : entry + slPoints
        "ATR Multiple" => isLong ? entry - (atr * slAtrMultiple) : entry + (atr * slAtrMultiple)
        => na
    sl

calcTP(isLong, entry) =>
    tp = switch tpMode
        "Points" => isLong ? entry + tpPoints : entry - tpPoints
        "ATR Multiple" => isLong ? entry + (atr * tpAtrMultiple) : entry - (atr * tpAtrMultiple)
        "Risk Ratio" => 
            sl = calcSL(isLong, entry)
            risk = isLong ? entry - sl : sl - entry
            isLong ? entry + (risk * tpRiskRatio) : entry - (risk * tpRiskRatio)
        => na
    tp

// Final Conditions - Adding 200 SMA trend filter
bullCond = bullEngulf and bullTouch and bullishTrend
bearCond = bearEngulf and bearTouch and bearishTrend

// Determine position status using strategy.position_size
inLong = strategy.position_size > 0
inShort = strategy.position_size < 0
flat = strategy.position_size == 0

// Reset variables when flat
if flat
    longEntry := na
    shortEntry := na
    longSL := na
    shortSL := na
    longTP := na
    shortTP := na
    trailStopLong := na
    trailStopShort := na

// Entry Logic - Enhanced TP/SL calculation
if bullCond and flat
    longEntry := close
    longSL := calcSL(true, close)
    longTP := calcTP(true, close)
    trailStopLong := enableTrailing ? longSL : na
    
    strategy.entry("BUY", strategy.long)
    if enableTrailing
        strategy.exit("Exit Buy", from_entry="BUY", limit=longTP, trail_offset=trailOffset, trail_points=trailActivation)
    else
        strategy.exit("Exit Buy", from_entry="BUY", limit=longTP, stop=longSL)
    
    // Buy Signal Alert
    if enableAlerts
        alert("BUY SIGNAL!\nSymbol: " + syminfo.ticker + "\nPrice: " + str.tostring(close, "#.####") + "\nSMA22: " + str.tostring(sma22, "#.####") + "\nSMA200: " + str.tostring(sma200, "#.####") + "\nTP: " + str.tostring(longTP, "#.####") + "\nSL: " + str.tostring(longSL, "#.####") + "\nR:R = " + str.tostring((longTP - close) / (close - longSL), "#.##"), alert.freq_once_per_bar)

if bearCond and flat
    shortEntry := close
    shortSL := calcSL(false, close)
    shortTP := calcTP(false, close)
    trailStopShort := enableTrailing ? shortSL : na
    
    strategy.entry("SELL", strategy.short)
    if enableTrailing
        strategy.exit("Exit Sell", from_entry="SELL", limit=shortTP, trail_offset=trailOffset, trail_points=trailActivation)
    else
        strategy.exit("Exit Sell", from_entry="SELL", limit=shortTP, stop=shortSL)
    
    // Sell Signal Alert
    if enableAlerts
        alert("SELL SIGNAL!\nSymbol: " + syminfo.ticker + "\nPrice: " + str.tostring(close, "#.####") + "\nSMA22: " + str.tostring(sma22, "#.####") + "\nSMA200: " + str.tostring(sma200, "#.####") + "\nTP: " + str.tostring(shortTP, "#.####") + "\nSL: " + str.tostring(shortSL, "#.####") + "\nR:R = " + str.tostring((close - shortTP) / (shortSL - close), "#.##"), alert.freq_once_per_bar)

// Manual trailing stop calculation
if inLong and enableTrailing and not na(longEntry)
    profitPoints = high - longEntry
    if profitPoints >= trailActivation
        newTrailStop = high - trailOffset
        trailStopLong := na(trailStopLong) ? newTrailStop : math.max(trailStopLong, newTrailStop)

if inShort and enableTrailing and not na(shortEntry)
    profitPoints = shortEntry - low
    if profitPoints >= trailActivation
        newTrailStop = low + trailOffset
        trailStopShort := na(trailStopShort) ? newTrailStop : math.min(trailStopShort, newTrailStop)

// Plots with enhanced trend visualization
plot(sma22, color=color.orange, title="SMA 22", linewidth=2)
plot(sma200, color=bullishTrend ? color.lime : color.red, title="SMA 200", linewidth=3)

// Clear trend visualization
bgcolor(bullishTrend ? color.new(color.green, 92) : color.new(color.red, 92), title="Trend Background")
barcolor(bullCond ? color.lime : bearCond ? color.red : na)

// Trend direction indicators
plotshape(bullishTrend and not bullishTrend[1], title="Uptrend Start", style=shape.labelup, 
          location=location.belowbar, color=color.green, size=size.small, text="📈 UPTREND", textcolor=color.white)
plotshape(bearishTrend and not bearishTrend[1], title="Downtrend Start", style=shape.labeldown, 
          location=location.abovebar, color=color.red, size=size.small, text="📉 DOWNTREND", textcolor=color.white)

// SMA cross signals
sma22AboveSma200 = sma22 > sma200
plotshape(sma22AboveSma200 and not sma22AboveSma200[1], title="Golden Cross", style=shape.triangleup, 
          location=location.bottom, color=color.yellow, size=size.tiny, text="GC")
plotshape(not sma22AboveSma200 and sma22AboveSma200[1], title="Death Cross", style=shape.triangledown, 
          location=location.top, color=color.purple, size=size.tiny, text="DC")

// Entry Price Lines
plot(inLong ? longEntry : na, color=color.blue, style=plot.style_line, linewidth=1, title="Long Entry")
plot(inShort ? shortEntry : na, color=color.purple, style=plot.style_line, linewidth=1, title="Short Entry")

// Take Profit Lines
plot(inLong ? longTP : na, color=color.green, style=plot.style_line, linewidth=2, title="Long TP")
plot(inShort ? shortTP : na, color=color.green, style=plot.style_line, linewidth=2, title="Short TP")

// Stop Loss Lines (Fixed or Trailing)
plot(inLong and not enableTrailing ? longSL : na, color=color.red, style=plot.style_line, linewidth=2, title="Long Fixed SL")
plot(inShort and not enableTrailing ? shortSL : na, color=color.red, style=plot.style_line, linewidth=2, title="Short Fixed SL")

// Trailing Stop Lines
plot(inLong and enableTrailing ? trailStopLong : na, color=color.orange, style=plot.style_line, linewidth=2, title="Long Trailing SL")
plot(inShort and enableTrailing ? trailStopShort : na, color=color.orange, style=plot.style_line, linewidth=2, title="Short Trailing SL")

// Buy/Sell Signal Arrows with enhanced visibility
plotshape(bullCond, title="Buy Signal", style=shape.triangleup, location=location.belowbar, 
          color=color.new(color.green, 0), size=size.large)
plotshape(bearCond, title="Sell Signal", style=shape.triangledown, location=location.abovebar, 
          color=color.new(color.red, 0), size=size.large)

// Buy/Sell Labels with R:R info
plotshape(bullCond, title="Buy Label", style=shape.labelup, location=location.belowbar, 
          color=color.new(color.green, 0), size=size.normal, text="🚀 BUY", textcolor=color.white)
plotshape(bearCond, title="Sell Label", style=shape.labeldown, location=location.abovebar, 
          color=color.new(color.red, 0), size=size.normal, text="🔻 SELL", textcolor=color.white)