볼링거 밴드 멋진 오시레이터 브레이크오웃 거래 전략

저자:차오장, 날짜: 2023-12-12 17:12:35
태그:

img

전반적인 설명

이 전략은 브레이크아웃 거래 모델을 구현하기 위해 볼링거 밴드 지표와 어월 오시레이터 (AO) 지표를 결합합니다. 빠른 EMA가 BB 채널을 통과 할 때 AO 지표의 방향 신호와 함께 구매 및 판매 신호를 생성합니다.

전략 논리

  1. 가격 채널을 결정하기 위해 볼링거 밴드의 중간, 상위 및 하위 밴드를 사용하십시오.
  2. 빠른 EMA가 중간 밴드를 넘을 때 채널 브레이크를 판단합니다.
  3. AO 지표는 상승 추세 또는 하락 추세 방향을 결정합니다.
  4. 빠른 EMA가 중간 밴드를 상향으로 돌파하고 AO가 긍정적일 때 구매 신호가 생성됩니다.
  5. 빠른 EMA가 중위역을 넘어 내려가고 AO가 음수일 때 판매 신호가 생성됩니다.

이점 분석

  1. BB 채널은 잘못된 신호를 피합니다.
  2. AO 표시기는 신호의 정확성을 향상시킵니다.
  3. 트렌드의 시작에서 더 큰 수익을 얻습니다.

위험 분석

  1. 부적절한 BB 매개 변수는 너무 넓거나 너무 좁은 채널을 일으킬 수 있습니다.
  2. AO 매개 변수는 정확성에 영향을 줍니다.
  3. 탈출 신호는 거짓 탈출일 수 있습니다.

해결책

  1. BB와 AO의 매개 변수를 최적화해서 최적의 조합을 찾습니다.
  2. 가짜 탈출을 피하기 위해 강도 조건을 추가합니다.
  3. 신뢰성을 보장하기 위해 다른 지표와 결합합니다.

최적화 방향

  1. 적절한 채널 범위를 찾기 위해 BB 매개 변수를 최적화합니다.
  2. 정확도를 높이기 위해 장기 및 단기 AO를 최적화합니다.
  3. 부피 또는 다른 필터를 추가하여 분출 신뢰성을 보장합니다.
  4. 허위 탈출률을 낮추기 위해 강도 조건을 최적화하십시오.

결론

이 전략은 가격 채널, 트렌드 방향 및 브레이크아웃 모델을 포괄적으로 고려합니다. 매개 변수 최적화 및 지표 조합을 통해 더 견고하고 수익성이 높을 수 있습니다. 브레이크아웃 모델은 초기 트렌드 기회를 포착하고 매우 실용적입니다.


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

더 많은