Strategi ini menggabungkan indikator momentum dengan Relative Strength Index (RSI) bersama dengan mekanisme trailing stop dinamis untuk menangkap arah tren sambil mengendalikan risiko.
Gunakan indikator ADX untuk menentukan arah tren harga
ADX di atas 20 menunjukkan tren hadir
+DI penyeberangan di atas -DI adalah sinyal panjang
- DI menyeberang di bawah + DI adalah sinyal pendek
RSI untuk mengidentifikasi overbought/oversold
RSI di atas 70 menunjukkan overbought, sinyal short
RSI di bawah 30 menunjukkan oversold, sinyal panjang
Ambil posisi panjang/pendek ketika ADX menunjukkan sinyal konfirmasi tren + RSI.
Strategi ini menggunakan mekanisme stop trailing dinamis dengan dua parameter:
Tingkat aktivasi: Aktifkan trailing stop ketika harga mencapai persentase yang ditetapkan setelah masuk
Persentase trailing: Stop level trails set persentase dari keuntungan tertinggi
Setelah diaktifkan, trailing stop akan mengikuti tingkat keuntungan tertinggi. Saat harga mundur, level stop bergerak lebih rendah. Jika retracement melebihi persentase jejak, stop dipicu menutup semua posisi.
Momentum ADX menentukan arah tren, menghindari pecah palsu
Konfirmasi RSI memastikan peluang pembalikan tidak dilewatkan
Stop trailing yang dapat disesuaikan mengunci keuntungan dan meminimalkan kerugian
Logika strategi yang sederhana dan jelas, mudah dipahami
Berlaku pada berbagai pasar dan jangka waktu
ADX mungkin memberi sinyal palsu.
RSI dapat memberikan beberapa sinyal palsu
Parameter trailing stop yang buruk
Celah dapat menyebabkan berhenti yang terlewatkan
Uji kombinasi ADX/RSI untuk mengoptimalkan entri
Backtest berbagai tingkat aktivasi dan persentase jejak
Tambahkan filter tambahan untuk meningkatkan kualitas sinyal
Uji pada pasar yang berbeda untuk menemukan parameter yang kuat
Strategi ini mengintegrasikan analisis momentum, RSI dan trailing stops untuk secara efektif menentukan arah tren, pembalikan spot, dan mengendalikan risiko. Logika yang mudah membuatnya sederhana untuk diterapkan di pasar saham, forex, crypto, dan pasar tren lainnya. Perbaikan lebih lanjut dapat datang melalui optimasi parameter dan menambahkan filter. Secara keseluruhan, ini memberikan pedagang kerangka kerja perdagangan kuantitatif yang kuat.
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-03 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trailing Stop with RSI", overlay=true) length = input.int(12, "Momentum Length") price = close momentum(seria, length) => mom = seria - seria[length] mom mom0 = momentum(price, length) mom1 = momentum(mom0, 1) rsiLength = input.int(14, "RSI Length") rsiOverbought = input(70, "RSI Overbought Level") rsiOversold = input(30, "RSI Oversold Level") rsiValue = ta.rsi(close, rsiLength) tsact = input.float(0.0, "Trailing Stop Activation (%)", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100 tsact := tsact ? tsact : na ts = input.float(0.0, "Position Trailing Stop (%)", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100 ts := ts ? ts : na in_long = strategy.position_size > 0 in_short = strategy.position_size < 0 var ts_ = array.new_float() ts_size = array.size(ts_) ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0 if in_long if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact if ts_size > 0 and ts_get < high array.push(ts_, high) if ts_size < 1 array.push(ts_, high) if not tsact if ts_size > 0 and ts_get < high array.push(ts_, high) if ts_size < 1 array.push(ts_, high) if in_short if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact if ts_size > 0 and ts_get > low array.push(ts_, low) if ts_size < 1 array.push(ts_, low) if not tsact if ts_size > 0 and ts_get > low array.push(ts_, low) if ts_size < 1 array.push(ts_, low) trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na if (mom0 > 0 and mom1 > 0) strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE") else strategy.cancel("MomLE") if (mom0 < 0 and mom1 < 0) strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE") else strategy.cancel("MomSE") tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na if trail strategy.close_all() if not strategy.opentrades array.clear(ts_) rsiOverboughtCondition = rsiValue >= rsiOverbought rsiOversoldCondition = rsiValue <= rsiOversold if rsiOverboughtCondition strategy.close("SHORT", "SX") strategy.entry("LONG", strategy.long) if rsiOversoldCondition strategy.close("LONG", "LX") strategy.entry("SHORT", strategy.short) plotchar(ts_get, "GET", "") plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross) plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross) plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)