Estrategia de seguimiento de tendencias basada en zigzag


Fecha de creación: 2023-10-30 14:51:08 Última modificación: 2023-10-30 14:51:08
Copiar: 0 Número de Visitas: 843
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias basada en zigzag

Descripción general

La estrategia utiliza el indicador ZigZag para determinar la dirección de la tendencia y realizar un seguimiento de la tendencia después de la confirmación de la tendencia, pertenece a la estrategia de seguimiento de tendencias.

Principio de estrategia

La estrategia se basa en la dirección de la tendencia de los precios a través del indicador ZigZag. El indicador ZigZag puede filtrar el ruido del mercado y determinar la dirección de las principales fluctuaciones de precios. ZigZag emite una señal de negociación cuando los precios crean nuevos altos o bajos.

Concretamente, la estrategia primero calcula el valor de ZigZag, y cuando el precio crea un punto alto más alto, ZigZag es el precio de ese punto alto; cuando el precio crea un punto bajo más bajo, ZigZag es el precio de ese punto bajo. De esta manera, ZigZag puede reflejar claramente la dirección de las principales fluctuaciones de los precios.

La estrategia determina la dirección de la tendencia en función del valor de ZigZag. Cuando ZigZag sube, indica que está en una tendencia alcista; cuando ZigZag baja, indica que está en una tendencia bajista. La estrategia abre una posición cuando ZigZag se invierte para seguir la dirección de la tendencia.

En concreto, la estrategia abre una orden de compra cuando un giro de ZigZag forma un nuevo alto, y abre una orden de compra cuando un giro de ZigZag forma un nuevo bajo. La condición de la posición cerrada es que ZigZag vuelva a girar y viceversa. De esta manera, se realiza una estrategia de comercio automático basada en la tendencia de ZigZag.

Análisis de las ventajas estratégicas

  • Utilizando el indicador ZigZag para determinar las tendencias, se puede filtrar el ruido del mercado y determinar con precisión la dirección de las principales tendencias.
  • La hora de giro de ZigZag es precisa, lo que facilita la formación de una mejor hora de entrada.
  • Implementa una estrategia de seguimiento de tendencias completa, sin necesidad de otros indicadores complejos o soporte de modelos.
  • La lógica de la estrategia es simple y clara, fácil de entender y modificar.
  • Se puede ajustar la frecuencia de transacción de la estrategia de control libre a través de parámetros.

Análisis de riesgos

  • ZigZag es insensible a la conversión de los osos y toros en la línea media corta, y puede perder la vuelta más rápida.
  • Las estrategias de seguimiento de tendencias no pueden hacer frente a las pérdidas de la inversión de tendencias.
  • No se puede limitar el tamaño de las pérdidas individuales y existe un riesgo mayor de pérdidas individuales.
  • Si la estrategia se basa en un solo indicador, existe el riesgo de sobreajuste.

El riesgo puede reducirse de la siguiente manera:

  • Combinación de otros indicadores para determinar el riesgo de reversión de la tendencia.
  • Reducir adecuadamente el tiempo de tenencia de las posiciones y detener las pérdidas a tiempo.
  • Se añade un módulo de gestión de fondos para limitar el tamaño de las pérdidas individuales.
  • El objetivo de este trabajo es aumentar la robustez de las estrategias mediante el uso de modelos de aprendizaje automático.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Aumentar las estrategias de stop loss para controlar el riesgo de pérdidas individuales. Se puede establecer un stop loss móvil o un stop loss colgado.

  2. Se puede agregar indicadores como el MACD, la media móvil, etc. para cerrar posiciones cuando se determina que la tendencia se invierte.

  3. Si la tendencia continúa, se puede aumentar la posición adecuadamente para obtener más ganancias.

  4. Aumentar los modelos de aprendizaje automático. Se pueden entrenar modelos de aprendizaje profundo como LSTM, ayudando a ZigZag a determinar la dirección de las tendencias.

  5. Mecanismo de gestión de fondos optimizado. Se puede optimizar el tamaño de la posición según la teoría de la retirada o la correlación.

  6. Los parámetros de optimización global se establecen. Se pueden optimizar los parámetros de optimización a través de la retroalimentación histórica y la referencia a libros especializados, como la longitud del ciclo de ZigZag.

Resumir

La estrategia utiliza el indicador ZigZag para determinar la dirección de la tendencia, para implementar una estrategia de negociación basada en la tendencia. La lógica de la estrategia es simple, clara y fácil de implementar. Pero también hay problemas como la dependencia de un solo indicador, el riesgo de reversión de la tendencia.

Código Fuente de la Estrategia
/*backtest
start: 2022-10-23 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's ZZ Strategy v1.0", shorttitle = "ZZ str 1.0", 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(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title='Timeframe for ZigZag')
showzz = input(false, defval = false, title = "Show ZigZag")
showbg = input(false, defval = false, title = "Show Background")
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
zigzag() =>
    _isUp = close >= open
    _isDown = close <= open
    _direction = _isUp[1] and _isDown ? -1 : _isDown[1] and _isUp ? 1 : nz(_direction[1])
    _zigzag = _isUp[1] and _isDown and _direction[1] != -1 ? highest(2) : _isDown[1] and _isUp and _direction[1] != 1 ? lowest(2) : na
useAltTF = true
zz = useAltTF ? (change(time(tf)) != 0 ? request.security(syminfo.tickerid, tf, zigzag()) : na) : zigzag()
zzcolor = showzz ? black : na
plot(zz, title = 'ZigZag', color = zzcolor, linewidth = 2)

//Levels
dot = zz > 0 ? zz : dot[1]
uplevel = dot > dot[1] ? dot : uplevel[1]
dnlevel = dot < dot[1] ? dot : dnlevel[1]
colorup = close[1] < uplevel[1] and uplevel == uplevel[1] ? lime : na
colordn = close[1] > dnlevel[1] and dnlevel == dnlevel[1] ? red : na
plot(uplevel, color = colorup, linewidth = 3)
plot(dnlevel, color = colordn, linewidth = 3)

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size != size[1] ? blue : na
bgcolor(bgcol, transp = 50)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if uplevel > 0 and dnlevel > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel + syminfo.mintick)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel - syminfo.mintick)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()