Estrategia de escape de zigzag

El autor:¿ Qué pasa?, Fecha: 2023-10-20 16:37:28
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el indicador Zigzag para trazar líneas de soporte y resistencia y toma posiciones largas o cortas cuando el precio rompe las líneas de soporte o resistencia.

Estrategia lógica

La estrategia utiliza primero el indicador Zigzag para trazar líneas de Zigzag bajo ciertos parámetros. Las líneas de soporte verdes se dibujan cuando el indicador Zigzag baja. Las líneas de resistencia rojas se dibujan cuando el Zigzag sube. Las posiciones largas se toman cuando el precio se rompe por encima de la línea verde. Las posiciones cortas se toman cuando el precio se rompe por debajo de la línea roja.

Específicamente, la lógica central es:

  1. Utilice ema para suavizar el precio de cierre con promedios móviles exponenciales triples, obteniendo la curva suavizada _hls.

  2. Juzga si la curva suavizada está subiendo. Si está subiendo y la barra anterior no estaba subiendo, se considera un fondo. Tome el precio más bajo de esta barra. Si está cayendo y la barra anterior estaba subiendo, se considera una cima. Tome el precio más alto de esta barra. De lo contrario, NaN.

  3. Repita este proceso para obtener la línea zigzag.

  4. Cuando el zigzag se eleve, registre el punto máximo actual. Cuando caiga, registre el punto mínimo actual.

  5. Dibuja la línea de apoyo verde hacia arriba cuando el punto sube. Dibuja la línea de resistencia roja hacia abajo cuando el punto cae.

  6. Tome una posición larga cuando el precio se rompe por encima de la línea verde. Tome una posición corta cuando el precio se rompe por debajo de la línea roja.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. Identifique los niveles de soporte/resistencia clave utilizando el indicador Zigzag.

  2. El zigzag filtra el ruido del mercado, generando señales comerciales más claras.

  3. Introduzca posiciones mediante breakout, que puede capturar oportunamente las inversiones de tendencia.

  4. Una forma sencilla y efectiva de dibujar líneas de soporte/resistencia.

  5. Lógica clara y un gran espacio de optimización de parámetros.

  6. Flexibilidad en la elección de productos y plazos, gran adaptabilidad.

Análisis de riesgos

Riesgos de esta estrategia:

  1. Los parámetros incorrectos de Zigzag pueden perder oportunidades comerciales.

  2. Los precios pueden volver a probar soporte/resistencia después de la ruptura.

  3. Las señales de ruptura pueden ser engañosas, necesitan validación con tendencias y patrones.

  4. Las transacciones que se realizan de forma lateral durante mucho tiempo pueden generar operaciones ineficaces excesivas.

  5. Tenga en cuenta los costos de transacción y evite el comercio demasiado frecuente.

Soluciones:

  1. Optimice los parámetros de Zigzag para encontrar la mejor combinación.

  2. Establezca un stop loss oportuno después de la ruptura para limitar las pérdidas.

  3. Añadir filtros como indicadores de tendencia para mejorar la precisión.

  4. Identifique los laterales y evite el comercio durante estos períodos.

  5. Relaja el rango de ruptura para reducir las operaciones ineficaces.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimice los parámetros de Zigzag mediante pruebas de retroceso para encontrar el óptimo.

  2. Considere la posibilidad de volver a probar soporte/resistencia después de la ruptura.

  3. Añadir filtros como MA para filtrar señales de baja probabilidad.

  4. Incorpore indicadores de volumen para confirmar las señales de ruptura.

  5. Implementar la doble metodología de Lachenbruch (larga y corta) para filtrar las señales incorrectas y los beneficios.

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

  7. Introduzca una estrategia de stop loss para limitar los riesgos.

Conclusión

En resumen, esta es una estrategia de rotura de oscilación sencilla y práctica. Atrae soporte/resistencia usando zigzag y roturas de operaciones. La estrategia es adaptable pero con algunos riesgos. La optimización de parámetros, filtros de señal y control de riesgos puede mejorarla.


/*backtest
start: 2022-10-13 00:00:00
end: 2023-10-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
// strategy(title = "Noro's ZZ-2 Strategy", shorttitle = "Noro's ZZ-2 Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(4, title = "ZigZag length")
Extreme = input(4, title = "ZigZag extreme")
src = input(close, title = "Source")
showzz = input(false, defval = false, title = "Show ZigZag")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//ZigZag
f_zz(_length, _detection)=>
    _hls = ema(ema(ema(src, _length), round(_length*0.66)), round(_length*0.33))
    _isRising = _hls >= _hls[1]
    _zigzag = _isRising and not _isRising[1] ? lowest(_detection) :  not _isRising and _isRising[1] ? highest(_detection) : na
zigzag = f_zz(length, Extreme)
zzcol = showzz ? black : na
plot(zigzag, color = zzcol, linewidth = 2)

//Levels
dot = 0.0
dot := zigzag > 0 ? zigzag : dot[1]
uplevel = 0.0
uplevel := dot > dot[1] ? zigzag : uplevel[1]
dnlevel = 0.0
dnlevel := dot < dot[1] ? zigzag : dnlevel[1]
upcol = na
upcol := dot > dot[1] ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := dot < dot[1] ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if dot > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)


Más.