Momentum ADX dan RSI digabungkan dengan strategi trailing stop boleh laras


Tarikh penciptaan: 2023-10-09 15:36:07 Akhirnya diubah suai: 2023-10-09 15:36:07
Salin: 1 Bilangan klik: 711
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggabungkan indikator momentum dengan indikator yang agak kuat ((RSI), ditambah dengan mekanisme hentian yang boleh disesuaikan, bertujuan untuk menangkap arah trend, sambil mengawal risiko. Apabila harga ada momentum yang kuat, beli lebih banyak; apabila harga ada momentum yang lemah, jual dengan kosong.

Prinsip Strategi

Garis momentum dan RSI untuk menentukan kemasukan

  • Menggunakan indikator momentum ADX untuk menentukan arah trend harga

    • ADX lebih besar daripada 20 menunjukkan trend

    • Apabila + DI di talian melalui - DI di talian untuk melihat isyarat

    • Ketika -DI bawah menembusi +DI sebagai isyarat turun

  • Indeks RSI menilai kelebihan beli dan kelebihan jual

    • RSI di atas 70 menandakan rantaian harga.

    • RSI di bawah 30 adalah kawasan oversold, lihat isyarat bullish

Apabila ADX menilai trend wujud, dan RSI menghantar isyarat pengesahan, lakukan pengendalian kosong yang sesuai.

Mekanisme penangguhan kerugian yang boleh diikuti

Strategi ini menggunakan mekanisme penghentian kerugian yang boleh disesuaikan secara dinamik, termasuk dua parameter:

  • Kadar pengaktifan: Kadar pengaktifan diikuti dengan hentian kerugian apabila harga mencapai kadar yang ditetapkan selepas kedudukan dibuka

  • Nisbah Tracking: jarak purata antara Tracking Stop loss dan gajinya yang tertinggi

Apabila harga mencapai keadaan pengaktifan, barisan hentian pengurangan akan mengikuti tahap keuntungan tertinggi. Apabila harga kembali, barisan hentian pengurangan akan bergerak ke bawah. Jika ketinggian kembali melebihi peratusan pengesanan yang ditetapkan, barisan hentian pengurangan akan dicetuskan dan menutup semua kedudukan.

Analisis kelebihan

  • Penunjuk-penunjuk momentum untuk menilai arah trend, mengelakkan usahawan daripada terhempas

  • RSI memastikan tidak terlepas peluang untuk berbalik

  • Ia juga boleh digunakan untuk mengunci keuntungan dan mengurangkan kerugian.

  • Strategi yang jelas, ringkas dan mudah difahami

  • Ia boleh digunakan secara meluas untuk pelbagai pasaran dan tempoh masa

Risiko dan tindakan

  • ADX menilai penembusan palsu menghasilkan isyarat yang salah

    • Menyesuaikan parameter ADX untuk memastikan trend benar-benar pecah
  • RSI menghasilkan beberapa isyarat palsu

    • Menyesuaikan parameter overbought dan oversold untuk mengelakkan perdagangan yang kerap
  • Parameter kemerosotan yang tidak betul

    • Optimumkan parameter untuk mencari paras paras paras optimum
  • Terbang ke udara dengan ketara

    • Pertimbangkan untuk menggabungkan borang harga terhad untuk mengelakkan kehilangan

Optimum idea

  • Uji optimasi kemasukan dengan kombinasi parameter ADX dan RSI yang berbeza

  • Mengesan pelbagai titik pengaktifan stop-loss dan amplitudo pengesanan untuk mencari parameter yang optimum

  • Pertimbangkan penapisan untuk menambah petunjuk lain untuk meningkatkan kualiti isyarat

  • Uji pasaran yang berbeza untuk menentukan tetapan parameter umum

ringkaskan

Strategi ini mengintegrasikan analisis momentum, indikator RSI dan mekanisme penangguhan kekalahan, yang dapat menentukan arah trend dengan berkesan, mengenal pasti titik pembalikan dan mengawal risiko perdagangan. Strategi ini jelas, mudah dilaksanakan, dan boleh digunakan secara meluas untuk perdagangan trend di pasaran seperti saham, forex, dan mata wang digital.

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