Momentum ADX dan RSI dikombinasikan dengan strategi trailing stop yang dapat disesuaikan


Tanggal Pembuatan: 2023-10-09 15:36:07 Akhirnya memodifikasi: 2023-10-09 15:36:07
menyalin: 1 Jumlah klik: 711
1
fokus pada
1617
Pengikut

Ringkasan

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.

Prinsip Strategi

Garis momentum dan indikator RSI menilai masuk

  • 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.

Sistem Stop Loss yang dapat diteruskan

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.

Analisis Keunggulan

  • 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

Risiko dan Pengendalian

  • ADX menilai bahwa penembusan palsu menghasilkan sinyal yang salah

    • Menyesuaikan parameter ADX untuk memastikan tren benar-benar terobosan
  • RSI menghasilkan beberapa sinyal palsu

    • Mengatur parameter overbought dan oversold untuk mencegah transaksi yang sering terjadi
  • Parameter deflection yang tidak tepat

    • Optimalkan parameter untuk menemukan level stop loss yang optimal
  • Terjun ke Air Terjun Berukuran Besar

    • Pertimbangkan untuk menggabungkan daftar harga untuk mencegah kerugian yang terlewatkan

Optimalkan Pikiran

  • 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

Meringkaskan

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.

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