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