La estrategia de negociación de Supertrend es una estrategia de seguimiento de tendencias basada en el rango verdadero promedio (ATR) y el promedio móvil (MA).
La idea principal detrás de esta estrategia es ir largo o corto cuando el precio atraviesa el canal Supertrend, lo que indica una reversión de tendencia.
El cálculo de la Supertrend incluye varios pasos:
La ventaja de esta estrategia es que combina tanto las técnicas de seguimiento de tendencias como las de inversión de tendencias. Identifica las tendencias principales y también es capaz de capturar oportunidades de inversión de manera oportuna. Además, el mecanismo de stop loss / take profit ayuda a controlar los riesgos.
La estrategia Supertrend tiene las siguientes fortalezas:
1. Seguimiento de la tendencia intermedia
El canal de Supertrend se calcula sobre la base del ATR, que refleja efectivamente el rango intermedio de fluctuación de precios.
2. Captura las reversiones a tiempo
Las rupturas de precios del canal generan rápidamente señales de negociación para que las principales inversiones de tendencia puedan capturarse a tiempo.
3. Tenga un stop loss y tome ganancias
La estrategia establece niveles de stop loss predefinidos y toma ganancias para una salida automática con control de riesgo.
4. Sencillo de aplicar
La estrategia utiliza principalmente indicadores básicos como MA y ATR. Esto hace que sea bastante simple de entender e implementar para el comercio en vivo.
**5. Alta eficiencia del capital **
Al realizar un seguimiento de las tendencias intermedias y controlar los deslizamientos individuales, la estrategia Supertrend proporciona una alta eficiencia general del capital.
La estrategia Supertrend también tiene algunas debilidades potenciales:
1. Desempeño inferior en el mercado de la gama
La estrategia se centra en el comercio de tendencia a medio y largo plazo. En los mercados de variación o consolidación, tiende a tener un rendimiento inferior con un mayor costo de oportunidad de las operaciones cortas perdidas.
2. Sensible a la optimización de parámetros
Los valores elegidos para el período ATR y el multiplicador tienen un impacto relativamente grande en el rendimiento de la estrategia.
3. Pueden existir problemas de retraso
Puede haber algunos problemas de retraso con el cálculo del canal Supertrend, causando una generación de señal inoportuna.
Se requiere una gestión estricta de pérdidas de parada
En condiciones extremas de mercado, una asignación de pérdidas de detención inadecuadamente grande o una gestión de riesgos inadecuada podrían provocar grandes pérdidas.
Hay más margen para optimizar esta estrategia de Supertrend:
1. Combinar varios períodos de ATR
La combinación de las lecturas de ATR en diferentes períodos como 10 días y 20 días forma un indicador compuesto, que ayuda a mejorar la sensibilidad y los problemas de retraso.
2. Añadir módulos de stop loss
La adición de mecanismos de stop loss más sofisticados, como triple stop loss, stop loss de volatilidad y stop loss secuencial, podría reforzar el control del riesgo y la reducción de la retirada.
Optimización de parámetros
La optimización de los valores para el período ATR, el multiplicador y otros insumos a través de métodos cuantitativos mejoraría aún más el rendimiento de la estrategia.
4. Integrar modelos de aprendizaje automático
Por último, la integración de modelos de aprendizaje automático puede lograr el reconocimiento automatizado de tendencias y la generación de señales, reduciendo la dependencia de las decisiones subjetivas y mejorando la estabilidad del sistema.
La estrategia de trading de Supertrend identifica la dirección de tendencia intermedia utilizando los indicadores MA y ATR, y genera señales de entrada y salida de operaciones en torno a inversiones de tendencia con la implementación automatizada de stop loss/take profit.
Sin embargo, también existen algunas deficiencias con respecto a la captura insuficiente del mercado y los problemas de retraso. Se pueden explorar nuevas optimizaciones en múltiples dimensiones, incluido el uso de ATR compuesto, el fortalecimiento de módulos de stop loss, parámetros de ajuste e integración de modelos de aprendizaje automático. Estas mejoras probablemente mejorarán la estabilidad y eficiencia de la estrategia Supertrend.
/*backtest start: 2022-11-30 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Supertrend V1.0 - Buy or Sell Signal",overlay=true) Factor=input(3, minval=1,maxval = 100) Pd=input(7, minval=1,maxval = 100) //Calculating ATR atrLength = input(title="ATR Length:", defval=14, minval=1) Stop_Loss_Factor = input(1.5, minval=0,step=0.01) factor_profit = input(1.0, minval=0,step=0.01) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 10, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2016, title = "From Year", minval = 2009) ToMonth = input(defval = 4, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 10, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2039, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" // Calculate ATR atrValue=atr(atrLength) decimals = abs(log(syminfo.mintick) / log(10)) Atr = atrValue if(decimals == 5) Atr := atrValue * 10000 if(decimals == 4) Atr := atrValue * 1000 if(decimals == 3) Atr := atrValue * 100 if(decimals == 2) Atr := atrValue * 10 //VJ2 Supertrend Up=hl2-(Factor*atr(Pd)) Dn=hl2+(Factor*atr(Pd)) TrendUp = 0.0 TrendUp:=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up TrendDown = 0.0 TrendDown:=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn Trend = 0.0 Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1) Tsl = 0.0 Tsl := Trend==1? TrendUp: TrendDown linecolor = Trend == 1 ? green : red plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend") plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0) plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0) //plot(Trend==1 and Trend[1]==-1,color = linecolor, style = circles, linewidth = 3,title="Trend") plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0) plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0) //Strategy Trend_buy = Trend == 1 Trend_buy_prev = Trend[1] == -1 algo_buy_pre = Trend_buy and Trend_buy_prev algo_buy = algo_buy_pre == 1 ? 1 : na Trend_sell= Trend == -1 Trend_sell_prev = Trend[1] == 1 algo_sell_pre = Trend_sell and Trend_sell_prev algo_sell = algo_sell_pre == 1 ? 1:na strategy.entry("Long1", strategy.long, when= window() and algo_buy==1) strategy.entry("Short1", strategy.short, when=window() and algo_sell==1) bought = strategy.position_size > strategy.position_size sold = strategy.position_size < strategy.position_size longStop = Stop_Loss_Factor * valuewhen(bought, Atr, 0) shortStop = Stop_Loss_Factor * valuewhen(sold, Atr, 0) longProfit = factor_profit * longStop shortProfit = factor_profit * shortStop if(decimals == 5) longStop := longStop *100000 longProfit := longProfit *100000 if(decimals == 4) longStop := longStop * 10000 longProfit := longProfit * 10000 if(decimals == 3) longStop := longStop * 1000 longProfit := longProfit * 1000 if(decimals == 2) longStop := longStop * 100 longProfit := longProfit *100 if(decimals == 5) shortStop := shortStop * 100000 shortProfit := shortProfit * 100000 if(decimals == 4) shortStop := shortStop * 10000 shortProfit := shortProfit * 10000 if(decimals == 3) shortStop := shortStop * 1000 shortProfit := shortProfit * 1000 if(decimals == 2) shortStop := shortStop * 100 shortProfit := shortProfit * 100 strategy.exit("Exit Long", from_entry = "Long1", loss =longStop, profit = longProfit) strategy.exit("Exit Short", from_entry = "Short1", loss =shortStop, profit = shortProfit)