Diese Strategie verwendet den ZigZag-Indikator, um die Trendrichtung zu bestimmen und folgt dem Trend, sobald er bestätigt wurde.
Die Strategie verwendet hauptsächlich den ZigZag-Indikator, um die Kurstrendrichtung zu bestimmen. ZigZag kann Marktlärm filtern und wichtige Kursschwankungsrichtungen identifizieren. Es erzeugt Handelssignale, wenn die Preise neue Höchststände oder Tiefstände erreichen.
Speziell berechnet die Strategie zuerst die ZigZag-Werte. Wenn die Preise ein höheres Hoch erreichen, wird der ZigZag-Wert zum hohen Preis. Wenn die Preise ein niedrigeres Tief erreichen, wird der ZigZag-Wert zum niedrigen Preis. So kann ZigZag die Hauptpreisschwankungsrichtung deutlich widerspiegeln.
Die Strategie bestimmt die Trendrichtung basierend auf ZigZag-Werten. Wenn ZigZag steigt, zeigt es einen Aufwärtstrend an. Wenn ZigZag fällt, zeigt es einen Abwärtstrend an. Die Strategie eröffnet Positionen, wenn ZigZag umdreht, um der Trendrichtung zu folgen.
Insbesondere geht die Strategie lang, wenn ZigZag zu einem neuen Höchststand kommt, und kurz, wenn ZigZag zu einem neuen Tiefstand kommt.
Die Risiken können verringert werden, indem
Die Strategie kann in folgenden Aspekten optimiert werden:
Die Risikopositionen werden in der Regel in der Tabelle 2 aufgeführt.
Hinzufügen von Mechanismen zur Erkennung von Trendumkehrungen, z.B. MACD, gleitende Durchschnitte.
Hinzufügen des Wiedereintrittsmoduls, Pyramidenpositionen, wenn der Trend anhält.
Fügen Sie maschinelle Lernmodelle wie LSTM hinzu, um die Trenddetektion zu unterstützen.
Optimierung des Kapitalmanagements auf der Grundlage von Abzug- oder Korrelationstheorien.
Komplett zu optimieren Parameter wie ZigZag Periode durch Backtesting und Referenzierung Expertise.
Die Strategie identifiziert die Trendrichtung durch ZigZag und handelt den Trend. Die Logik ist einfach und einfach umzusetzen. Aber Risiken wie Einzelschlag und Trendumkehr existieren. Wir können über Stop-Loss, Hilfsindikatoren, Re-Entry, Machine-Learning-Modelle usw. optimieren, um sie robuster und rationaler zu machen. Mit geeigneten Parametern und Risikokontrollen kann es mittelfristige Trends effektiv verfolgen.
/*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()