Esta estrategia combina el indicador SuperTrend y el indicador DEMA para implementar una tendencia después de la estrategia de negociación. Genera señales de compra cuando el precio rompe la banda superior y señales de venta cuando el precio rompe la banda inferior. El indicador DEMA se utiliza para filtrar señales falsas. Esta estrategia funciona bien para los mercados de tendencia y puede seguir efectivamente las tendencias y filtrar las consolidaciones.
El núcleo de esta estrategia se basa en el indicador SuperTrend para determinar la dirección de tendencia de los precios. El indicador SuperTrend incorpora el indicador ATR y puede identificar eficazmente las tendencias de precios. Cuando los precios suben, se formará una banda superior, y cuando los precios caen, se formará una banda inferior. Una ruptura de la banda inferior señala una inversión de tendencia y genera una señal de compra. Una ruptura de la banda superior señala una inversión de tendencia y genera una señal de venta.
Para filtrar señales falsas, esta estrategia también incorpora el indicador DEMA. Las señales de compra solo se generan cuando los precios rompen la banda superior y están por encima de la línea DEMA. Las señales de venta solo se generan cuando los precios rompen la banda inferior y están por debajo de la línea DEMA. Esto filtra eficazmente las señales falsas en los mercados de rango.
Específicamente, la lógica de la señal de negociación es la siguiente:
A través de este diseño lógico, la estrategia puede seguir las tendencias en los mercados de tendencia y evitar la apertura frecuente de posiciones en mercados variables.
Gestión de riesgos:
La estrategia puede mejorarse en los siguientes aspectos:
Optimización de parámetros de SuperTrend: prueba diferentes combinaciones de períodos ATR para encontrar parámetros óptimos.
Optimización de parámetros DEMA. Prueba diferentes valores para determinar la configuración óptima.
Añadir el mecanismo de stop loss. Establecer el stop loss basado en los valores de ATR para evitar paradas de gran tamaño.
Añadir filtros de señal. Aumentar la confirmación de otros indicadores en puntos clave para evitar señales falsas. Por ejemplo, añadir la confirmación de volumen en puntos de inversión de tendencia.
Mejorar el tamaño de las posiciones y ajustar dinámicamente los tamaños en función de la volatilidad y los riesgos del mercado.
Esta estrategia combina los puntos fuertes de los indicadores SuperTrend y DEMA para implementar una estrategia de trading cuantitativa basada en el seguimiento de tendencias y el filtrado de señales.
/*backtest start: 2023-11-07 00:00:00 end: 2023-12-07 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Krish\'s Supertrend Strategy', overlay=true) // Supertrend Settings Periods = input(title='ATR Period', defval=10) src = input(hl2, title='Source') Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0) changeATR = input(title='Change ATR Calculation Method ?', defval=true) showsignals = input(title='Show Buy/Sell Signals ?', defval=true) highlighting = input(title='Highlighter On/Off ?', defval=true) atr2 = ta.sma(ta.tr, Periods) atr = changeATR ? ta.atr(Periods) : atr2 up = src - Multiplier * atr up1 = nz(up[1], up) up := close[1] > up1 ? math.max(up, up1) : up dn = src + Multiplier * atr dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0)) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0)) plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0)) dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0)) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0)) plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0)) // DEMA Settings dema_length = 200 dema = ta.ema(close, dema_length) // Long and Short Conditions longCondition = buySignal and close > dema shortCondition = sellSignal and close < dema // Strategy Entry and Exit strategy.entry('Long', strategy.long, when=longCondition) strategy.entry('Short', strategy.short, when=shortCondition) strategy.close('Long', when=ta.change(trend) or close < dema) strategy.close('Short', when=ta.change(trend) or close > dema) // Plotting mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0) longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white fill(mPlot, upPlot, title='UpTrend Highlighter', color=longFillColor, transp=90) fill(mPlot, dnPlot, title='DownTrend Highlighter', color=shortFillColor, transp=90) // Alerts (using plotshape for alerts in strategies) plotshape(buySignal, title='SuperTrend Buy', color=color.new(color.green, 0), style=shape.triangleup, size=size.small) plotshape(sellSignal, title='SuperTrend Sell', color=color.new(color.red, 0), style=shape.triangledown, size=size.small) changeCond = trend != trend[1] plotshape(changeCond, title='SuperTrend Direction Change', color=color.new(color.yellow, 0), style=shape.triangleup, size=size.small)