Xu hướng theo chiến lược dựa trên việc thoát khỏi kênh

Tác giả:ChaoZhang, Ngày: 2023-09-15 12:02:10
Tags:

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à:

  1. 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.

  2. Đ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.

  3. 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.

  4. Sử dụng ATR dừng để hạn chế rủi ro mất mát.

  5. 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)  )


Thêm nữa