Trend-Momentum-Strategie - Zickzack-Mehrperioden-Dynamisches Band-Timing-System

SL TP PH PL
Erstellungsdatum: 2025-02-18 13:29:06 zuletzt geändert: 2025-02-18 13:29:06
Kopie: 1 Klicks: 343
1
konzentrieren Sie sich auf
1617
Anhänger

Trend-Momentum-Strategie - Zickzack-Mehrperioden-Dynamisches Band-Timing-System

Überblick

Die Strategie ist ein multidimensionales Trading-System, das den ZigZag- und den %R-William-Index kombiniert. Durch den ZigZag-Index werden wichtige Bandbreiten-Höchst- und Tiefpunkte identifiziert, während der William-Index verwendet wird, um die Einstiegspunkte zu bestätigen, wenn der Markt überkauft oder überverkauft ist. Diese Kombination kann nicht nur die wichtigsten Trendwendepunkte des Marktes erfassen, sondern auch die Genauigkeit des Handels durch Dynamikbestätigung verbessern.

Strategieprinzip

Die Kernlogik der Strategie basiert auf zwei Hauptkomponenten:

  1. Der Wörterbuch-Indikator identifiziert durch die festgelegte Tiefe und Abweichungsparameter signifikante Bandhöhen und -tiefpunkte, filtert Marktlärm und bestimmt die Trendrichtung. Wenn ein neuer Bandtiefpunkt gebildet wird, zeigt dies den Beginn eines Aufwärtstrends an, und ein neuer Bandhochpunkt zeigt den Beginn eines Abwärtstrends.
  2. Der William-Indikator berechnet die Dynamik des Marktes, indem er den aktuellen Preis mit dem Höchstpreis in einer bestimmten Periode vergleicht. Wenn der Indikatorwert 80 überschreitet, bedeutet dies Überverkauf (potentielle Kaufmöglichkeit), und ein Durchbruch von 20 bedeutet Überkauf (potentielle Verkaufsmöglichkeit).

Die Handelsregeln der Strategie lauten wie folgt:

  • Multi-Bedingung: Der Wörterbuch-Indikator erkennt neue Bandtiefpunkte und der William-Indikator springt aus der Überverkaufszone nach oben
  • Leerlaufbedingungen: Der Wortsymbol-Indikator identifiziert neue Bandhochpunkte und der William-Indikator bricht aus der Überkaufszone nach unten
  • Stop-Loss-Einstellung ist 1%, Stop-Stop-Einstellung ist 2%.

Strategische Vorteile

  1. Multidimensionelle Bestätigung: Verbesserung der Zuverlässigkeit von Handelssignalen durch Trend- und Dynamik-Doppelbestätigung
  2. Anpassungsfähigkeit: Die Abweichungsparameter des Wörterform-Indikators können dynamisch an die Marktfluktuation angepasst werden
  3. Gute Risikokontrolle: Eine Stop-Loss-Strategie mit einem festen Prozentsatz, um das Risiko für jeden Handel zu kontrollieren
  4. Gute Visualisierung: Handelssignale werden durch Etiketten und Grafiken klar dargestellt, um sie zu analysieren und zu optimieren

Strategisches Risiko

  1. Schwankungsrisiko: Häufige falsche Durchbruchsignale in den OTC-Märkten
  2. Rutschrisiko: Bei schnellen Fahrten kann es zu einem größeren Rutsch kommen.
  3. Parameter-Sensitivität: Die Auswahl der Indikatorparameter hat einen großen Einfluss auf die Strategie-Performance
  4. Signalverzögerung: Einige schnelle Ereignisse können verpasst werden, da neue Bandbreiten bestätigt werden müssen.

Richtung der Strategieoptimierung

  1. Zusätzliche Marktumfeld-Filterung: Fluktuationsindikatoren können hinzugefügt werden, um den Marktzustand zu identifizieren, wobei verschiedene Parameter-Einstellungen für verschiedene Umgebungen verwendet werden
  2. Dynamische Stop-Loss-Optimierung: Die Stop-Loss-Position kann dynamisch anhand des ATR oder der Volatilität angepasst werden
  3. Einführung der Transaktionsbestätigung: Erhöhung der Transaktionsbestätigung bei der Signalerzeugung
  4. Zeit-Filter: Sie können einen Zeitbereich-Filter hinzufügen, um zu vermeiden, dass Sie zu schwankenden Zeiten handeln.

Zusammenfassen

Es ist ein vollständiges Handelssystem, das Trendverfolgung und Dynamikhandel kombiniert. Durch die synchronisierte Wirkung mehrerer technischer Indikatoren ist es möglich, das Risiko effektiv zu kontrollieren, während eine hohe Gewinnrate beibehalten wird. Obwohl es eine gewisse Rückständigkeit gibt, können durch eine vernünftige Parameteroptimierung und Risikomanagement stabile Handelswirkung erzielt werden.

Strategiequellcode
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-15 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Zig Zag + Williams %R Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=300)

// ====================
// === Parameters
// ====================

// Zig Zag parameters
zigzag_depth = input.int(5, title="Zig Zag Depth", minval=1)
zigzag_deviation = input.float(1.0, title="Zig Zag Deviation (%)", minval=0.1, step=0.1)

// Williams %R parameters
williams_length = input.int(14, title="Williams %R Length", minval=1)
williams_overbought = input.int(-20, title="Williams %R Overbought", minval=-100, maxval=0)
williams_oversold = input.int(-80, title="Williams %R Oversold", minval=-100, maxval=0)

// ====================
// === Zig Zag Calculation
// ====================

// Initialize variables
var float last_pivot_high = na
var float last_pivot_low = na
var int zz_dir = 0  // 1 for uptrend, -1 for downtrend

// Calculate pivots
pivot_high = ta.pivothigh(high, zigzag_depth, zigzag_depth)
pivot_low = ta.pivotlow(low, zigzag_depth, zigzag_depth)

// Update Zig Zag direction and last pivots with deviation
if (not na(pivot_high))
    if (zz_dir != -1)  // Only change to downtrend if not already in downtrend
        if (na(last_pivot_high) or (high[zigzag_depth] > last_pivot_high * (1 + zigzag_deviation / 100)))
            last_pivot_high := high[zigzag_depth]
            zz_dir := -1
            label.new(bar_index[zigzag_depth], high[zigzag_depth], text="PH", color=color.red, style=label.style_label_down)

if (not na(pivot_low))
    if (zz_dir != 1)  // Only change to uptrend if not already in uptrend
        if (na(last_pivot_low) or (low[zigzag_depth] < last_pivot_low * (1 - zigzag_deviation / 100)))
            last_pivot_low := low[zigzag_depth]
            zz_dir := 1
            label.new(bar_index[zigzag_depth], low[zigzag_depth], text="PL", color=color.green, style=label.style_label_up)

// ====================
// === Williams %R Calculation
// ====================

// Calculate Williams %R manually
highest_high = ta.highest(high, williams_length)
lowest_low = ta.lowest(low, williams_length)
williams_r = (highest_high - close) / (highest_high - lowest_low) * -100

// ====================
// === Trade Conditions
// ====================

// Assign crossover and crossunder results to variables
crossover_williams = ta.crossover(williams_r, williams_oversold)
crossunder_williams = ta.crossunder(williams_r, williams_overbought)

// Define trade conditions
longCondition = (zz_dir == 1) and crossover_williams
shortCondition = (zz_dir == -1) and crossunder_williams

// ====================
// === Trading
// ====================

// Enter Long
if (longCondition)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, low, text="BUY", color=color.green, style=label.style_label_up)

// Enter Short
if (shortCondition)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, high, text="SELL", color=color.red, style=label.style_label_down)

// ====================
// === Visualization
// ====================

// Plot Zig Zag pivot shapes
plotshape(series=(not na(pivot_high) and high[zigzag_depth] == last_pivot_high), title="Swing High", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, text="ZZ High")
plotshape(series=(not na(pivot_low) and low[zigzag_depth] == last_pivot_low), title="Swing Low", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small, text="ZZ Low")

// Plot Williams %R
hline(williams_overbought, "Overbought", color=color.red, linestyle=hline.style_dashed)
hline(williams_oversold, "Oversold", color=color.green, linestyle=hline.style_dashed)
plot(williams_r, title="Williams %R", color=color.blue)

// Debug plot for Zig Zag direction
plot(zz_dir, title="Zig Zag Direction", color=color.orange, linewidth=2)

// ====================
// === Risk Management
// ====================

// Risk parameters
stop_loss_perc = input.float(1.0, title="Stop Loss (%)") / 100
take_profit_perc = input.float(2.0, title="Take Profit (%)") / 100

// Stop Loss and Take Profit for Long
if (longCondition)
    strategy.exit("Long Exit", from_entry="Long", stop=close * (1 - stop_loss_perc), limit=close * (1 + take_profit_perc))

// Stop Loss and Take Profit for Short
if (shortCondition)
    strategy.exit("Short Exit", from_entry="Short", stop=close * (1 + stop_loss_perc), limit=close * (1 - take_profit_perc))