ADX + RSI Strategie

Schriftsteller:ChaoZhang, Datum: 2023-09-27 16:27:39
Tags:

Übersicht

Dies ist eine Trend-following-Strategie, die die ADX- und RSI-Indikatoren kombiniert. Es verwendet RSI, um überkaufte und überverkaufte Niveaus zu identifizieren, um Handelssignale zu generieren, und ADX, um den Trend zu bestimmen, um Trades zu filtern, wenn der Trend unklar ist, wodurch Whipsaws in Bereichsmärkten vermieden werden.

Strategie Logik

  1. Verwenden Sie den RSI für sieben Perioden, um Überkauf- und Überverkaufswerte zu ermitteln
  • RSI unter 30 gilt als überverkauft
  • RSI über 70 gilt als überkauft
  1. Verwenden Sie ADX, um den Trend zu bestimmen
  • ADX über 30 deutet auf einen starken Trend hin
  • ADX unter 30 deutet auf keinen Trend hin
  1. Einreisevorschriften
  • Lang, wenn der RSI < 30 und der ADX > 30 ist
  • Kurz bei RSI > 70 und ADX > 30
  1. Gewinn und Stop-Loss
  • Die Risikopositionen, für die die Risikopositionen gemäß Artikel 147 Absatz 1 Buchstabe c der CRR gelten, sind die Risikopositionen, für die die Risikopositionen gemäß Artikel 147 Absatz 1 der CRR gelten.
  • Schließpreise für nahe verankerte Verwendungen
  • Swing-basierte Verwendungen jüngste Swing-Hoch-/Tiefstände

Analyse der Vorteile

  1. Der RSI identifiziert effektiv Überkauf- und Überverkaufswerte, um Kauf-/Verkaufsfallen zu vermeiden

  2. ADX filtert Märkte aus der Bandbreite aus, um Whipsaws zu vermeiden

  3. Optionale Profit-/Stop-Loss-Methoden helfen, Risiken besser zu kontrollieren

  4. Einfach und leicht verständlich, gut für Anfänger, um Algorithmushandel zu lernen

  5. Viel Raum für die Optimierung und Verfeinerung von Parametern

Risikoanalyse

  1. RSI überkauft/überverkauft kann Rückgänge und Umkehrungen haben

  2. ADX-Trendbestimmung hat Verzögerungen, kann Trendwendepunkte verpassen

  3. Eine unsachgemäße Stop Loss Platzierung kann zu Verlusten führen

  4. Risiko einer Überoptimierung aufgrund der Einfachheit

  5. Parameteroptimierung für eine bessere Leistung

Optimierungsrichtlinien

  1. Optimierung der RSI-Parameter und der Überkauf-/Überverkaufswerte

  2. Versuche verschiedene ADX-Perioden, um die optimale Einstellung zu finden

  3. Verschiedene Profit-/Stop-Loss-Methoden testen

  4. Hinzufügen eines Trendfilters, um einen Gegentrendhandel zu vermeiden

  5. Kombination mit anderen Indikatoren für eine verbesserte Leistung

Zusammenfassung

Diese Strategie kombiniert die Stärken der klassischen RSI- und ADX-Indikatoren, um Trends zu identifizieren und Whipsaws zu vermeiden.


/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tweakerID

// This is a strategy that uses the 7 Period RSI to buy when the indicator is shown as oversold (OS) and sells when 
// the index marks overbought (OB). It also uses the ADX to determine whether the trend is ranging or trending
// and filters out the trending trades. Seems to work better for automated trading when the logic is inversed (buying OB 
// and selling the OS) wihout stop loss.

//@version=4
strategy("ADX + RSI Strat", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.04, calc_on_every_tick=false)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))


//SL & TP Inputs
i_SL=input(false, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.2, title="SL Expander")
i_TPExpander=input(defval=0, step=.2, title="TP Expander")
i_reverse=input(true, title="Reverse Trades")

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0))*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0))*i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))+((valuewhen(bought, atr(14), 0))*i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0)-strategy.position_avg_price)-((valuewhen(bought, atr(14), 0))*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na
TP= islong ? lTP : isshort ? sTP : na

//RSI Calculations
RSI=rsi(close, 7)
OS=input(30, step=5)
OB=input(80, step=5)

//ADX Calculations
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
adxlevel=input(30, step=5)


//Entry Logic
BUY = sig < adxlevel and (RSI < OS) 
SELL = sig < adxlevel and (RSI > OB) 

//Entries
strategy.entry("long", strategy.long, when=i_reverse?SELL:BUY)
strategy.entry("short", strategy.short, when=not i_reverse?SELL:BUY)
//Exits
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup")
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup")

Mehr