
Die Multi-Time-Frame-Wellen-Trend-Tracker-Strategie ist ein Multi-Time-Frame-Trend-Tracking-Trading-System, das auf den WaveTrend-Indikatoren basiert. Die Strategie wurde speziell für 15-Minuten-Zeiträume optimiert und verwendet eine dreistufige Zeitrahmen-Alignment-Methode: Der 240-Minuten-WaveTrend dient als Makrotrend-Filter, der 30-Minuten-WaveTrend dient der Dynamikbestätigung, während der 15-Minuten-WaveTrend für die Signalgenerierung zuständig ist. Die Strategie basiert auf der Identifizierung von Ein- und Ausstiegspunkten durch Kreuzung von WaveTrend-Indikatoren auf verschiedenen Zeitrahmen, kombiniert mit einem fortschrittlichen Tracking-Stop-Loss-Mechanismus, einschließlich einer Tracking-Logik basierend auf Maximum-Gewinn und einer prozentualen-basierten Rücknahme-Toleranz, um Gewinne zu maximieren und
Der Kern der Strategie besteht darin, die Synergie der WaveTrend-Indikatoren über mehrere Zeiträume zu nutzen, um Trendrichtungen und Wendepunkte zu identifizieren. Der WaveTrend-Indikator selbst ist ein technischer Indikator, der die Beziehung zwischen dem Preis und seinem Index-Moving Average (EMA) berechnet und dann in Kombination mit Volatilitätsfaktoren den Preisüberkauf-Überverkauf-Zustand misst.
Die Umsetzung der Strategie erfolgt wie folgt:
Als erstes definieren wir die WaveTrend-Funktion, die zwei Hauptwerte berechnet (wt1 und wt2):
Die Strategie umfasst die Anwendung der WaveTrend-Indikatoren in drei Zeiträumen:
Teilnahmebedingungen:
Die Stop-Loss- und Ausstiegsmechanismen sind kombiniert:
Die Strategie erfasst und verfolgt den Einstiegspreis, die Einstiegspfeiler und die maximale Rendite für jeden Handel, um den Ausstiegspunkt dynamisch anzupassen.
Synergie in mehreren ZeitrahmenDurch die Analyse der WaveTrend-Indikatoren in verschiedenen Zeitrahmen kann die Strategie die Markttrends umfassender erfassen, die Falschsignal-Störung reduzieren und die Handelsgenauigkeit verbessern. Die niedrigen Zeitrahmen bieten einen genauen Einstiegspunkt, während die hohen Zeitrahmen sicherstellen, dass die Handelsrichtung mit den Haupttrends übereinstimmt.
Dynamische SchadensbegrenzungDie Strategie verwendet ein dreifaches Stop-Loss-Schutzsystem, bestehend aus einem festen Prozentsatz Stop-Loss, einem gewinnbasierten Tracking-Stop-Loss und einem Maximum-Ertrag-Schutzmechanismus. Diese Komplex-Stop-Strategie ermöglicht es, die Erträge aus dem Trend zu maximieren, während gleichzeitig das Kapital geschützt wird.
Visuelle RückmeldungDie Ein- und Ausstiegspunkte sind durch farbige Etiketten ((🔴) sichtbar auf der Grafik markiert und enthalten Informationen über die Pfeiler, um die Rückverfolgung und die Aufschlüsselung zu erleichtern.
Die Parameter sind flexibelDie Strategie bietet mehrere anpassbare Parameter, darunter die Stop-Loss-Trigger-Prozent-Tracking, die Tracking-Follow-Prozent-Tracking und die maximal zulässige Rücknahme-Prozent-Tracking, die der Benutzer an seine eigenen Risikopräferenzen und die Marktsituation anpassen kann.
Code ist klar.Strategie: Funktionalisierte Konstruktion, logische Unterscheidung der einzelnen Teile, einfache Verständnis und Wartung, aber auch Optimierung und Erweiterung.
Trendwende-Reaktionen im HintergrundAls eine Trendfollowing-Strategie kann es zu einer Verzögerung der Reaktion an Trendwendepunkten kommen, die zu einem größeren Rückzug bei einer Marktumkehr führt. Die Lösung besteht darin, die Stop-Loss-Parameter anzupassen oder zusätzliche Trendwendeindikatoren als Hilfsmittel hinzuzufügen.
Schwache MarktentwicklungDie Strategie wird empfohlen, nur zu aktivieren, wenn die Markttrends bestätigt werden.
ParameterempfindlichkeitDie Strategie ist sehr sensibel für die Parameter-Einstellungen der WaveTrend (n1=10, n2=21) und für die Stop-Loss-Parameter. Eine zu lockere Parameter kann zu spät zum Stoppen führen, eine zu strenge Parameter kann zu früh aus dem profitablen Trend aussteigen. Diese Parameter müssen durch historische Rückmessungen optimiert werden.
LiquiditätsrisikenDer Code verwendet standardmäßig die relative Kapitalmenge ((10%) für den Handel, was jedoch zu einem erhöhten Schlupfpunkt oder Schwierigkeiten bei der Transaktion in einem niedrig liquiden Markt führen kann. Die Positionsgröße sollte entsprechend der Liquidität der tatsächlich gehandelten Variante angepasst werden.
Anforderung einer externen DatenabhängigkeitStrategie: Die Funktion request.security (() wird verwendet, um Daten über höhere Zeiträume zu erhalten, was auf einigen Handelsplattformen zu einem Risiko von Verzögerungen oder Nichtverfügbarkeit von Daten führen kann. Es muss sichergestellt werden, dass die Handelsumgebung mehrere Datenanfragen über mehrere Zeiträume unterstützt.
Anpassung der dynamischen ParameterEs kann in Betracht gezogen werden, diese Parameter dynamisch an die Marktvolatilität (z. B. ATR) anzupassen. Zum Beispiel, die Stop-Distance in einem hoch-volatilen Umfeld zu erhöhen und den Stop-Loss in einem niedrig-volatilen Umfeld zu verschärfen, um sich an unterschiedliche Marktbedingungen anzupassen.
Zunahme der TrendstärkeDie ADX oder ein ähnlicher Indikator kann hinzugefügt werden, um die Trendstärke zu messen. Der Handel kann nur ausgeführt werden, wenn die Trendstärke einen bestimmten Tiefpunkt überschreitet, um zu viele Geschäfte in schwachen Trends oder Querkursen zu vermeiden.
Optimierung der ZeitrahmenDie aktuelle Strategie verwendet 15-minütige, 30-minütige und 60-minütige Zeitrahmen, um die optimale Kombination von Zeitrahmen durch Rücklaufanalyse zu ermitteln oder die Zeitrahmen an die Eigenschaften der verschiedenen Handelsarten anzupassen.
Anmeldung der TransaktionsmengeDie Einbindung von Transaktionsindikatoren in die Einstiegsbedingungen, um sicherzustellen, dass nur Trends, die durch Transaktionsmengen unterstützt werden, eingeschlossen werden, und die Verbesserung der Signalqualität.
Verbesserte SpielmöglichkeitenDerzeitige Ausgänge sind hauptsächlich abhängig von Stop-Loss-Triggern. Es kann in Betracht gezogen werden, ein Gewinnziel hinzuzufügen oder ein Umkehrsignal auf der Grundlage des WaveTrend-Indikators selbst als aktive Ausgangsbedingungen zu verwenden, anstatt nur auf passiven Stop-Loss zu vertrauen.
Positionsmanagement-Logik hinzugefügtDie derzeitige Strategie nutzt eine Geldverwaltung mit festen Prozentsätzen, wobei die Positionsgröße aufgrund von Volatilität oder Signalstärke dynamisch angepasst werden kann, um Positionen bei sichereren Geschäften zu erhöhen und die Risikolocke bei unsichereren Geschäften zu verringern.
Die Multi-Time-Frame-Wellen-Trend-Tracker-Strategie ist ein gut gestaltetes Trend-Tracking-System, das durch die Synergie der Multi-Time-Frame-WaveTrend-Indikatoren, kombiniert mit einem flexiblen Stop-Loss-Mechanismus, Markttrends effektiv erfasst und Risiken kontrolliert. Die Hauptvorteile der Strategie liegen in ihrer umfassenden Marktperspektive und dynamischen Risikomanagement-Methode, die jedoch in schwankenden Märkten herausgefordert werden kann. Durch die weitere Optimierung der Zeit-Frame-Auswahl, die Anpassung der dynamischen Parameter und die Hinzufügung zusätzlicher Filterbedingungen hat die Strategie das Potenzial, ein stabileres und anpassungsfähigeres Handelssystem zu werden.
/*backtest
start: 2024-07-07 00:00:00
end: 2024-11-28 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("WT-FLOW: MTF WaveTrend Trend-Follower", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === WaveTrend Fonksiyonu ===
waveTrend(_src, _n1, _n2) =>
esa = ta.ema(_src, _n1)
d = ta.ema(math.abs(_src - esa), _n1)
ci = (_src - esa) / (0.015 * d)
wt1 = ta.ema(ci, _n2)
wt2 = ta.sma(wt1, 4)
[wt1, wt2]
// === Giriş Fiyatı ve Maksimum Kazanç Değişkenleri ===
var float longEntryPrice = na
var float shortEntryPrice = na
var float maxGainLong = 0.0
var float maxGainShort = 0.0
var int longEntryBar = na
var int shortEntryBar = na
var string currentPosition = ""
// === WT Değerlerini Al (Farklı Zaman Dilimleri) ===
var int n1 = 10
var int n2 = 21
ap = hlc3
[wt1_15, wt2_15] = waveTrend(ap, n1, n2)
[wt1_30, wt2_30] = request.security(syminfo.tickerid, "30", waveTrend(ap, n1, n2))
[wt1_60, wt2_60] = request.security(syminfo.tickerid, "60", waveTrend(ap, n1, n2))
// === Kullanıcı Girdileri: Trailing Stop Parametreleri ===
marginStopPerc = input.float(2.0, "Marjinal Stop (%)")
trailTriggerPerc = input.float(1.5, "Trailing Tetikleyici (%)")
trailFollowPerc = input.float(0.8, "Trailing Takip (%)")
trailMaxDropPerc = input.float(3.0, "Maksimum Düşüş (%)")
// === ATR için tr hesaplaması ===
tr = ta.tr(true)
// === Sinyal Koşulları ===
trendUp = wt1_30 > wt2_30
trendDown = wt1_30 < wt2_30
entryLong = ta.crossover(wt1_15, wt2_15) and wt1_15 > -60 and trendUp
entryShort = ta.crossunder(wt1_15, wt2_15) and wt1_15 < 20 and trendDown
// === Pozisyon Girişleri ===
if entryLong and currentPosition != "Long"
strategy.entry("Long", strategy.long)
longEntryPrice := close
maxGainLong := 0.0
longEntryBar := bar_index
currentPosition := "Long"
label.new(bar_index, high + 2 * tr, "🟢 Giriş Long #" + str.tostring(bar_index), style=label.style_label_up, color=color.green, textcolor=color.white)
if entryShort and currentPosition != "Short"
strategy.entry("Short", strategy.short)
shortEntryPrice := close
maxGainShort := 0.0
shortEntryBar := bar_index
currentPosition := "Short"
label.new(bar_index, low - 2 * tr, "🔴 Giriş Short #" + str.tostring(bar_index), style=label.style_label_down, color=color.red, textcolor=color.white)
// === Trailing Stop ve Marjinal Stop Seviyeleri ===
if currentPosition == "Long" and not na(longEntryPrice)
gainFromEntry = (close - longEntryPrice) / longEntryPrice * 100
maxGainLong := math.max(maxGainLong, gainFromEntry)
trailTriggerReached = gainFromEntry >= trailTriggerPerc
trailStop = close * (1 - trailFollowPerc / 100)
dropStop = longEntryPrice * (1 + (maxGainLong - trailMaxDropPerc) / 100)
finalStop = trailTriggerReached ? math.max(trailStop, dropStop) : longEntryPrice * (1 - marginStopPerc / 100)
if close <= finalStop
strategy.close("Long")
label.new(bar_index, low - 2 * tr, "❅ Çıkış Long #" + str.tostring(longEntryBar), style=label.style_label_down, color=color.red, textcolor=color.white)
longEntryPrice := na
longEntryBar := na
currentPosition := ""
if currentPosition == "Short" and not na(shortEntryPrice)
gainFromEntryShort = (shortEntryPrice - close) / shortEntryPrice * 100
maxGainShort := math.max(maxGainShort, gainFromEntryShort)
trailTriggerReachedShort = gainFromEntryShort >= trailTriggerPerc
trailStopShort = close * (1 + trailFollowPerc / 100)
dropStopShort = shortEntryPrice * (1 - (maxGainShort - trailMaxDropPerc) / 100)
finalStopShort = trailTriggerReachedShort ? math.min(trailStopShort, dropStopShort) : shortEntryPrice * (1 + marginStopPerc / 100)
if close >= finalStopShort
strategy.close("Short")
label.new(bar_index, high + 2 * tr, "❄ Çıkış Short #" + str.tostring(shortEntryBar), style=label.style_label_up, color=color.green, textcolor=color.white)
shortEntryPrice := na
shortEntryBar := na
currentPosition := ""