Momentum Breakout Trading Strategi

Penulis:ChaoZhang, Tanggal: 2023-12-19 15:46:38
Tag:

img

Gambaran umum

Momentum Breakout Trading Strategy adalah strategi mengikuti tren yang menghasilkan sinyal perdagangan dengan mendeteksi harga yang keluar dari level support/resistance utama.

Logika Strategi

Indikator inti dari strategi ini adalah Saluran Donchian. Saluran Donchian terdiri dari harga tertinggi, harga terendah, dan harga midline selama periode yang ditetapkan. Band atas dan bawah saluran menghubungkan harga tertinggi dan terendah sesuai selama periode lookback. Sinyal panjang dihasilkan ketika harga pecah di atas band atas, sementara sinyal pendek dihasilkan pada istirahat di bawah band bawah, mencerminkan pergeseran momentum pasar.

Rata-rata bergerak digunakan untuk mengukur arah tren. Hanya sinyal beli dengan harga di atas rata-rata bergerak yang diambil untuk menghindari konsolidasi.

Secara khusus, kondisi masuk terdiri dari: Harga pecah di atas pita atas Saluran Donchian DAN menutup di atas rata-rata bergerak.

Stop loss mengikuti pita bawah Saluran Donchian, memastikan stop menyesuaikan lebih tinggi bersama dengan tren.

Analisis Keuntungan

Strategi ini secara efektif menggabungkan dua indikator untuk menilai arah tren dan momentum, menghindari perdagangan yang salah dari sinyal breakout palsu.

Secara khusus, keuntungannya adalah:

  1. Saluran Donchian secara dinamis menentukan level support/resistance utama, mengidentifikasi titik balik tren.

  2. Rata-rata bergerak menyaring konsolidasi, menghindari whipsaws yang tidak perlu.

  3. Mengikuti jalur bawah Saluran Donchian memungkinkan keuntungan untuk dimaksimalkan.

  4. Parameter yang wajar memberikan fleksibilitas di berbagai lingkungan pasar.

Analisis Risiko

Risiko utama yang dihadapi:

  1. Risiko gagal keluar - Harga gagal mempertahankan momentum setelah keluar di atas band atas.

  2. Risiko pembalikan tren - Harga berbalik sebelum mencapai stop loss.

  3. Risiko optimasi parameter - Parameter yang tidak efektif menyebabkan overtrading atau sinyal yang tidak cukup.

Untuk mengurangi, faktor-faktor seperti konfirmasi volume, penyesuaian rata-rata bergerak, jarak berhenti yang wajar harus dimasukkan.

Peluang Peningkatan

Optimasi lebih lanjut:

  1. Tambahkan volume filter untuk memastikan momentum tinggi breakouts.

  2. Mengoptimalkan periode rata-rata bergerak untuk karakteristik instrumen.

  3. Mekanisme stop loss adaptif berdasarkan dinamika volatilitas harga.

  4. Mekanisme re-entry setelah stop out awal untuk menangkap gerakan trend resumption tambahan.

  5. Pengujian multi-pasar yang kuat untuk mengidentifikasi parameter berdasarkan nuansa produk.

Kesimpulan

Momentum Breakout Trading Strategy menggabungkan indikator untuk secara efektif mengukur tren dan kekuatan momentum, menghindari masalah umum yang dihadapi oleh sistem tren mengenai entri buta. Parameter yang dioptimalkan secara wajar, mekanisme adaptif, dan pengujian yang kuat di berbagai lingkungan dan produk membuat ini merupakan sistem breakout yang serbaguna dan praktis.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Revision:        1
// Author:          @millerrh
// Strategy:  
//      Entry: Buy when Donchian Channel breaks out
//      Exit: Trail a stop with the lower Donchian Channel band
// Conditions/Variables:
//    1. Can add a filter to only take setups that are above a user-defined moving average (helps avoid trading counter trend) 
//    2. Manually configure which dates to back test
//    3. User-Configurable DC Channel length


// === CALL STRATEGY/STUDY, PROGRAMATICALLY ENTER STRATEGY PARAMETERS HERE SO YOU DON'T HAVE TO CHANGE THEM EVERY TIME YOU RUN A TEST ===
// (STRATEGY ONLY) - Comment out srategy() when in a study() 
strategy("Donchian Breakout", overlay=true, initial_capital=10000, currency='USD', 
   default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
// (STUDY ONLY) - Comment out study() when in a strategy() 
//study("Donchian Breakout", overlay=true)


// === BACKTEST RANGE ===
From_Year  = input(defval = 2019, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window

// == INPUTS ==
trigInput = input(title = "Execute Trades On...", defval = "Wick", options=["Wick","Close"]) // Useful for comparing standing stop orders vs. waiting for candle closes prior to action
stopTrail = input(title = "Trail Stops On...", defval = "ATR", options = ["ATR","Bottom of DC Channel","Midline of DC Channel","Tightest of ATR/Bot DC Channel"])
dcPeriod = input(title="DC period", type=input.integer, defval=20)

// === PLOT THE DONCHIAN CHANNEL ===
// Logic
dcUpper = highest(high, dcPeriod)
dcLower = lowest(low, dcPeriod)
dcMid = avg(dcUpper, dcLower)

// Plotting
dcUplot = plot(dcUpper, color=color.blue, linewidth=1, title="Upper Channel Line")
dcLplot = plot(dcLower, color=color.blue, linewidth=1, title="Lower Channel Line")
dcMidPlot = plot(dcMid, color=color.gray, linewidth=1, title="Mid-Line Average")
fill(dcUplot, dcLplot, color=color.gray, transp=90)

// == FILTERING ==
// Inputs
useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true)
maType = input(defval="SMA", options=["EMA", "SMA"], title = "MA Type For Filtering")
maLength   = input(defval = 100, title = "MA Period for Filtering", minval = 1)

// Declare function to be able to swap out EMA/SMA
ma(maType, src, length) =>
    maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = ma(maType, close, maLength)
plot(maFilter, title = "Trend Filter MA", color = color.green, linewidth = 3, style = plot.style_line, transp = 50)

// Check to see if the useMaFilter check box is checked, this then inputs this conditional "maFilterCheck" variable into the strategy entry 
maFilterCheck = if useMaFilter == true
    maFilter
else
    0

// == ENTRY AND EXIT CRITERIA ==
// Trigger stop based on candle close or High/Low (i.e. Wick) - If doing daily timeframe, can do candle close.  Intraday should use wick.
trigResistance = trigInput == "Close" ? close : trigInput == "Wick" ? high : na
trigSupport = trigInput == "Close" ? close : trigInput == "Wick" ? low : na
buySignal = trigResistance >= dcUpper[1] // The [1] looks at the previous bar's value as it didn't seem to be triggering correctly without it (likely) DC moves with each bar
sellSignal = trigSupport <= dcLower[1]

buy = buySignal and dcUpper[1] > maFilterCheck // All these conditions need to be met to buy


// (STRATEGY ONLY) Comment out for Study
// This string of code enters and exits at the close
if (trigInput == "Close")
    strategy.entry("Long", strategy.long, when = buy)
    strategy.close("Long", when = sellSignal)

// This string of code enters and exits at the wick (i.e. with pre-set stops)
if (trigInput == "Wick")
    strategy.entry("Long", strategy.long, stop = dcUpper[1], when = time > Start and time < Finish and dcUpper[1] > maFilterCheck)
    strategy.exit("Exit Long", from_entry = "Long", stop = dcLower[1])





Lebih banyak