Strategi ini menggabungkan penunjuk momentum dengan Indeks Kekuatan Relatif (RSI) bersama-sama dengan mekanisme hentian yang dinamik untuk menangkap arah trend sambil mengawal risiko. Ia panjang apabila terdapat momentum menaik yang kuat dan pendek apabila terdapat momentum menurun yang kuat. Strategi ini juga menetapkan keadaan mengambil keuntungan dan menghentikan kerugian menggunakan hentian hentian untuk mengunci keuntungan dan mengurangkan kerugian.
Gunakan penunjuk ADX untuk menentukan arah trend harga
ADX di atas 20 menunjukkan trend hadir
+DI melintasi di atas -DI adalah isyarat panjang
- DI melintasi di bawah + DI adalah isyarat pendek
RSI untuk mengenal pasti overbought/oversold
RSI di atas 70 menunjukkan overbought, isyarat pendek
RSI di bawah 30 menunjukkan oversold, isyarat panjang
Mengambil kedudukan panjang/pendek apabila ADX menunjukkan trend + isyarat pengesahan RSI.
Strategi ini menggunakan mekanisme hentian yang dinamik dengan dua parameter:
Tahap pengaktifan: Mengaktifkan penangguhan trailing apabila harga mencapai peratusan yang ditetapkan selepas masuk
Peratusan pengangkutan: Peratusan set paras berhenti dari keuntungan tertinggi
Apabila diaktifkan, hentian penghantaran akan mengikuti tahap keuntungan tertinggi. Apabila harga kembali, tahap hentian bergerak lebih rendah. Jika retracement melebihi peratusan jejak, hentian dicetuskan menutup semua kedudukan.
Momentum ADX menentukan arah trend, mengelakkan pecah palsu
Pengesahan RSI memastikan peluang pembalikan tidak terlepas
Penghentian yang boleh diselaraskan mengunci keuntungan dan meminimumkan kerugian
Logik strategi yang mudah dan jelas, mudah difahami
Berlaku untuk pelbagai pasaran dan jangka masa
ADX mungkin memberi isyarat pecah palsu
RSI boleh memberikan beberapa isyarat palsu
Parameter hentian belakang yang buruk
Celah boleh menyebabkan berhenti terlewat
Uji gabungan ADX/RSI untuk mengoptimumkan entri
Backtest pelbagai tahap pengaktifan dan peratusan jejak
Tambah penapis tambahan untuk meningkatkan kualiti isyarat
Ujian di pasaran yang berbeza untuk mencari parameter yang kukuh
Strategi ini mengintegrasikan analisis momentum, RSI dan trailing stops untuk menentukan arah trend, pembalikan spot, dan kawalan risiko dengan berkesan. Logik yang mudah membuatnya mudah dilaksanakan di seluruh pasaran saham, forex, crypto, dan pasaran trend lain. Penambahbaikan lanjut boleh datang melalui pengoptimuman parameter dan penambahan penapis. Secara keseluruhan ia menyediakan peniaga dengan kerangka perdagangan kuantitatif yang kukuh.
/*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)