Momentum-Breakout-Strategie mit ADX-Filter

Schriftsteller:ChaoZhang, Datum: 2024-01-04 17:12:30
Tags:

img

Übersicht

Dies ist eine kurzfristige Handelsstrategie, die den ADX-Indikator verwendet, um Breakout-Signale zu filtern. Sie geht kurz, wenn der Preis über das obere Bollinger-Band bricht und der ADX fällt, und lang, wenn der Preis unter das untere Bollinger-Band bricht und der ADX steigt. Die Strategie setzt auch Stop Loss und Take Profit automatisch für den vollautomatisierten Handel.

Strategie Logik

Der Kern dieser Strategie ist die Verwendung von Bollinger Bands für Breakout-Signale. Die oberen und unteren Bande von Bollinger Bands stellen zwei Standardabweichungen des Preises dar, so dass Breakouts in der Regel bedeuten, dass der Preis einen starken Trend betritt. Darüber hinaus wird der ADX-Indikator hier als Filter eingeführt, um falsche Breakouts zu vermeiden. Kurze Signale werden nur berücksichtigt, wenn der ADX fällt, während lange Signale nur berücksichtigt werden, wenn der ADX steigt. Dies hilft, einige Whipsaws während von Bereichsgrenzperioden auszufiltern.

Insbesondere berechnet diese Strategie Bollinger Bands unter Verwendung von 33 Perioden der Schlusskurs. Das mittlere Band ist ein 33-Perioden einfacher gleitender Durchschnitt, und die oberen / unteren Bands werden bei zwei Standardabweichungen über / unter dem mittleren Band platziert. Die Strategie signalisiert kurz, wenn der Preis unter dem oberen Band schließt und der 8-Perioden-ADX unter dem 15-Perioden-ADX liegt. Es signalisiert lang, wenn der Preis über dem unteren Band schließt und der 8-Perioden-ADX über dem 15-Perioden-ADX liegt. Die Ausgänge werden auf 800 Gewinnpunkte und 400 Stop-Loss-Punkte festgelegt.

Analyse der Vorteile

Als Breakout-Strategie mit Trend- und Momentumfiltern hat sie mehrere Vorteile:

  1. Die Verwendung von Bollinger Bands zur Erkennung von Ausbrüchen entspricht den Gewohnheiten der meisten Trader.
  2. Der zusätzliche ADX-Filter hilft, Verluste durch Whipsaws zu vermeiden.
  3. Die Logik ist einfach und leicht zu verstehen und zu optimieren.
  4. Der automatische Stop Loss und Take Profit erleichtert den Handel mit Algorithmen.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Falsche BB-Parameter können zu häufige Signale erzeugen und die Kosten erhöhen.
  2. Falsche ADX-Parameter könnten gültige Signale ausfiltern.
  3. Die Stop-Loss-Distanz kann zu breit sein, was zu großen Verlusten führt.

Um diese Risiken zu mindern, können wir den BB-Parameter optimieren, um die Bands zu verengen, die ADX-Perioden anzupassen, um Überfilterung zu vermeiden, und den Stop-Loss zu reduzieren, um Einzelhandelsverluste zu kontrollieren.

Optimierungsrichtlinien

Es gibt Raum für weitere Optimierungen:

  1. Test auf verschiedenen Marktdaten, um den optimalen Parametersatz zu finden.
  2. Einbeziehen Sie andere Indikatoren wie Volumen und gleitenden Durchschnitt für die Signalfilterung.
  3. Verwenden Sie maschinelle Lernmethoden zur automatischen Optimierung von Parametern.
  4. Betrachten Sie dynamische Stop-Loss und Take-Profit.

Schlussfolgerung

Dies ist eine einfache und praktische Breakout-Strategie mit Filter. Die Identifizierung von Trends mit BBs und das Filtern von Signalen mit ADX helfen, Lärm während von Bereichsbegrenzungen zu vermeiden und Trendchancen bis zu einem gewissen Grad zu erfassen. Es gibt noch viel Raum für weitere Tests und Verbesserungen.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hizbullah XAUUSD Sniper", overlay=true)

Price = close

Length = input(33)
Mult = input(2)
Basis = sma(Price, Length)
StdDev = Mult * stdev(Price, Length)
Upper = Basis + StdDev
Lower = Basis - StdDev

ADX_Length = input(4)
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
SmoothedTrueRange = sma(TrueRange, ADX_Length)
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedDirectionalMovementPlus = sma(DirectionalMovementPlus, ADX_Length)
SmoothedDirectionalMovementMinus = sma(DirectionalMovementMinus, ADX_Length)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus)*100
SmoothedADX1 = ema(DX, input(8))
SmoothedADX2 = ema(DX, input(15))

Condition1 = crossunder(Price, Upper) and SmoothedADX1 < SmoothedADX2

Take_Profit = input(800)
Stop_Loss = input(400)

strategy.entry("ShortEntry", true, when = Condition1)
strategy.exit("ShortExit", "ShortEntry", profit = Take_Profit, loss = Stop_Loss)


Mehr