Cette stratégie utilise l'indicateur ZigZag pour déterminer la direction de la tendance et suit la tendance une fois confirmée.
La stratégie utilise principalement l'indicateur ZigZag pour déterminer la direction de la tendance des prix. ZigZag peut filtrer le bruit du marché et identifier les principales directions de fluctuation des prix.
Plus précisément, la stratégie calcule d'abord les valeurs de ZigZag. Lorsque les prix atteignent un plus haut niveau, la valeur de ZigZag devient le prix élevé. Lorsque les prix atteignent un plus bas bas, la valeur de ZigZag devient le prix bas. Ainsi, ZigZag peut clairement refléter la direction principale de la fluctuation des prix.
La stratégie détermine la direction de la tendance en fonction des valeurs de ZigZag. Lorsque ZigZag augmente, cela indique une tendance à la hausse. Lorsque ZigZag tombe, cela indique une tendance à la baisse. La stratégie ouvre des positions lorsque ZigZag se retourne pour suivre la direction de la tendance.
En particulier, la stratégie va long lorsque ZigZag tourne vers un nouveau sommet, et va court lorsque ZigZag tourne vers un nouveau bas.
Les risques peuvent être réduits par:
La stratégie peut être optimisée dans les aspects suivants:
L'exposition au risque de perte unique est contrôlée par l'ajout d'un stop loss, par exemple un stop limit ou un stop trailing.
Ajouter des mécanismes de détection de l'inversion de tendance, par exemple MACD, moyennes mobiles. Fermer les positions lorsque l'inversion est détectée.
Ajoutez le module de rentrée, les positions pyramidales quand la tendance continue.
Ajouter des modèles d'apprentissage automatique comme LSTM pour aider à la détection de tendance.
Optimiser la gestion des capitaux sur la base de théories de la réduction ou de la corrélation.
Optimiser de manière complète des paramètres tels que la période ZigZag par le backtesting et l'expertise de référence.
La stratégie identifie la direction de la tendance par ZigZag et négocie la tendance. La logique est simple et facile à mettre en œuvre. Mais des risques tels que la dépendance à un seul indicateur et l'inversion de tendance existent. Nous pouvons optimiser via stop loss, indicateurs auxiliaires, réentrée, modèles d'apprentissage automatique, etc. pour le rendre plus robuste et rationnel. Avec des paramètres et des contrôles de risque appropriés, il peut suivre efficacement les tendances à moyen et long terme.
/*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()