Übersicht: Dies ist eine Trendfolgestrategie, die den Wellen-Trend-Oszillator verwendet, um Trends zu identifizieren. Es berechnet exponentielle gleitende Durchschnitte des Durchschnittspreises und die absolute Preisdifferenz, um eine Wellen-Trend-Linie zu zeichnen. Handelssignale werden erzeugt, wenn die Wellen-Trend-Linie Überkauf-/Überverkaufszonen überschreitet. Zusätzliche Filter auf gleitendem Durchschnitt und Volumen vermeiden falsche Signale.
Strategie Logik:
Berechnen Sie den durchschnittlichen Preis ap = (Hoch + Tief + Schließen) / 3
Berechnung der n-Perioden-EMA von ap, um esa zu erhalten
Berechnung des n-Perioden-EMA der absoluten Differenz zwischen ap und esa, um d zu erhalten
Berechnen Sie die Wellen-Trendlinie: ci = (ap - esa) /(0.015*d)
Berechnen Sie den n2-Perioden-EMA von ci, um die endgültige Wellen-Trendlinie tci, d. h. wt1 zu erhalten
Berechnen Sie den 4-Perioden-SMA von wt1 um wt2 zu erhalten
Überkaufte/überverkaufte Grundstücke obLevel1/2
Erstellen Sie ein Kaufsignal, wenn wt1 über obLevel2 geht; erzeugen Sie ein Verkaufssignal, wenn wt1 unter osLevel2 geht
Fügen Sie gleitenden Durchschnitt emaFilter und Volumenfilter VolumeFilter als Filter hinzu, um falsche Signale zu vermeiden
Vermögenswerte, die nicht in den unter Artikel 36 Absatz 1 Buchstabe c der CRR aufgeführt sind
Vorteile:
Die Wellen-Trendlinie verarbeitet Trend-/Gegen-Trend-Übergänge gut
Verlässlichkeit durch doppelte Filter für gleitenden Durchschnitt und Volumen verbessert
Mehrfache Parameter vermeiden Einschränkungen eines einzelnen Indikators
Vermögenswerte, die nicht in den Wertpapieren enthalten sind
Risiken und Grenzen:
Auswahl der Parameter kann zu schlechter Leistung oder Überanpassung führen
Keine endgültigen Leitlinien für optimale Parameter
Ignoriert breitere Marktbedingungen
Risiko von Schlagsägen in den Märkten mit Bandbreite/Schlagkraft
Fehlen von Ausstiegsregeln abgesehen von Gewinn-/Stop-Loss-Verfahren
Möglichkeiten zur Verbesserung:
Prüfparameter für Zeiträume/Vermögenswerte zur Ermittlung optimaler Werte
Einbeziehung von Volatilitätsmetriken zur Vermeidung von Niedrigvolatilitätsregelungen
Hinzufügen von Indikatoren wie RSI zur Verbesserung der Signalgenauigkeit
Erstellen Sie ein maschinelles Lernmodell, um optimale maßgeschneiderte Parameter zu finden
Verstärkung von Exits mit Trailing Stops oder volatilitätsbasierten Exits
Schlussfolgerung:
Es ist eine Trend-Folge-Strategie, die den Wellen-Trend-Indikator mit zusätzlichen Filtern umfasst. Es nutzt die Fähigkeit der Wellen-Trend-Linie, Trendübergänge zu identifizieren, verwendet gleitende Durchschnitts- und Volumenfilter, um falsche Signale zu vermeiden, und zielt darauf ab, die meisten mittelfristigen / langfristigen Trends zu erfassen. Profit/Stop-Loss wird verwendet, um das Risiko zu kontrollieren. Es besteht eine bedeutende Möglichkeit, die Leistung über mehr Instrumente und Zeitrahmen hinweg zu verbessern, indem Parameter optimiert werden, mehr Indikatoren hinzugefügt werden und Techniken wie maschinelles Lernen verwendet werden.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bush Strategy test", shorttitle="Nique Audi", overlay=false) // Paramètres n1 = input(10, title="Channel Length") n2 = input(21, title="Average Length") obLevel1 = input(60, title="Over Bought Level 1") obLevel2 = input(53, title="Over Bought Level 2") osLevel1 = input(-65, title="Over Sold Level 1") osLevel2 = input(-60, title="Over Sold Level 2") takeProfitPercentage = input(1, title="Take Profit (%)") stopLossPercentage = input(0.50, title="Stop Loss (%)") // Calculs ap = hlc3 esa = ta.ema(ap, n1) d = ta.ema(math.abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ta.ema(ci, n2) wt1 = tci wt2 = ta.sma(wt1, 4) // Tracé des lignes plot(0, color=color.gray) plot(obLevel1, color=color.red) plot(osLevel1, color=color.green) plot(obLevel2, color=color.red, style=plot.style_line) plot(osLevel2, color=color.green, style=plot.style_line) plot(wt1, color=color.green) plot(wt2, color=color.red, style=plot.style_line) // Tracé de la différence entre wt1 et wt2 en bleu hline(0, "Zero Line", color=color.gray) // Conditions d'entrée long et court longCondition = ta.crossover(wt1, obLevel2) shortCondition = ta.crossunder(wt1, osLevel2) // Tracé des signaux d'achat et de vente plotshape(series=longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal") plotshape(series=shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal") // Conditions d'entrée et de sortie strategy.entry("Long", strategy.long, when=longCondition) strategy.entry("Short", strategy.short, when=shortCondition) // Niveaux de prise de profit pour les positions longues et courtes longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentage / 100) shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentage / 100) // Vérification si les niveaux de prise de profit sont atteints longTakeProfitReached = strategy.position_size > 0 and high >= longTakeProfitLevel shortTakeProfitReached = strategy.position_size < 0 and low <= shortTakeProfitLevel // Tracé des formes de prise de profit plotshape(series=longTakeProfitReached, style=shape.xcross, location=location.belowbar, color=color.blue, size=size.small, title="Take Profit Long") plotshape(series=shortTakeProfitReached, style=shape.xcross, location=location.abovebar, color=color.blue, size=size.small, title="Take Profit Short") // Niveaux de stop loss pour les positions longues et courtes longStopLossLevel = strategy.position_avg_price * (1 - stopLossPercentage / 100) shortStopLossLevel = strategy.position_avg_price * (1 + stopLossPercentage / 100) // Vérification si les niveaux de stop loss sont atteints longStopLossReached = strategy.position_size > 0 and low <= longStopLossLevel shortStopLossReached = strategy.position_size < 0 and high >= shortStopLossLevel // Tracé des formes de stop loss plotshape(series=longStopLossReached, style=shape.xcross, location=location.belowbar, color=color.red, size=size.small, title="Stop Loss Long") plotshape(series=shortStopLossReached, style=shape.xcross, location=location.abovebar, color=color.red, size=size.small, title="Stop Loss Short") // Fermeture des positions en cas de prise de profit ou de stop loss strategy.close("Long", when=longTakeProfitReached or longStopLossReached) strategy.close("Short", when=shortTakeProfitReached or shortStopLossReached)