Strategi ini menggabungkan indikator momentum dengan indikator relatif kuat (RSI) dengan mekanisme stop loss yang dapat disetel untuk menangkap arah tren sambil mengendalikan risiko. Beli lebih banyak ketika harga memiliki momentum yang kuat; jual lebih sedikit ketika harga memiliki momentum yang lemah. Strategi ini juga menetapkan kondisi stop loss, menggunakan stop loss untuk melacak tingkat keuntungan tertinggi, dapat mengunci keuntungan dan mengurangi kerugian.
Menggunakan indikator dinamika ADX untuk menentukan arah tren harga
ADX lebih besar dari 20 menunjukkan adanya tren
Ketika + DI di jalur melewati - DI jalur untuk melihat sinyal
Ketika -DI garis bawah melewati +DI garis untuk sinyal turun
Indeks RSI menilai overbought dan oversold
RSI di atas 70 adalah zona overbought, sinyal turun
RSI di bawah 30 adalah zona oversold, lihat sinyal bullish
Ketika ADX menilai tren ada dan indikator RSI mengirimkan sinyal konfirmasi, lakukan operasi overhead yang sesuai.
Strategi ini menggunakan mekanisme trailing stop loss yang dapat disesuaikan secara dinamis, yang terdiri dari dua parameter:
Rasio aktivasi: Aktifkan trailing stop loss saat harga mencapai rasio yang ditetapkan setelah membuka posisi
Rasio pelacakan: rasio jarak dari pelacakan stop loss ke keuntungan tertinggi terbaru
Ketika harga mencapai kondisi aktivasi, jalur stop loss akan mengikuti tingkat keuntungan tertinggi. Ketika harga mundur, jalur stop loss akan bergerak ke bawah. Jika lebar mundur melebihi rasio pelacakan yang ditetapkan, jalur stop loss akan dipicu dan menutup semua posisi.
Indikator momentum menilai arah tren, menghindari biaya perusahaan yang berlebihan
Indeks RSI memastikan tidak melewatkan kesempatan untuk berbalik
Stop loss yang dapat ditindaklanjuti, dapat mengunci keuntungan dan mengurangi kerugian
Strategi yang jelas, ringkas, dan mudah dipahami
Dapat diterapkan secara luas di berbagai pasar dan periode waktu
ADX menilai bahwa penembusan palsu menghasilkan sinyal yang salah
RSI menghasilkan beberapa sinyal palsu
Parameter deflection yang tidak tepat
Terjun ke Air Terjun Berukuran Besar
Uji coba berbagai kombinasi parameter ADX dan RSI untuk mengoptimalkan masuk
Deteksi berbagai titik aktivasi stop loss dan amplitudo pelacakan untuk mencari parameter optimal
Pertimbangkan penyaringan untuk menambahkan indikator lain untuk meningkatkan kualitas sinyal
Pengujian pasar yang berbeda untuk menentukan pengaturan parameter umum
Strategi ini mengintegrasikan analisis dinamika, indikator RSI dan mekanisme stop loss yang diikuti, yang dapat secara efektif menilai arah tren, mengidentifikasi titik balik dan mengendalikan risiko perdagangan. Strategi ini jelas dalam konsepsi, mudah diterapkan, dan dapat digunakan secara luas untuk perdagangan tren di pasar seperti saham, forex, dan mata uang digital.
/*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)