La estrategia SuperTrend es una estrategia de seguimiento de tendencias basada en el cálculo del rango verdadero promedio. Utiliza ATR para establecer líneas de stop loss y determina la dirección de la tendencia al juzgar si el precio rompe las líneas de stop loss, generando así señales comerciales.
La estrategia primero calcula el rango verdadero promedio (ATR) durante un cierto período. Luego utiliza el valor de ATR multiplicado por un factor de escala para calcular la línea de stop loss larga y la línea de stop loss corta. El cálculo específico es el siguiente:
atr = mult * atr(length)
longStop = hl2 - atr
shortStop = hl2 + atr
Donde la longitud es el período para calcular el ATR, y mult es el factor de escalado para el ATR.
Después de calcular las líneas de stop loss, la estrategia sigue juzgando si el precio rompe la línea de stop loss de la barra anterior para determinar la dirección de la tendencia:
dir := dir == -1 and close > shortStopPrev ? 1 :
dir == 1 and close < longStopPrev ? -1 : dir
Cuando se rompe la línea larga de stop loss, la tendencia se considera alcista.
De acuerdo con el cambio de dirección de la tendencia, se generan señales de compra y venta:
buySignal = dir == 1 and dir[1] == -1
sellSignal = dir == -1 and dir[1] == 1
Por último, las acciones comerciales correspondientes se toman cuando aparecen señales de compra o venta.
El uso de ATR para calcular las líneas de stop loss puede filtrar eficazmente el ruido del mercado y capturar señales de tendencia más confiables.
La estrategia tiene pocos parámetros que sean fáciles de entender y operar.
El uso de la ruptura de la línea de stop loss para determinar el cambio de dirección de la tendencia puede controlar eficazmente los riesgos y detener la pérdida a tiempo.
Configurable para el comercio solo largo o bidireccional para adaptarse a diferentes estilos de negociación.
Puede utilizarse en cualquier período de tiempo y para diversos instrumentos comerciales.
En los mercados variados, el ATR puede ser elevado, lo que conduce a un stop loss más amplio y a más señales falsas.
La combinación óptima de parámetros es incierta. El período ATR y el multiplicador necesitan una optimización basada en las condiciones del mercado.
El plazo óptimo para cada instrumento de negociación es desconocido y debe probarse.
El mejor momento de entrada no está claro y existe algún retraso.
Hay riesgos de no estar en el mercado cuando la tendencia es débil.
El riesgo de que se produzca un stop loss puede ser más amplio.
Otros indicadores como MACD, RSI se pueden incorporar para la filtración para evitar señales erróneas en los mercados de rango.
El aprendizaje automático o los algoritmos genéticos se pueden utilizar para encontrar los conjuntos óptimos de parámetros.
La optimización de parámetros se puede realizar para cada instrumento para encontrar el mejor período y multiplicador de ATR.
Los indicadores de volumen pueden utilizarse para determinar mejor el momento de entrada y evitar una entrada prematura.
Considere el uso de estrategias de bloqueo para mantener posiciones cuando no esté en el mercado.
La anchura de stop loss se puede relajar y optimizar con indicadores de fuerza de tendencia.
La estrategia SuperTrend utiliza líneas de stop loss dinámicas calculadas a partir de ATR para detectar cambios de tendencia cuando ocurre una ruptura de precio. Es un sistema de seguimiento de tendencia relativamente confiable y controlado por riesgo. La estrategia es simple de usar y aplicable a varios instrumentos, pero los parámetros y reglas necesitan optimización para un mejor rendimiento en diferentes mercados. La combinación con otros indicadores técnicos y estrategias puede mejorar aún más los resultados comerciales. En general, SuperTrend se basa en conceptos científicamente sólidos y vale la pena una mayor investigación y aplicación por parte de los operadores.
/*backtest start: 2023-09-12 00:00:00 end: 2023-10-12 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // strategy("SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000) LongOnly = input(title="Long Only ?", type=input.bool, defval=true) length = input(title="ATR Period", type=input.integer, defval=22) mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval=1, title="From Day", minval=1, maxval=31) fromMonth = input(defval=1, title="From Month", minval=1, maxval=12) fromYear = input(defval=2019, title="From Year", minval=1970) // To Date Inputs toDay = input(defval=1, title="To Day", minval=1, maxval=31) toMonth = input(defval=1, title="To Month", minval=1, maxval=12) toYear = input(defval=2020, title="To Year", minval=1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// atr = mult * atr(length) longStop = hl2 - atr longStopPrev = nz(longStop[1], longStop) longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = hl2 + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and close > shortStopPrev ? 1 : dir == 1 and close < longStopPrev ? -1 : dir longColor = color.green shortColor = color.red plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor) buySignal = dir == 1 and dir[1] == -1 plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0) plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0) plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor) sellSignal = dir == -1 and dir[1] == 1 plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0) plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0) if LongOnly if buySignal and time_cond strategy.entry("Long", strategy.long, comment="Long") if(sellSignal and time_cond) strategy.close("Long") else if buySignal and time_cond strategy.entry("Long", strategy.long, comment="Long") else strategy.cancel("Long") if sellSignal and time_cond strategy.entry("Short", strategy.short, comment="Short") else strategy.cancel("Short") if not time_cond strategy.close_all()