Artikel ini akan membahas strategi kuantitatif untuk melakukan perdagangan tren dengan memanfaatkan terobosan saluran. Strategi ini mengidentifikasi arah tren melalui saluran EMA, dan melakukan operasi reversal dengan putaran putaran putaran Brin.
Strategi ini mencakup beberapa elemen utama:
Mengatur EMA garis tengah dan memperluas saluran atas dan bawah sesuai dengan proporsi;
Ketika harga menembus saluran atas, lakukan lebih banyak pelacakan; ketika harga menembus saluran bawah, lakukan pelacakan kosong;
Ketika Brin bergetar, pertimbangkan untuk membalikkan tren dan lakukan operasi kebalikan.
Atur stop loss untuk membatasi risiko kerugian.
Parameter saluran dapat disesuaikan untuk menemukan kombinasi parameter terbaik.
Strategi ini menilai arah tren utama melalui saluran EMA, dan menggunakan Brin untuk mengidentifikasi peluang untuk membalikkan dan membentuk sistem tren yang lengkap.
Kedua, keunggulan strategi
Keuntungan terbesar dari strategi ini adalah bahwa indikator digunakan secara rasional, EMA menilai arus utama, dan Brin-band menangkap reversal.
Keuntungan lainnya adalah bahwa pengaturan Stop Loss bekerja secara langsung dan dapat mengendalikan risiko.
Akhirnya, parameter dapat disesuaikan dan dioptimalkan untuk varietas yang berbeda.
Ketiga, potensi risiko
Namun, ada beberapa masalah dengan strategi ini:
Pertama, ada keterlambatan pada EMA dan BRI.
Kedua, pertimbangan risiko kegagalan operasi reversal.
Terakhir, optimasi parameter membutuhkan banyak pekerjaan untuk menghindari overoptimisasi.
Empat isi, ringkasan
Artikel ini membahas strategi untuk melakukan perdagangan tren menggunakan EMA channel breakout. Strategi ini dapat mengidentifikasi tren utama dan melakukan operasi terbalik pada titik balik. Strategi ini dapat memperoleh keuntungan yang stabil melalui optimasi parameter, tetapi juga perlu untuk mencegah kesulitan optimasi dan keterlambatan indikator.
/*backtest
start: 2023-08-15 00:00:00
end: 2023-09-14 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="[mdeacey] EMA Percentage Channel + Bollinger Band Trending Strategy", shorttitle="[mdeacey] EMA% Channel + BB Trend Strategy", overlay=true)
//EMA 200
len = input(title="EMA Length", type=input.integer, defval=100)
srce = input(title="EMA Source", type=input.source, defval=close)
ema1= ema(srce,len)
percent = input(title="Inside Channel (%)", type=input.float, defval= 1)
valuee = (percent*ema1)/100
upperbande = ema1 + valuee
lowerbande = ema1 - valuee
///2
percent2 = input(title="Outside Channel (%)", type=input.float, defval= 2)
valuee2 = (percent2*ema1)/100
upperbande2 = ema1 + valuee2
lowerbande2 = ema1 - valuee2
plot(upperbande, title='Inside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande, title='Inside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )
plot(upperbande2, title='Outside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande2, title='Outside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )
length = input(20, minval=2)
src = input(close, title="Close price")
mult = input(2.0, title="Multiplier", minval=0.001, maxval=50)
MA2 = sma(src, length)
dev = mult * stdev(src, length)
upper = MA2 + dev
lower = MA2 - dev
signalColor = crossunder(close, upper) ? color.red : crossover(close, lower) ? color.green : color.white
barcolor(color=signalColor)
nopo= strategy.position_size==0
upperBand = plot(upper, title='Upper Bollinger Band', color=color.gray, linewidth=1)
lowerBand = plot(lower, title='Lower Bollinger Band', color=color.gray, linewidth=1)
fill(upperBand, lowerBand, title='Bollinger Band', color=color.black)
strategy.entry("Long",true,when = crossover(close,lower) and close <lowerbande and close>lowerbande2)
strategy.close("Long",when = crossunder(close,lowerbande2))//crossunder(close,lowerbande) or crossunder(close,lowerbande2))
strategy.entry("Short",false,when = crossunder(close,upper) and close >upperbande and close<upperbande2)
strategy.close("Short",when = crossover(close,upperbande2) )//crossover(close,upperbande) or crossover(close,upperbande2) )
//Inputs
atrPeriod = input(defval=14, title="ATR Period",group='ATR Stoploss', type=input.integer) // Adjust this to change the ATR calculation length
multiplierPeriod = input(defval=1.75, title="ATR Multiplier",group='ATR Stoploss', type=input.float)// Adjust this to change the distance between your candles and the line
//ATR Calculation
pine_rma(x, y) =>
alpha = y
sum = 0.0
sum := (x + (alpha - 1) * nz(sum[1])) / alpha
true_range() =>
max(high - low, max(abs(high - close[1]), abs(low - close[1])))
//Long SL
plot(low - pine_rma(true_range() * multiplierPeriod, atrPeriod), "Long Stop", color=color.red, offset = 1)
// Short SL
plot(high +pine_rma(true_range() * multiplierPeriod, atrPeriod), "Short Stop", color=color.red, offset = 1)
strategy.exit("Exit","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod) )
strategy.exit("Exit","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod) )
/////////////////////new strategy
strategy.entry("Long",true,stop =upperbande ,when = close <upperbande and close[1] <upperbande and nopo )
strategy.close("Long",when = crossunder(close,upper) )// and close <upperbande and close>lowerbande)
strategy.entry("Short",false,stop =lowerbande ,when = close >lowerbande and close[1] >lowerbande and nopo )
strategy.close("Short",when = crossover(close, lower) )
strategy.exit("Exit","Long",stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod) )
strategy.exit("Exit","Short",stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod) )