
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.
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.
El riesgo puede reducirse de la siguiente manera:
La estrategia puede ser optimizada en los siguientes aspectos:
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.
Se puede agregar indicadores como el MACD, la media móvil, etc. para cerrar posiciones cuando se determina que la tendencia se invierte.
Si la tendencia continúa, se puede aumentar la posición adecuadamente para obtener más ganancias.
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.
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.
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.
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.
/*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()