Estrategia de negociación de supertrend basada en la combinación de ATR y MA

El autor:¿ Qué pasa?, Fecha: 2023-12-01 16:40:27
Las etiquetas:

img

Resumen general

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.

Cómo funciona esta estrategia

El cálculo de la Supertrend incluye varios pasos:

  1. El ATR refleja la volatilidad media durante un período de tiempo.
  2. Calcule la línea media basada en el máximo máximo y el mínimo mínimo.
  3. Calcular el canal superior e inferior basado en ATR y el multiplicador de ATR establecido por el operador. El canal superior se calcula como: línea media + (ATR × multiplicador). El canal inferior se calcula como: línea media - (ATR × multiplicador).
  4. Compare el precio de cierre con el canal superior/inferior para determinar la dirección de la tendencia. Si el cierre está por encima del canal superior, la tendencia es alta. Si el cierre está por debajo del canal inferior, la tendencia es baja.
  5. Una ruptura por encima o por debajo del canal genera señales comerciales inversas. Por ejemplo, una ruptura por encima del canal superior indica una entrada larga mientras que una ruptura por debajo del canal inferior indica una entrada corta.

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.

Los puntos fuertes

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.

Análisis de riesgos

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.

Áreas de mejora

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.

Conclusión

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) 


Más.