Estrategia de negociación de canales de supertendencia adaptativa

El autor:¿ Qué pasa?, Fecha: 2023-09-20 15:17:51
Las etiquetas:

Resumen general

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.

Estrategia lógica

  1. Calcular la desviación estándar del precio y la volatilidad ATR, utilizar la volatilidad para ajustar el ancho del canal.

  2. Construir canales de supertendencia de doble capa, con la capa interna más sensible y la capa externa más estable.

  3. Generar señales de compra/venta cuando el precio rompe el canal interno o externo.

  4. La estructura de doble canal ayuda a filtrar algunos errores.

  5. La volatilidad de ATR adapta el ancho del canal, más ancho cuando la volatilidad aumenta para un efecto adaptativo.

Ventajas

  1. Los canales de super tendencias son simples y eficaces para rastrear tendencias.

  2. El doble canal filtra falsos brotes y mejora la calidad de la señal.

  3. El ajuste adaptado a la volatilidad hace que los canales se adapten a diferentes entornos de mercado.

  4. Fácil de implementar con una simple puesta a punto de parámetros.

  5. Los canales visualizados y las rupturas forman señales comerciales intuitivas.

Los riesgos

  1. Las señales de ruptura pueden producir señales falsas que resultan en pérdidas innecesarias.

  2. No puede determinar la dirección de la tendencia, los riesgos de la contratrend trading.

  3. El ajuste adaptativo puede ser demasiado sensible, con excesos de ajustes.

  4. La optimización incorrecta de parámetros conduce a un sobreajuste.

  5. Como una tendencia que sigue la estrategia, tiene dificultades en los mercados de rango.

Mejoramiento

  1. Los parámetros de ensayo repercusiones en el efecto adaptativo.

  2. Incorporar el MA para determinar las tendencias principales.

  3. Optimice la confirmación de la fuga para evitar falsas fugas.

  4. Añadir el stop loss al límite de pérdida por operación.

  5. Evaluar la sintonización del canal en la frecuencia de negociación.

  6. Utilice el aprendizaje automático para optimizar dinámicamente los parámetros.

Conclusión

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()





 


Más.