
Cette stratégie utilise les indicateurs ZigZag pour déterminer la direction d’une tendance et la suivre après la confirmation de la tendance.
La stratégie utilise principalement l’indicateur ZigZag pour déterminer la direction de la tendance des prix. L’indicateur ZigZag est capable de filtrer le bruit du marché et de déterminer la direction des principales fluctuations des prix.
En particulier, la stratégie commence par calculer la valeur ZigZag, qui est le prix du sommet lorsque le prix atteint un sommet plus élevé; et le prix du bas lorsque le prix atteint un sommet plus bas. Ainsi, ZigZag reflète clairement la direction des principales fluctuations des prix.
La stratégie détermine la direction de la tendance en fonction de la valeur de ZigZag. Quand ZigZag est en hausse, il indique qu’il est en hausse; quand ZigZag est en baisse, il indique qu’il est en baisse.
Plus précisément, la stratégie consiste à ouvrir un ordre supplémentaire lorsque le virage ZigZag forme un nouveau haut, et à ouvrir un ordre vide lorsque le virage ZigZag forme un nouveau bas. La condition de placement est que le virage ZigZag se retourne à nouveau. Ainsi, une stratégie de trading automatique basée sur le jugement de la tendance ZigZag est réalisée.
Le risque peut être réduit par:
Cette stratégie peut être optimisée dans les domaines suivants:
Augmentation de la stratégie de stop loss pour contrôler le risque de perte unique. Stop loss mobile ou stop loss suspendu peuvent être configurés.
Ajout d’un mécanisme de jugement de renversement de tendance. Vous pouvez ajouter des indicateurs tels que le MACD, la moyenne mobile, et fermer une position lorsque vous jugez que la tendance est en train de se renverser.
Ajouter un module de réintégration. Si la tendance se poursuit, il est possible d’augmenter la position de manière appropriée afin de réaliser plus de profits.
Ajout de modèles d’apprentissage automatique. Les modèles d’apprentissage en profondeur tels que LSTM peuvent être formés pour aider ZigZag à déterminer la direction des tendances.
Optimisation des mécanismes de gestion des fonds. La taille des positions peut être optimisée en fonction des retraits ou de la théorie de la corrélation.
Les paramètres d’optimisation globaux sont définis. Les paramètres d’optimisation peuvent être analysés à l’aide de la rétroaction historique et de la référence à des livres spécialisés, tels que la longueur de cycle de ZigZag.
La stratégie utilise les indicateurs ZigZag pour déterminer la direction de la tendance et implémenter une stratégie de trading basée sur la tendance. La logique de la stratégie est simple et claire et facile à mettre en œuvre. Mais il existe également des problèmes tels que la dépendance à un seul indicateur et le risque de renversement de tendance.
/*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()