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.
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.
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.
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
ADX menilai penembusan palsu menghasilkan isyarat yang salah
RSI menghasilkan beberapa isyarat palsu
Parameter kemerosotan yang tidak betul
Terbang ke udara dengan ketara
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
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.
/*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)