ADX + RSI-Strategie


Erstellungsdatum: 2023-09-27 16:27:39 zuletzt geändert: 2023-09-27 16:27:39
Kopie: 0 Klicks: 2077
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie nutzt die RSI, um Überkauf- und Überverkaufssituationen zu ermitteln, und nutzt die ADX, um Markttrends zu ermitteln und Trends zu filtern, die nicht sichtbar sind, um die Gefangenschaft von Marktschocks zu vermeiden.

Strategieprinzip

  1. Überkaufen und Überverkaufen anhand des 7-Zyklus-RSI
  • RSI unter 30 ist ein Überverkauf
  • RSI über 70 ist ein Überkauf
  1. Trends mit ADX
  • ADX über 30 ist ein deutlicher Trend
  • ADX unter 30 als unbedeutend angesehen
  1. Eintrittsregeln
  • Wenn der RSI unter 30 ist und der ADX über 30 ist, dann machen Sie mehr.
  • Wenn der RSI über 70 und der ADX über 30 ist, machen Sie einen Leerlauf
  1. Stopp-Stopp-Verlust
  • Optionale Stop-Loss-Methoden, die eine Schließ-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp-Stopp erstellen können
  • Die Stop-Loss-Methode basiert auf dem Schlusskurs.
  • Die Oszillationsstop-Loss-Methode basiert auf den höchsten und niedrigsten Punkten der jüngsten Preisschwankungen.

Analyse der Stärken

  1. Der RSI-Indikator kann überkaufen und überverkaufen, um die Kauf- und Verkaufsfallen zu reduzieren.

  2. Der ADX-Indikator filtert Trends, die nicht sichtbar sind, und verhindert, dass man sich in einem wackligen Zustand festhält.

  3. Optionale Stop-Loss-Methoden zur besseren Risikokontrolle

  4. Die Strategie ist einfach, leicht zu verstehen und für Anfänger geeignet.

  5. Optimierung von Strategieparametern ist möglich, z. B. durch Anpassung von RSI-Zyklen, Überkauf-Überverkauf-Bereich und ADX-Gleichungszyklen

Risikoanalyse

  1. RSI-Rückschlagrisiko, Überkauf-Überverkauf-Signal könnte Rückschlag und Rückschlag geben

  2. Der ADX hält Trends für zurückgeblieben und könnte einen Trendwendepunkt verpassen

  3. Unvernünftige Einstellung des Stop-Loss-Punktes kann zu Verlusten führen

  4. Die Strategie ist eher schlicht und es besteht die Gefahr einer Überoptimierung.

  5. Parameteroptimierungen sind notwendig, um bessere Ergebnisse zu erzielen

Optimierungsrichtung

  1. Die Parameter des RSI können optimiert werden, um die Überkauf-Überverkauf-Bereichs zu korrigieren und die optimale Kombination von Parametern zu finden

  2. Die ADX für verschiedene Perioden kann getestet werden, um die besten Parameter für Trends zu finden

  3. Verschiedene Stop-Loss-Methoden können getestet werden, um die Einstellungen zu finden, die für die Strategie am besten geeignet sind

  4. Trendfilter können hinzugefügt werden, um einen Abweichhandel zu vermeiden

  5. Die Strategie kann mit anderen Indikatoren kombiniert werden, um einen Vorteil zu erzielen

Zusammenfassen

Die Strategie kombiniert die Vorteile der beiden klassischen Indikatoren RSI und ADX, um Trends effektiv zu erkennen und Schokke zu vermeiden. Sie ist eine einfache und praktische Trendverfolgungstrategie. Die Strategie hat viel Raum für Optimierung und kann durch Anpassung der Parameterkombinationen besser funktionieren.

Strategiequellcode
/*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")