Bollinger Band Awesome Oscillator Breakout Chiến lược giao dịch

Tác giả:ChaoZhang, Ngày: 2023-12-12 17:12:35
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số Bollinger Bands và chỉ số Awesome Oscillator (AO) để thực hiện mô hình giao dịch đột phá. Nó tạo ra tín hiệu mua và bán khi EMA nhanh vượt qua kênh BB, cùng với các tín hiệu hướng của chỉ số AO.

Chiến lược logic

  1. Sử dụng các dải giữa, trên và dưới của Bollinger Bands để xác định kênh giá.
  2. Đánh giá một kênh đột phá khi EMA nhanh vượt qua dải giữa.
  3. Chỉ số AO xác định hướng xu hướng tăng hoặc giảm.
  4. Khi EMA nhanh vượt qua dải giữa lên và AO dương tính, một tín hiệu mua được tạo ra.
  5. Khi EMA nhanh vượt qua dải giữa xuống và AO âm, một tín hiệu bán được tạo ra.

Phân tích lợi thế

  1. Kênh BB tránh các tín hiệu sai.
  2. Chỉ số AO cải thiện độ chính xác của tín hiệu.
  3. Nhận được lợi nhuận lớn hơn ở đầu xu hướng.

Phân tích rủi ro

  1. Các thông số BB không đúng có thể gây ra kênh quá rộng hoặc quá hẹp.
  2. Các thông số AO ảnh hưởng đến độ chính xác.
  3. tín hiệu thoát hiểm có thể là sự thoát hiểm sai.

Giải pháp

  1. Tối ưu hóa các tham số của BB và AO để tìm kết hợp tốt nhất.
  2. Thêm điều kiện sức mạnh để tránh thoát sai.
  3. Kết hợp với các chỉ số khác để đảm bảo độ tin cậy.

Hướng dẫn tối ưu hóa

  1. Tối ưu hóa các thông số BB để tìm phạm vi kênh phù hợp.
  2. Tối ưu hóa thời gian dài và ngắn hạn của AO để cải thiện độ chính xác.
  3. Thêm âm lượng hoặc các bộ lọc khác để đảm bảo độ tin cậy đột phá.
  4. Tối ưu hóa điều kiện sức mạnh để giảm tỷ lệ phá vỡ sai.

Kết luận

Chiến lược này xem xét toàn diện kênh giá, hướng xu hướng và mô hình đột phá. Nó có thể mạnh mẽ hơn và có lợi nhuận thông qua tối ưu hóa tham số và kết hợp chỉ số. Mô hình đột phá của nó nắm bắt các cơ hội xu hướng sớm và rất thực tế.


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

//@version=3

strategy(shorttitle="BB+AO STRAT", title="BB+AO STRAT", overlay=true)


// === BACKTEST RANGE ===
FromMonth = input(defval = 6, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014)

// Bollinger Bands Inputs
bb_use_ema = input(false, title="Use EMA for Bollinger Band")
bb_length = input(5, minval=1, title="Bollinger Length")
bb_source = input(close, title="Bollinger Source")
bb_mult = input(2.0, title="Base Multiplier", minval=0.5, maxval=10)
// EMA inputs
fast_ma_len = input(2, title="Fast EMA length", minval=2)
// Awesome Inputs
nLengthSlow = input(34, minval=1, title="Awesome Length Slow")
nLengthFast = input(5, minval=1, title="Awesome Length Fast")




// Breakout Indicator Inputs
bb_basis = bb_use_ema ? ema(bb_source, bb_length) : sma(bb_source, bb_length)
fast_ma  = ema(bb_source, fast_ma_len)

// Deviation

dev = stdev(bb_source, bb_length)
bb_dev_inner = bb_mult * dev

// Upper bands
inner_high = bb_basis + bb_dev_inner
// Lower Bands
inner_low = bb_basis - bb_dev_inner

// Calculate Awesome Oscillator
xSMA1_hl2 = sma(hl2, nLengthFast)
xSMA2_hl2 = sma(hl2, nLengthSlow)
xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
// Calculate direction of AO
AO = xSMA1_SMA2>=0? xSMA1_SMA2 > xSMA1_SMA2[1] ? 1 : 2 : xSMA1_SMA2 > xSMA1_SMA2[1] ? -1 : -2



// === PLOTTING ===

// plot BB basis
plot(bb_basis, title="Basis Line", color=red, transp=10, linewidth=2)
// plot BB upper and lower bands
ubi = plot(inner_high, title="Upper Band Inner", color=blue, transp=10, linewidth=1)
lbi = plot(inner_low, title="Lower Band Inner", color=blue, transp=10, linewidth=1)
// center BB channel fill
fill(ubi, lbi, title="Center Channel Fill", color=silver, transp=90)

// plot fast ma
plot(fast_ma, title="Fast EMA", color=black, transp=10, linewidth=2)

// Calc breakouts
break_down =   crossunder(fast_ma, bb_basis) and close < bb_basis and abs(AO)==2
break_up   =  crossover(fast_ma, bb_basis) and close > bb_basis and abs(AO)==1

// Show Break Alerts
plotshape(break_down, title="Breakout Down", style=shape.arrowdown, location=location.abovebar, size=size.auto, text="Sell", color=red, transp=0)
plotshape(break_up, title="Breakout Up", style=shape.arrowup, location=location.belowbar, size=size.auto, text="Buy", color=green, transp=0)
// === ALERTS ===



strategy.entry("L", strategy.long, when=(break_up and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))


strategy.close("L", when=(break_down and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))

// === /PLOTTING ===
barcolor(AO == 2 ? red: AO == 1 ? green : blue )



// eof

Thêm nữa