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.
Indikator RSI dapat secara efektif mengidentifikasi titik overbought dan oversold, mengurangi jebakan buy dan jebakan sell
Indeks ADX dapat memfilter situasi yang tidak jelas tren, menghindari terkurung dalam situasi goyangan
Opsi Stop Loss untuk Mengontrol Risiko
Strategi yang sederhana, mudah dipahami, dan cocok untuk pemula
Optimasi parameter strategi yang luas, dapat dioptimalkan dengan menyesuaikan parameter seperti siklus RSI, interval overbought dan oversold, dan siklus smoothing ADX
RSI memiliki risiko retracement, sinyal overbought dan oversold dapat terjadi retracement dan reversal
ADX menilai tren tertinggal, mungkin kehilangan titik balik tren
Pengaturan Stop Loss yang tidak masuk akal dapat menyebabkan kerugian
Strategi yang sederhana, ada risiko over-optimisasi
Optimasi parameter diperlukan untuk hasil yang lebih baik
Anda dapat mengoptimalkan parameter RSI, menyesuaikan interval overbought dan oversold, dan menemukan kombinasi parameter yang optimal
Anda dapat menguji ADX pada periode yang berbeda untuk menemukan parameter yang paling baik untuk menentukan tren
Anda dapat menguji berbagai cara stop loss untuk menemukan pengaturan yang paling sesuai dengan strategi Anda.
Anda dapat menambahkan indikator penyaringan tren untuk menghindari perdagangan berlawanan arah
Dapat dikombinasikan dengan indikator lain untuk membuat strategi lebih unggul
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.
/*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")