Strategi Stop Loss Pelacakan Momentum Harga

Penulis:ChaoZhang, Tanggal: 2023-11-27 11:45:04
Tag:

img

Gambaran umum

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.

Logika Strategi

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.

Analisis Keuntungan

  1. Penentuan momentum ganda secara akurat menilai arah tren, mengurangi perdagangan, dan menghindari terjebak.

  2. Jarak penghentian yang fleksibel mengurangi risiko dan kunci keuntungan.

  3. Tingkat aktivasi mencegah stop loss prematur dengan memungkinkan trailing hanya setelah target keuntungan tertentu tercapai.

  4. Stop bidirectional secara komprehensif mengendalikan risiko untuk kedua panjang dan pendek.

  5. Perhitungan sederhana dan efisien, mudah dipahami dan diterapkan.

Analisis Risiko

  1. Momentum ganda dapat menghasilkan sinyal terbalik, membutuhkan filter tren.

  2. Jarak berhenti yang berlebihan dapat menyebabkan kerugian yang signifikan.

  3. Tingkat aktivasi yang tinggi mungkin melewatkan kesempatan berhenti.

  4. Lebih banyak pengujian parameter dan optimasi diperlukan untuk menemukan pemberhentian optimal.

Dapat mengurangi sinyal palsu melalui penilaian tren dan optimasi parameter.

Arahan Optimasi

  1. Menggabungkan pengakuan struktur pasar untuk tren, menghindari perdagangan terbalik.

  2. Tambahkan lebih banyak kondisi waktu seperti perubahan volume, memeras istirahat untuk meningkatkan akurasi sinyal.

  3. Mengoptimalkan parameter dengan menguji jarak pemberhentian yang berbeda dan tingkat aktivasi.

  4. Pertimbangkan stop trailing dinamis tergantung pada volatilitas pasar.

  5. Atur penghentian parsial atau bergerak untuk kontrol risiko yang lebih baik.

Kesimpulan

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)

Lebih banyak