Cette stratégie utilise l'indicateur Zigzag pour tracer des lignes de support et de résistance et prend des positions longues ou courtes lorsque le prix franchit les lignes de support ou de résistance.
La stratégie utilise d'abord l'indicateur Zigzag pour tracer des lignes Zigzag sous certains paramètres. Les lignes de support vertes sont tracées lorsque l'indicateur Zigzag se trouve au fond. Les lignes de résistance rouges sont tracées lorsque l'indicateur Zigzag atteint le sommet. Les positions longues sont prises lorsque le prix dépasse la ligne verte. Les positions courtes sont prises lorsque le prix dépasse la ligne rouge.
Plus précisément, la logique de base est la suivante:
Utilisez l'EMA pour lisser le prix de clôture avec des moyennes mobiles exponentielles triples, obtenant la courbe lissée _hls.
Jugez si la courbe lissée est en hausse. Si elle est en hausse et que la barre précédente n'était pas en hausse, elle est considérée comme un bas. Prenez le prix le plus bas de cette barre. Si elle est en baisse et que la barre précédente était en hausse, elle est considérée comme un sommet. Prenez le prix le plus élevé de cette barre. Sinon NaN.
Répétez ce processus pour obtenir la ligne en zigzag.
Lorsque le zigzag s'élève, enregistrez le point de pointe actuel. Lorsque vous tombez, enregistrez le point de basse.
Tracez la ligne de support verte vers le haut lorsque le point monte, la ligne de résistance rouge vers le bas lorsque le point descend.
Prenez une position longue lorsque le prix dépasse la ligne verte. Prenez une position courte lorsque le prix dépasse la ligne rouge.
Les avantages de cette stratégie sont les suivants:
Identifier les niveaux de support/résistance clés à l'aide de l'indicateur Zigzag.
Zigzag filtre un peu de bruit du marché, générant des signaux de trading plus clairs.
Entrer dans des positions par rupture, ce qui peut capturer en temps opportun les renversements de tendance.
Une façon simple et efficace de tracer des lignes de soutien/résistance.
Une logique claire et un grand espace d'optimisation des paramètres.
Flexibilité dans le choix des produits et des délais.
Les risques de cette stratégie:
Des paramètres Zigzag incorrects peuvent manquer des opportunités de trading.
Les prix peuvent retester le support/résistance après la rupture.
Les signaux de rupture peuvent être trompeurs, ils doivent être validés avec des tendances et des modèles.
Les transactions qui se déroulent de façon latérale pendant de longues périodes peuvent entraîner des transactions inefficaces excessives.
Prenez en considération les coûts de transaction et évitez les transactions trop fréquentes.
Les solutions:
Optimisez les paramètres Zigzag pour trouver la meilleure combinaison.
Réglez un stop-loss opportun après la rupture pour limiter les pertes.
Ajouter des filtres comme des indicateurs de tendance pour améliorer la précision.
Identifiez les côtés et évitez de négocier pendant ces périodes.
Réduisez la portée de rupture pour réduire les transactions inefficaces.
La stratégie peut être optimisée dans les aspects suivants:
Optimiser les paramètres Zigzag en effectuant des tests pour trouver l'optimum.
Considérez la possibilité de réessayer le support/résistance après la rupture.
Ajoutez des filtres comme MA pour filtrer les signaux à faible probabilité.
Incorporer des indicateurs de volume pour confirmer les signaux de rupture.
Mettre en œuvre la double méthodologie de Lachenbruch (longue et courte) pour filtrer les signaux incorrects et les bénéfices.
Utilisez l'apprentissage automatique pour optimiser dynamiquement les paramètres.
Mettre en place une stratégie de stop loss pour limiter les risques.
En résumé, il s'agit d'une stratégie de rupture d'oscillation simple et pratique. Elle attire le support/résistance en utilisant le zigzag et les ruptures de transactions. La stratégie est adaptative mais présente certains risques. L'optimisation des paramètres, des filtres de signal et du contrôle des risques peut l'améliorer.
/*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)