Bài viết này giải thích chi tiết một chiến lược giao dịch xu hướng sử dụng các kênh đột phá. Nó xác định hướng xu hướng với các kênh EMA và thực hiện các giao dịch chống xu hướng bằng cách sử dụng Bollinger Bands.
I. Chiến lược logic
Các thành phần chính là:
Thiết lập EMA giữa và mở rộng các kênh trên / dưới dựa trên tỷ lệ phần trăm.
Đi dài trên các khe hở kênh phía trên và ngắn trên các khe hở kênh phía dưới để theo dõi xu hướng.
Khi BB thu hẹp, đánh giá sự đảo ngược xu hướng cho các giao dịch ngược xu hướng.
Sử dụng ATR dừng để hạn chế rủi ro mất mát.
Các thông số kênh có thể tùy chỉnh để tối ưu hóa.
Nó kết hợp các kênh EMA cho hướng xu hướng và BB cho sự đảo ngược để tạo thành một hệ thống hoàn chỉnh.
II. Lợi thế của Chiến lược
Ưu điểm lớn nhất là việc sử dụng chỉ số hợp lý, với EMA xác định xu hướng chính và BB cho sự đảo ngược.
Một lợi thế khác là dừng lỗ trực tiếp và hiệu quả để kiểm soát rủi ro.
Cuối cùng, các tham số có thể tùy chỉnh cho phép tối ưu hóa trên các sản phẩm.
III. Các rủi ro tiềm ẩn
Tuy nhiên, có một số rủi ro:
Thứ nhất, cả EMA và BB đều có vấn đề chậm.
Thứ hai, các giao dịch đảo ngược thất bại cần được xem xét.
Cuối cùng, tối ưu hóa rộng rãi là cần thiết để ngăn ngừa quá phù hợp.
IV. Tóm tắt
Tóm lại, bài viết này đã giải thích một chiến lược theo xu hướng dựa trên sự đột phá kênh EMA, với các giao dịch ngược xu hướng tại các bước đảo ngược. Nó có thể đạt được lợi nhuận ổn định thông qua tối ưu hóa tham số nhưng đòi hỏi phải quản lý khó khăn tối ưu hóa và trễ chỉ số.
/*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) )