Esta estrategia construye canales de supertrend de doble capa y genera señales comerciales cuando el precio rompe los canales. También adapta el ancho del canal utilizando la volatilidad de precios para efecto adaptativo. Pertenece a las estrategias de seguimiento de tendencias.
Calcular la desviación estándar del precio y la volatilidad ATR, utilizar la volatilidad para ajustar el ancho del canal.
Construir canales de supertendencia de doble capa, con la capa interna más sensible y la capa externa más estable.
Generar señales de compra/venta cuando el precio rompe el canal interno o externo.
La estructura de doble canal ayuda a filtrar algunos errores.
La volatilidad de ATR adapta el ancho del canal, más ancho cuando la volatilidad aumenta para un efecto adaptativo.
Los canales de super tendencias son simples y eficaces para rastrear tendencias.
El doble canal filtra falsos brotes y mejora la calidad de la señal.
El ajuste adaptado a la volatilidad hace que los canales se adapten a diferentes entornos de mercado.
Fácil de implementar con una simple puesta a punto de parámetros.
Los canales visualizados y las rupturas forman señales comerciales intuitivas.
Las señales de ruptura pueden producir señales falsas que resultan en pérdidas innecesarias.
No puede determinar la dirección de la tendencia, los riesgos de la contratrend trading.
El ajuste adaptativo puede ser demasiado sensible, con excesos de ajustes.
La optimización incorrecta de parámetros conduce a un sobreajuste.
Como una tendencia que sigue la estrategia, tiene dificultades en los mercados de rango.
Los parámetros de ensayo
Incorporar el MA para determinar las tendencias principales.
Optimice la confirmación de la fuga para evitar falsas fugas.
Añadir el stop loss al límite de pérdida por operación.
Evaluar la sintonización del canal en la frecuencia de negociación.
Utilice el aprendizaje automático para optimizar dinámicamente los parámetros.
Esta estrategia utiliza canales de súper tendencia dobles adaptativos para capturar las tendencias de precios. Es simple e intuitivo en el seguimiento de tendencias. Pero los riesgos incluyen roturas falsas y dirección de tendencia incorrecta.
/*backtest start: 2023-08-20 00:00:00 end: 2023-09-19 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000) //Inputs multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1) period = input(title="Period", type=input.integer, step=1, defval=10, minval=1) SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false) //////////////////////////////////////////////////////////////////////////////// // 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 //////////////////////////////////////////////////////////////////////////////// dev = stdev(close, period) stdDev = (dev / close) * 100 + 1 MultDev = SelfAdjust ? multi * stdDev : multi up_lev1 = hl2 - MultDev * atr(period) dn_lev1 = hl2 + MultDev * atr(period) up_lev2 = hl2 - (MultDev * 2 * atr(period)) dn_lev2 = hl2 + (MultDev * 2 * atr(period)) up_trend1 = 0.0 up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1 up_trend2 = 0.0 up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2 down_trend1 = 0.0 down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1 down_trend2 = 0.0 down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2 trend1 = 0 trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1) trend2 = 0 trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1) st_line1 = trend1 == 1 ? up_trend1 : down_trend1 st_line2 = trend2 == 1 ? up_trend2 : down_trend2 // Plotting plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1") plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2") fill(plot1, plot2, color = color.aqua, title = "Cloud") buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1 sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1 if(buy and time_cond) strategy.entry("long", long = true , comment="long") if (close < st_line1 and time_cond or close < st_line2 and time_cond) strategy.close("long") if (not time_cond) strategy.close_all()