Strategi ADX + RSI


Tarikh penciptaan: 2023-09-27 16:27:39 Akhirnya diubah suai: 2023-09-27 16:27:39
Salin: 0 Bilangan klik: 2077
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggunakan RSI untuk menentukan keadaan overbought dan oversold untuk menghantar isyarat perdagangan, dan menggunakan ADX untuk menentukan trend pasaran, menapis perdagangan yang tidak jelas trendnya, dan dapat mengelakkan pasar yang bergolak.

Prinsip Strategi

  1. Kaedah RSI 7 Siklus untuk menilai overbought dan oversold
  • RSI di bawah 30 dianggap sebagai oversold
  • RSI di atas 70 dianggap sebagai overbought
  1. Menggunakan ADX untuk menilai trend
  • ADX lebih tinggi daripada 30 menunjukkan trend jelas
  • ADX di bawah 30 dianggap tidak menunjukkan trend
  1. Peraturan kemasukan
  • Buat lebih apabila RSI di bawah 30 dan ADX di atas 30
  • Apabila RSI melebihi 70 dan ADX melebihi 30 maka buat shorting
  1. Stop Stop Loss
  • Terdapat pilihan stop loss, anda boleh memilih stop loss penutupan atau stop loss bergoyang
  • Hentian penutupan adalah berdasarkan harga penutupan
  • Stop loss oscillatory digunakan sebagai penanda aras bagi pergerakan harga terkini.

Analisis kelebihan

  1. RSI dapat membantu menilai titik jual beli yang berlebihan, mengurangkan perangkap jual beli dan perangkap jual beli

  2. Indeks ADX boleh menyaring trend yang tidak jelas dan mengelakkan diri daripada terjebak dalam keadaan goyah

  3. Pilihan Stop Loss untuk mengawal risiko

  4. Strategi mudah difahami, mudah diimplementasikan, dan sesuai untuk pemula

  5. Ruang untuk mengoptimumkan parameter strategi yang luas, boleh dioptimumkan dengan menyesuaikan parameter seperti kitaran RSI, tempoh overbought dan oversold, dan kitaran penyejukan ADX

Analisis risiko

  1. RSI mempunyai risiko penarikan balik, tanda overbought dan oversold mungkin muncul

  2. ADX menilai trend ketinggalan dan mungkin terlepas titik perubahan trend

  3. Penetapan titik hentian yang tidak munasabah boleh menyebabkan kerugian

  4. Strategi yang lebih sederhana, risiko terlalu optimum

  5. Optimasi parameter diperlukan untuk mencapai kesan yang lebih baik

Arah pengoptimuman

  1. Parameter yang boleh dioptimumkan untuk RSI, menyesuaikan jarak overbought dan oversold, dan mencari kombinasi parameter yang terbaik

  2. Boleh menguji ADX untuk tempoh yang berbeza untuk mencari parameter yang terbaik untuk menentukan trend

  3. Anda boleh menguji pelbagai cara untuk menghentikan kerugian dan mencari tetapan yang paling sesuai dengan strategi anda.

  4. Anda boleh menggunakan penapis trend untuk mengelakkan dagangan berlawanan arah

  5. Ia boleh digabungkan dengan petunjuk lain untuk memberi kelebihan kepada strategi

ringkaskan

Strategi ini menggabungkan kelebihan RSI dan ADX, dua petunjuk klasik, yang dapat mengesan trend dengan berkesan dan mengelakkan gegaran, merupakan strategi penjejakan trend yang mudah dan praktikal. Strategi mempunyai ruang untuk mengoptimumkan, dan hasil yang lebih baik dapat diperoleh dengan menyesuaikan kombinasi parameter. Secara keseluruhan, strategi ini sesuai untuk pemula belajar strategi permulaan perdagangan algoritma, atau dapat diintegrasikan sebagai modul ke dalam sistem strategi yang lebih kompleks.

Kod 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")