
Strategi Perdagangan Breakout Momentum adalah strategi pengesanan trend yang menghasilkan isyarat perdagangan dengan mengesan harga yang menembusi tahap rintangan sokongan yang penting. Strategi ini menggunakan dinamika indikator Saluran Donchian untuk menentukan tahap rintangan sokongan yang penting, dan digabungkan dengan indikator purata bergerak untuk menyaring isyarat lebih lanjut, untuk mengelakkan perdagangan yang salah.
Penunjuk utama strategi ini adalah Saluran Donchian. Saluran Donchian terdiri daripada harga tertinggi, harga terendah dan harga garis tengah. Saluran atas dan bawah saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran saluran
Rata-rata bergerak digunakan untuk menentukan arah trend harga. Hanya apabila harga berada di atas rata-rata bergerak, isyarat beli untuk menembusi saluran atas diambil, yang dapat mengelakkan membeli di kawasan penyesuaian.
Khususnya, syarat masuk ke dalam strategi ini adalah: harga menembusi Donchian Channel ke arah atas dan harga penutupan lebih tinggi daripada purata bergerak. Syarat keluar adalah: harga jatuh ke arah bawah Donchian Channel.
Stop loss adalah cara untuk mengesan Donchian Channel di bawah rel. Ini memastikan titik stop loss bergerak ke atas mengikut trend.
Strategi ini menggabungkan dua petunjuk untuk menentukan arah dan kekuatan trend, dapat mengenal pasti isyarat penembusan dengan berkesan, dan mengelakkan perdagangan yang salah. Pada masa yang sama, cara menghentikan kerugian adalah munasabah, menjadikan strategi ini dapat menjejaki trend dengan baik untuk mendapat keuntungan.
Secara khusus, strategi ini mempunyai kelebihan berikut:
Penunjuk Saluran Donchian boleh secara dinamik menentukan tahap rintangan sokongan yang penting, mengenal pasti titik perubahan trend yang penting.
Penunjuk purata bergerak berfungsi sebagai penapis untuk mengelakkan pembelian ke dalam kawasan penyesuaian dan mengurangkan perdagangan yang tidak sah.
Stop loss adalah cara untuk mengesan tren bawah Donchian Channel, untuk memaksimumkan keuntungan mengikut trend.
Tetapan parameter strategi adalah fleksibel dan boleh disesuaikan dan dioptimumkan untuk keadaan pasaran yang berbeza.
Strategi ini mempunyai risiko utama:
Risiko kegagalan penembusan. Harga mungkin akan berpatah balik dengan cepat selepas menembusi saluran dan tidak dapat membina gudang dengan berkesan.
Risiko trend reversal. Pergerakan pasaran mungkin berbalik sebelum titik henti kerugian, menyebabkan henti kerugian.
Risiko pengoptimuman parameter. Tetapan parameter yang tidak betul boleh menyebabkan perdagangan yang kerap atau kurang isyarat.
Untuk menghadapi risiko ini, ia boleh dioptimumkan dengan cara menyesuaikan kitaran purata bergerak, menambah penapisan kuantiti transaksi, dan sebagainya, untuk memastikan bahawa isyarat yang dihasilkan lebih dipercayai. Di samping itu, beberapa tetapan Stop Loss Loose harus disesuaikan untuk menghadapi risiko penyesuaian jangka pendek.
Strategi ini boleh dioptimumkan dengan cara berikut:
Dengan menggunakan penunjuk lalu lintas untuk menyaring isyarat, pastikan penembusan itu kuat.
Mengoptimumkan parameter kitaran purata bergerak untuk menjadikannya lebih sesuai dengan ciri-ciri pelbagai jenis.
Menyesuaikan mekanisme hentian kerugian supaya jarak hentian kerugian dapat menyesuaikan diri dengan turun naik harga.
Menambah mekanisme kemasukan semula untuk menangkap peluang tren selepas berhenti keluar.
Ujian semula pelbagai jenis, memeriksa parameter kecergasan.
Strategi perdagangan terobosan dinamik mengintegrasikan pelbagai petunjuk untuk menentukan arah dan kekuatan trend, menyelesaikan masalah binaan buta sistem trend yang biasa. Tetapan parameter strategi ini fleksibel, dan boleh disesuaikan secara optimum untuk keadaan dan jenis perdagangan yang berbeza, merupakan sistem penembusan yang lebih umum dan praktikal.
/*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])