
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.
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 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%
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.
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.
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.
Hay muchas condiciones.:
Condiciones de vacío:
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.
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.
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.
/*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)