Strategi ini menghitung momentum harga untuk menentukan arah tren dan menetapkan stop pelacakan bidirectional untuk mengunci keuntungan, mewujudkan stop loss mengikuti tren. Strategi ini juga menggabungkan tingkat aktivasi untuk memulai pelacakan hanya setelah mencapai target keuntungan yang ditentukan, secara efektif mencegah stop loss prematur.
Ini menghitung momentum harga 12 periode, dan selanjutnya menghitung momentum momentum 1 periode. Ketika momentum cepat (momentum momentum harga 1 periode) lebih besar dari 0, ia pergi panjang. Ketika kurang dari 0, ia pergi pendek. Ini menilai perubahan arah momentum harga untuk menentukan tren harga.
Ini mengatur jarak trailing stop dan tingkat aktivasi. Trailing stop distance mengacu pada penyesuaian stop ke jarak yang ditentukan dari tertinggi atau terendah terbaru ketika harga mencapai tertinggi atau terendah baru.
Strategi ini mengunci keuntungan dengan melacak harga tertinggi atau harga terendah, mengirim perintah penutupan ketika harga menarik kembali di luar jarak berhenti yang ditetapkan.
Penentuan momentum ganda secara akurat menilai arah tren, mengurangi perdagangan, dan menghindari terjebak.
Jarak penghentian yang fleksibel mengurangi risiko dan kunci keuntungan.
Tingkat aktivasi mencegah stop loss prematur dengan memungkinkan trailing hanya setelah target keuntungan tertentu tercapai.
Stop bidirectional secara komprehensif mengendalikan risiko untuk kedua panjang dan pendek.
Perhitungan sederhana dan efisien, mudah dipahami dan diterapkan.
Momentum ganda dapat menghasilkan sinyal terbalik, membutuhkan filter tren.
Jarak berhenti yang berlebihan dapat menyebabkan kerugian yang signifikan.
Tingkat aktivasi yang tinggi mungkin melewatkan kesempatan berhenti.
Lebih banyak pengujian parameter dan optimasi diperlukan untuk menemukan pemberhentian optimal.
Dapat mengurangi sinyal palsu melalui penilaian tren dan optimasi parameter.
Menggabungkan pengakuan struktur pasar untuk tren, menghindari perdagangan terbalik.
Tambahkan lebih banyak kondisi waktu seperti perubahan volume, memeras istirahat untuk meningkatkan akurasi sinyal.
Mengoptimalkan parameter dengan menguji jarak pemberhentian yang berbeda dan tingkat aktivasi.
Pertimbangkan stop trailing dinamis tergantung pada volatilitas pasar.
Atur penghentian parsial atau bergerak untuk kontrol risiko yang lebih baik.
Strategi ini memiliki struktur yang jelas, menilai tren dengan momentum ganda dan mengunci keuntungan dengan trailing stop yang fleksibel, secara efektif mengendalikan risiko perdagangan. Sangat mudah dimengerti dan diimplementasikan, dengan ruang yang dapat dioptimalkan. Menambahkan lebih banyak indikator teknis dan pengujian parameter dapat lebih meningkatkan kinerja strategi. Strategi ini memberikan ide dan referensi untuk mewujudkan manajemen stop loss.
/*backtest start: 2023-01-01 00:00:00 end: 2023-02-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trailing Stop Snippet", overlay=true) length = input(12) price = close momentum(seria, length) => mom = seria - seria[length] mom mom0 = momentum(price, length) mom1 = momentum( mom0, 1) 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_) //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr) 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)