Zigzag-Ausbruchstrategie

Schriftsteller:ChaoZhang, Datum: 2023-10-20 16:37:28
Tags:

img

Übersicht

Diese Strategie verwendet den Zigzag-Indikator, um Unterstützungs- und Widerstandslinien zu zeichnen, und nimmt lange oder kurze Positionen ein, wenn der Preis die Unterstützungs- oder Widerstandslinien durchbricht.

Strategie Logik

Die Strategie verwendet zuerst den Zigzag-Indikator, um Zigzag-Linien unter bestimmten Parametern zu zeichnen. Grüne Unterstützungslinien werden gezogen, wenn der Zigzag-Indikator den Boden erreicht. Rote Widerstandslinien werden gezogen, wenn der Zigzag den Gipfel erreicht. Long-Positionen werden genommen, wenn der Preis über die grüne Linie bricht. Kurzpositionen werden genommen, wenn der Preis unter die rote Linie bricht.

Die Kernlogik lautet:

  1. Verwenden Sie EMA, um den Schlusskurs mit dreifachen exponentiellen gleitenden Durchschnitten zu glätten und erhalten Sie die glättete Kurve _hls.

  2. Beurteilen Sie, ob die glatte Kurve steigt. Wenn sie steigt und die vorherige Bar nicht steigt, gilt sie als Boden. Nehmen Sie den niedrigsten Preis dieser Bar. Wenn sie fällt und die vorherige Bar steigt, gilt sie als Top. Nehmen Sie den höchsten Preis dieser Bar. Ansonsten NaN.

  3. Wiederholen Sie diesen Vorgang, um die Zigzag-Linie zu erhalten.

  4. Wenn der Zickzack steigt, notieren Sie den aktuellen Spitzenpunkt, wenn er fällt, notieren Sie den aktuellen Tiefpunkt.

  5. Zeichne die grüne Stützungslinie nach oben, wenn der Punkt steigt, und die rote Widerstandslinie nach unten, wenn der Punkt fällt.

  6. Nehmen Sie eine Long-Position ein, wenn der Preis über die grüne Linie bricht.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Identifizieren Sie die wichtigsten Unterstützungs-/Widerstandsniveaus mit dem Zigzag-Indikator.

  2. Zigzag filtert Marktgeräusche aus und erzeugt deutlichere Handelssignale.

  3. Eintritt in Positionen durch Ausbruch, der Trendumkehrungen rechtzeitig erfassen kann.

  4. Einfache und effektive Möglichkeit, Unterstützungs-/Widerstandslinien zu zeichnen.

  5. Klare Logik und großer Parameteroptimierungsraum.

  6. Flexibilität bei der Auswahl von Produkten und Zeitrahmen.

Risikoanalyse

Risiken dieser Strategie:

  1. Ungültige Zigzag-Parameter können Handelsmöglichkeiten verpassen.

  2. Die Preise können nach dem Ausbruch Unterstützung/Widerstand erneut testen.

  3. Breakout-Signale können irreführend sein, müssen mit Trends und Mustern validiert werden.

  4. Längere seitliche Abläufe können zu übermäßigen ineffektiven Transaktionen führen.

  5. Berücksichtigen Sie die Transaktionskosten und vermeiden Sie zu häufige Transaktionen.

Lösungen:

  1. Optimieren Sie die Zigzag-Parameter, um die beste Kombination zu finden.

  2. Setzen Sie einen zeitnahen Stop-Loss nach dem Ausbruch ein, um Verluste zu begrenzen.

  3. Fügen Sie Filter wie Trendindikatoren hinzu, um die Genauigkeit zu verbessern.

  4. Identifizieren Sie die Seiten und vermeiden Sie den Handel in diesen Perioden.

  5. Breakout-Bereich entspannen, um ineffektive Trades zu reduzieren.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimieren Sie die Zigzag-Parameter durch Backtesting, um ein Optimum zu finden.

  2. Überlegen Sie, ob Sie nach dem Ausbruch erneut Unterstützung/Widerstand testen können.

  3. Fügen Sie Filter wie MA hinzu, um geringe Wahrscheinlichkeitssignale auszuschließen.

  4. Einfügen von Lautstärken, um Ausbruchssignale zu bestätigen.

  5. Einführung der doppelten Methodik von Lachenbruch (Lange und Kurze) zur Filterung falscher Signale und Gewinn.

  6. Verwenden Sie maschinelles Lernen, um Parameter dynamisch zu optimieren.

  7. Einführung einer Stop-Loss-Strategie zur Begrenzung der Risiken.

Schlussfolgerung

Zusammenfassend ist dies eine einfache und praktische Schwingungs-Breakout-Strategie. Sie zieht Unterstützung/Widerstand mit Zigzag und Trades Breakouts. Die Strategie ist anpassungsfähig, aber mit einigen Risiken. Optimierung von Parametern, Signalfiltern und Risikokontrolle kann sie verbessern. Solche Breakout-Strategien eignen sich für aktive Trader, die den Marktrhythmus erfassen können.


/*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)


Mehr