Winkelbasierte VWMA-Trendfolgestrategie mit dynamischem Trailing Stop

VWMA EMA MA PVSRA Angle BIAS
Erstellungsdatum: 2025-02-18 13:42:01 zuletzt geändert: 2025-02-18 13:42:01
Kopie: 2 Klicks: 356
1
konzentrieren Sie sich auf
1617
Anhänger

Winkelbasierte VWMA-Trendfolgestrategie mit dynamischem Trailing Stop

Überblick

Dies ist eine Trend-Tracking-Strategie, die auf einem volumengewichteten Moving Average (VWMA) und einem Index Moving Average (EMA) basiert, kombiniert mit einer Preiswinkel-Analyse und einem dynamischen Stop-Tracking-Mechanismus. Die Strategie wird hauptsächlich durch die Überwachung der Kreuzung des VWMA mit einem schnellen Moving Average verwendet, um den Einstieg zu bestimmen, während die Winkelbedingungen der Preisbewegung kombiniert werden.

Strategieprinzip

Die Kernlogik der Strategie basiert auf den folgenden Schlüsselkomponenten:

  1. Verwendet die VWMA mit 25 Zyklen als Haupttrendindikator
  2. Über 8 Phasen VWMA als Schnellsignalleitung
  3. Die Verwendung einer 50-Zyklus-EMA für die Feststellung eines längerfristigen Trends
  4. Berechnen Sie den Winkel der 50-Zyklus-EMA (setzen Sie den 45-Grad-Threshold)
  5. Optionale 200-Perioden-EMA als Marktdifferenzfilter Das Eintrittssignal wird ausgelöst, wenn der schnelle Moving Average mit dem Haupt VWMA kreuzt und der Preiswinkel die Bedingungen erfüllt. Die Strategie schützt die Gewinne durch einen 1%-Dynamic Tracking Stop.

Strategische Vorteile

  1. Multiple-Time-Frames-Verifizierung - Strategie funktioniert gut über H1 und M1
  2. Winkelfilter - reduziert Falschbrüche durch die Einführung von Winkelbedingungen für die Preisbewegung
  3. Perfekte Risikomanagement - Prozentsatz für die Verfolgung von Stop-Losses und dynamische Gewinnschutz
  4. Anpassungsfähigkeit - Anpassung an unterschiedliche Marktbedingungen durch Parameter
  5. Trendbestätigung ausreichend - Trendbestätigung mit mehreren Moving Averages

Strategisches Risiko

  1. Schwache Marktergebnisse - häufige Falschsignale auf der Querplatte
  2. Verzögerte Eintrittszeiten - Möglicherweise verpasste Möglichkeiten zu Beginn des Trends durch die Verwendung von Mehrfachbestätigungen
  3. Der M15-Zeitrahmen wirkt nicht gut - sollte vermieden werden
  4. Parameter-Sensitivität - die Wahl der Winkel-Trenche und der Moving-Average-Periode hat einen größeren Einfluss auf die Strategie-Performance
  5. Verfolgung von Stop-Losses kann zu früh auftreten - kann zu einem vorzeitigen Stop-Loss führen, wenn der Markt stark schwankt

Richtung der Strategieoptimierung

  1. Einführung eines Anpassungsmechanismus für die Volatilität - Stop-Loss-Prozentsatz, der dynamisch an die Marktfluktuation angepasst wird
  2. Erhöhung der Transaktionsmenge Filter - Signalqualität durch Transaktionsmenge Bestätigung zu verbessern
  3. Optimierte Winkelberechnungsmethoden - Erwägen Sie die Verwendung von Adaptionswinkel-Thresholds
  4. Marktsituationserkennung - Entwicklung von Trend-/Sturm-Markterkennung
  5. Verbesserte Ausstiegsmechanismen - Optimierung des Ausstiegszeitpunkts in Kombination mit Preisformeln und Dynamikindikatoren

Zusammenfassen

Dies ist eine gut strukturierte Trend-Tracking-Strategie, die durch die Kombination von Winkelanalyse und mehreren Moving Averages eine bessere Performance in den Haupttrends erzielt. Obwohl es einige Probleme mit der Rückstands- und Parameter-Sensitivität gibt, gibt es noch Raum für eine Verbesserung der Strategie durch die empfohlene Optimierung der Richtung.

Strategiequellcode
/*backtest
start: 2024-02-18 00:00:00
end: 2024-10-16 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("PVSRA Trailing Strategy with Angle Condition (40-50 degrees)", overlay=true)

// === INPUTS ===
priceData = input.source(close, title="Price Data")
maLength  = input.int(25, title="Moving Average Length", minval=2)
useBias   = input.bool(false, title="Long/Short just above/below 200 EMA")
useTrailing = input.bool(true, title="Use Trailing Stop")
trailPerc  = input.float(1.0, title="Trailing Stop Percentage", minval=0.1)
anglePeriod = input.int(14, title="Period for Angle Calculation", minval=1)

// === CÁLCULOS ===
maValue = ta.vwma(priceData, maLength)
maLong  = ta.ema(high, 50)
maShort = ta.ema(low, 50)
maFast  = ta.vwma(close, 8)
bias    = ta.ema(close, 200)
longBias  = useBias ? close > bias : true
shortBias = useBias ? close < bias : true

// === CÁLCULO DO ÂNGULO DA MÉDIA MÓVEL DE 50 ===
ma50 = ta.ema(close, 50)
angle = math.atan((ma50 - ma50[anglePeriod]) / anglePeriod) * (180 / math.pi)  // Converte radianos para graus

// === CONDIÇÃO DE ÂNGULO ===
validAngleL = angle >= 45
validAngleS = angle <= 45

// === PLOTS ===
plot(maValue, color=color.orange, title="Moving Average")
plot(maFast, color=color.green, title="Fast MA")
plot(ma50, color=color.blue, title="50 EMA")

plotshape(series=(strategy.position_size > 0) ? maValue : na,
     color=color.red, style=shape.circle, location=location.absolute,
     title="Long Stop")

plotshape(series=(strategy.position_size < 0) ? maValue : na,
     color=color.red, style=shape.cross, location=location.absolute,
     title="Short Stop")

// === CONDIÇÕES DE ENTRADA ===
enterLong  = close > maValue and ta.crossover(maFast, maValue) and close > maLong and longBias and validAngleL
enterShort = close < maValue and ta.crossunder(maFast, maValue) and close < maShort and shortBias and validAngleS

// === CONDIÇÕES DE SAÍDA ===
exitLong  = ta.crossunder(maFast, maValue) and strategy.position_size > 0
exitShort = ta.crossover(maFast, maValue) and strategy.position_size < 0

// === EXECUÇÃO DA ESTRATÉGIA ===
if (enterLong)
    strategy.entry("EL", strategy.long)

if (enterShort)
    strategy.entry("ES", strategy.short)

if (exitLong or exitShort)
    strategy.close_all()

// === TRAILING STOP ===
if (useTrailing and strategy.position_size > 0)
    trailPrice = close * (1 - trailPerc / 100)
    strategy.exit("Trailing Long", from_entry="EL", stop=trailPrice)

if (useTrailing and strategy.position_size < 0)
    trailPrice = close * (1 + trailPerc / 100)
    strategy.exit("Trailing Short", from_entry="ES", stop=trailPrice)