Strategi ini mengira momentum harga untuk menentukan arah trend dan menetapkan berhenti penjejakan dua hala untuk mengunci keuntungan, merealisasikan stop loss mengikuti trend. Strategi ini juga menggabungkan tahap pengaktifan untuk memulakan penjejakan hanya setelah mencapai sasaran keuntungan yang ditentukan, dengan berkesan mencegah stop loss yang lebih awal.
Ia mengira momentum harga 12 tempoh, dan seterusnya mengira momentum 1 tempoh momentum. Apabila momentum cepat (1 tempoh momentum momentum harga) lebih besar daripada 0, ia pergi panjang. Apabila kurang dari 0, ia pergi pendek. Ini menilai perubahan arah momentum harga untuk menentukan trend harga.
Ia menetapkan jarak hentian dan tahap pengaktifan. Jarak hentian hentian merujuk kepada penyesuaian hentian ke jarak yang ditentukan dari tertinggi atau terendah terbaru apabila harga mencapai tahap tertinggi atau terendah baru. Tahap pengaktifan bermaksud hentian hentian hanya bermula selepas mencapai nisbah keuntungan tertentu.
Strategi ini mengunci keuntungan dengan mengesan harga tertinggi atau harga terendah, menghantar pesanan dekat apabila harga menarik balik melebihi jarak berhenti yang ditetapkan.
Penentuan momentum berganda dengan tepat menilai arah trend, mengurangkan perdagangan, dan mengelakkan terperangkap.
Jarak berhenti yang fleksibel mengurangkan risiko dan kunci keuntungan.
Tahap pengaktifan menghalang stop loss yang lebih awal dengan membolehkan penangguhan hanya selepas sasaran keuntungan tertentu dicapai.
Henti dua arah secara komprehensif mengawal risiko untuk kedua-dua panjang dan pendek.
Pengiraan mudah dan cekap, mudah difahami dan dilaksanakan.
Momentum berganda boleh menghasilkan isyarat terbalik, memerlukan penapis trend.
Jarak berhenti yang berlebihan boleh menyebabkan kerugian yang besar.
Tahap pengaktifan yang tinggi mungkin terlepas peluang berhenti.
Lebih banyak ujian parameter dan pengoptimuman diperlukan untuk mencari hentian yang optimum.
Boleh mengurangkan isyarat palsu melalui penilaian trend dan pengoptimuman parameter. Uji pada produk dan set parameter yang berbeza untuk mencari konfigurasi terbaik.
Menggabungkan pengiktirafan struktur pasaran untuk trend, mengelakkan perdagangan terbalik.
Tambah lebih banyak keadaan masa seperti perubahan kelantangan, memerah keluar untuk meningkatkan ketepatan isyarat.
Mengoptimumkan parameter dengan menguji jarak berhenti yang berbeza dan tahap pengaktifan.
Pertimbangkan penangguhan pengangkutan dinamik bergantung kepada turun naik pasaran.
Tetapkan hentian separa atau bergerak untuk kawalan risiko yang lebih baik.
Strategi ini mempunyai struktur yang jelas, menilai trend dengan momentum berganda dan mengunci keuntungan dengan hentian trailing yang fleksibel, mengawal risiko perdagangan dengan berkesan. Ia mudah difahami dan dilaksanakan, dengan ruang yang dapat dioptimumkan. Menambah lebih banyak penunjuk teknikal dan ujian parameter dapat meningkatkan prestasi strategi. Strategi ini memberikan idea dan rujukan untuk merealisasikan pengurusan 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)