ZigZag-basierter Trend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2023-10-30 14:51:08
Tags:

img

Übersicht

Diese Strategie verwendet den ZigZag-Indikator, um die Trendrichtung zu bestimmen und folgt dem Trend, sobald er bestätigt wurde.

Strategie Logik

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.

Analyse der Vorteile

  • ZigZag kann Marktlärm effektiv filtern und die Haupttrendrichtung genau bestimmen.
  • ZigZag-Schaltzeiten sind präzise und ermöglichen optimale Einstiegsmöglichkeiten.
  • Es setzt eine reine Trendstrategie ohne andere komplexe Indikatoren oder Modelle um.
  • Die Logik ist einfach und klar, leicht zu verstehen und zu ändern.
  • Die Handelsfrequenz kann über Parameter-Tuning frei gesteuert werden.

Risikoanalyse

  • ZigZag ist unempfindlich gegenüber mittelfristigen Trendumkehrungen und vermisst möglicherweise schnellere Umkehrungen.
  • Trendfolgende Strategien können mit Verlusten durch Trendumkehrungen nicht umgehen.
  • Sie beschränkt nicht die Verlustgröße von Einzelgeschäften, da sie große Einzelverlustrisiken darstellen.
  • Die Strategie stützt sich ausschließlich auf einen Indikator.

Die Risiken können verringert werden, indem

  • Kombination anderer Indikatoren zur Erkennung von Trendumkehrrisiken.
  • Verkürzung der Haltedauer, rechtzeitiger Stop-Loss.
  • Hinzufügen eines Risikomanagements zur Begrenzung der Größe einzelner Verluste.
  • Hinzufügen von Modellen für maschinelles Lernen zur Verbesserung der Robustheit.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Die Risikopositionen werden in der Regel in der Tabelle 2 aufgeführt.

  2. Hinzufügen von Mechanismen zur Erkennung von Trendumkehrungen, z.B. MACD, gleitende Durchschnitte.

  3. Hinzufügen des Wiedereintrittsmoduls, Pyramidenpositionen, wenn der Trend anhält.

  4. Fügen Sie maschinelle Lernmodelle wie LSTM hinzu, um die Trenddetektion zu unterstützen.

  5. Optimierung des Kapitalmanagements auf der Grundlage von Abzug- oder Korrelationstheorien.

  6. Komplett zu optimieren Parameter wie ZigZag Periode durch Backtesting und Referenzierung Expertise.

Zusammenfassung

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()

Mehr