Strategi ADX + RSI


Tanggal Pembuatan: 2023-09-27 16:27:39 Akhirnya memodifikasi: 2023-09-27 16:27:39
menyalin: 0 Jumlah klik: 2077
1
fokus pada
1617
Pengikut

Ringkasan

Ini adalah strategi pelacakan tren yang menggabungkan indikator ADX dan RSI. Strategi ini menggunakan RSI untuk menilai overbought dan oversold untuk mengirimkan sinyal perdagangan, dan menggunakan ADX untuk menilai tren pasar, memfilter perdagangan yang tidak jelas tren, yang dapat secara efektif menghindari pasar yang bergoyang.

Prinsip Strategi

  1. Menggunakan RSI 7-siklus untuk menilai overbought dan oversold
  • RSI di bawah 30 dianggap oversold
  • RSI di atas 70 dianggap overbought
  1. Menggunakan ADX untuk menilai tren
  • ADX lebih tinggi dari 30 menunjukkan tren yang jelas
  • ADX di bawah 30 dianggap tidak menunjukkan tren
  1. Aturan masuk
  • Jika RSI di bawah 30 dan ADX di atas 30 maka Anda harus melakukan overbought.
  • Jika RSI lebih dari 70 dan ADX lebih dari 30, maka bukalah.
  1. Stop Stop Loss
  • Ada opsi stop loss, Anda dapat memilih stop loss penutupan atau stop loss berosilasi
  • Penutupan stop loss adalah dengan harga penutupan sebagai standar
  • Stop loss oscillator adalah standar dari titik tertinggi dan terendah dari pergerakan harga baru-baru ini.

Analisis Keunggulan

  1. Indikator RSI dapat secara efektif mengidentifikasi titik overbought dan oversold, mengurangi jebakan buy dan jebakan sell

  2. Indeks ADX dapat memfilter situasi yang tidak jelas tren, menghindari terkurung dalam situasi goyangan

  3. Opsi Stop Loss untuk Mengontrol Risiko

  4. Strategi yang sederhana, mudah dipahami, dan cocok untuk pemula

  5. Optimasi parameter strategi yang luas, dapat dioptimalkan dengan menyesuaikan parameter seperti siklus RSI, interval overbought dan oversold, dan siklus smoothing ADX

Analisis risiko

  1. RSI memiliki risiko retracement, sinyal overbought dan oversold dapat terjadi retracement dan reversal

  2. ADX menilai tren tertinggal, mungkin kehilangan titik balik tren

  3. Pengaturan Stop Loss yang tidak masuk akal dapat menyebabkan kerugian

  4. Strategi yang sederhana, ada risiko over-optimisasi

  5. Optimasi parameter diperlukan untuk hasil yang lebih baik

Arah optimasi

  1. Anda dapat mengoptimalkan parameter RSI, menyesuaikan interval overbought dan oversold, dan menemukan kombinasi parameter yang optimal

  2. Anda dapat menguji ADX pada periode yang berbeda untuk menemukan parameter yang paling baik untuk menentukan tren

  3. Anda dapat menguji berbagai cara stop loss untuk menemukan pengaturan yang paling sesuai dengan strategi Anda.

  4. Anda dapat menambahkan indikator penyaringan tren untuk menghindari perdagangan berlawanan arah

  5. Dapat dikombinasikan dengan indikator lain untuk membuat strategi lebih unggul

Meringkaskan

Strategi ini mengintegrasikan keuntungan dari dua indikator klasik RSI dan ADX, yang dapat secara efektif menemukan tren dan menghindari getaran, merupakan strategi pelacakan tren yang sederhana dan praktis. Strategi memiliki ruang yang lebih besar untuk dioptimalkan, dan efek yang lebih baik dapat diperoleh dengan menyesuaikan kombinasi parameter. Secara keseluruhan, strategi ini cocok untuk pemula belajar strategi pemula untuk perdagangan algoritma, atau dapat diintegrasikan sebagai modul ke dalam sistem strategi yang lebih kompleks.

Kode Sumber Strategi
/*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")