Strategi Momentum Breakout dengan Volatility Stop

Penulis:ChaoZhang, Tanggal: 2023-11-13 17:20:51
Tag:

img

Gambaran umum

Ini adalah strategi trend-mengikuti berdasarkan breakout dan volatility stop. Strategi mengidentifikasi arah tren dengan price breakout dari line stop loss dinamis. Ini memasuki perdagangan ketika harga menembus line stop loss dan menggunakan line stop loss untuk melacak tren dan mengunci keuntungan. Strategi ini bertujuan untuk menangkap tren jangka menengah dan panjang sambil mengendalikan risiko dengan stop dinamis.

Logika Strategi

Strategi ini menggunakan indikator Volatility Stop untuk menentukan arah tren dan melacak stop loss.

  1. Perhitungan ATR (Rentang Benar Rata-rata) dari harga
  2. Dapatkan garis stop loss dengan mengalikan ATR dengan koefisien stop loss
  3. Ketika harga naik, rekor harga tertinggi, stop loss line adalah harga tertinggi dikurangi ATR * koefisien
  4. Ketika harga turun, catat harga terendah, stop loss line adalah harga terendah ditambah ATR * koefisien

Garis stop loss berfluktuasi naik turun dengan harga, membentuk saluran dinamis.

Ketika harga menembus garis stop loss, itu menandakan pembalikan tren.

  • Ketika harga melanggar di atas garis stop loss, pergi panjang
  • Ketika harga melanggar di bawah garis stop loss, pergi pendek

Setelah membuka posisi, strategi melacak stop loss dengan garis:

  • Untuk panjang, stop loss adalah harga tertinggi dikurangi ATR * koefisien
  • Singkatnya, stop loss adalah harga terendah ditambah koefisien ATR *

Ketika harga mencapai garis stop loss lagi, posisi akan ditutup.

Dengan cara ini, strategi dapat mengikuti tren secara tepat waktu sambil mengendalikan risiko dengan berhenti.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Dapat menangkap pembalikan tren secara tepat waktu dan mengikuti tren
  2. Menggunakan stop loss dinamis untuk menyesuaikan posisi stop berdasarkan volatilitas pasar
  3. Pembaruan stop loss dengan tren untuk mengunci keuntungan maksimum
  4. Menunggang tren untuk mencapai keuntungan yang signifikan
  5. Mengontrol risiko secara efektif dan menghindari kerugian besar

Analisis Risiko

Ada juga beberapa risiko yang harus dipertimbangkan:

  1. Stop loss dapat dipicu sering selama pasar range
  2. Perlu mengatur stop loss koefisien yang tepat, terlalu kecil mungkin terlalu sensitif
  3. Biaya perdagangan dapat memakan keuntungan dengan perdagangan yang sering
  4. Mungkin kehilangan beberapa keuntungan pada tahap awal tren
  5. Risiko ketika stop loss terlalu jauh dari harga

Solusi:

  1. Mengoptimalkan koefisien stop loss melalui backtest untuk menemukan parameter terbaik
  2. Gunakan kerangka waktu yang lebih lama untuk mengurangi frekuensi perdagangan
  3. Tambahkan filter untuk menghindari perdagangan berlebihan
  4. Biarkan beberapa fleksibilitas dalam jarak berhenti tetapi tidak terlalu besar

Arahan Optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Optimalkan koefisien stop loss untuk menemukan kombinasi parameter terbaik
  2. Tambahkan filter untuk menghindari whipsaws di pasar berkisar
  3. Menggabungkan beberapa kerangka waktu untuk verifikasi sinyal
  4. Mengoptimalkan ukuran posisi, secara bertahap meningkatkan ukuran
  5. Pertimbangkan penyesuaian jangka waktu yang dinamis
  6. Gabungkan dengan fundamental saham untuk menangkap tren utama

Ringkasan

Secara keseluruhan strategi momentum breakout ini dengan volatility stop adalah sistem trend following yang sangat praktis. Ini dapat menangkap peluang pembalikan tren dan mengikuti tren sambil mengontrol risiko secara efektif dengan dynamic stop. Dengan penyesuaian parameter yang tepat, dapat mencapai pengembalian yang baik selama pasar tren. Tetapi beberapa masalah perlu ditangani seperti stop yang terlalu sensitif, frekuensi perdagangan yang tinggi dll. Optimasi lebih lanjut dapat mengubahnya menjadi strategi perdagangan kuantitatif yang efisien dan kuat.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=4
strategy(shorttitle='Volatility Stop Strategy',title='Volatility Stop Strategy (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h
// Best time frame 2H

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


//Entry 


strategy.entry(id="long", long = true, when = crossover(close, vStop) and window())

//Exit
strategy.close("long", when = crossunder(close, vStop))

plot(vStop,"Vstop", color.black, linewidth=2)


Lebih banyak