볼링거 밴드 (Bollinger Bands) 브레이크아웃 재입구 거래 전략

저자:차오장, 날짜: 2024-03-08 14:08:53
태그:

img

전반적인 설명

이 전략은 볼링거 밴드 지표에 기반한다. 주요 아이디어는 상위 또는 하위 밴드에서 벗어난 후 가격이 볼링거 밴드에 다시 진입할 때까지 기다리고, 다시 진입 지점에서의 진출과 같은 방향으로 위치를 설정하는 것이다. 이 전략은 가격이 극단적인 영역에 있을 때 종종 역전되는 특성을 이용한다. 볼링거 밴드 진출과 재 진입의 조건을 결합함으로써 시장 전환점을 포착하고 더 높은 승률을 달성하는 것을 목표로 한다.

전략 원칙

  1. 볼링거 밴드의 중간, 상위 및 하위 대역을 계산합니다. 중간 대역은 이동 평균이며, 상위 및 하위 대역은 중간 대역이며, 일정 수의 표준 편차를 더하거나 빼면 됩니다.
  2. 가격이 상부 또는 하부 볼링거 밴드에서 벗어나는지 결정합니다. 닫기 가격이 상부 밴드를 초과하면 상향 브레이크로 간주됩니다. 닫기 가격이 하부 밴드 아래로 떨어지면 하향 브레이크로 간주됩니다.
  3. 상향 브레이크오프가 발생하면 그 브레이크오프 촛불의 가장 높은 가격을 정점으로 기록한다. 하향 브레이크오프가 발생하면 그 브레이크오프 촛불의 가장 낮은 가격을 정점으로 기록한다. 정점은 가격이 나중에 다시 들어갔는지 결정하는 데 사용됩니다.
  4. 브레이크오웃이 발생하면 가격이 볼링거 밴드 안에 다시 들어갈 때까지 기다립니다. 닫기 가격이 이 때 상위와 하위 밴드 사이에 있다면 가격이 다시 들어간 것으로 간주됩니다.
  5. 가격이 다시 들어올 때, 이전 촛불이 상향 브레이크업 (break_up[1] and inside) 이었으면, 장거리; 이전 촛불이 하향 브레이크업 (break_down[1] and inside) 이었으면, 단축.
  6. 포지션 관리: 긴 포지션에서 닫기 가격이 중간 범위를 넘어서면 긴 포지션을 닫습니다. 짧은 포지션에서 닫기 가격이 중간 범위를 넘어서면 짧은 포지션을 닫습니다.

이점 분석

  1. 볼링거 밴드는 높은 적응력을 가지고 있으며 가격 변동에 따라 동적으로 조정할 수 있습니다. 이는 트렌드와 변동성을 파악하는 데 도움이됩니다.
  2. 간단한 볼링거 밴드 브레이크아웃 전략과 비교하면 재입구 조건을 추가하면 높은 점과 낮은 점의 추격을 어느 정도 피할 수 있으며 입구 품질을 향상시킬 수 있습니다.
  3. 출구 조건은 중간 띠를 기준으로 사용하는데, 이 띠는 간단하고 사용하기 쉬우며 수익을 비교적 잘 보호할 수 있습니다.
  4. 길이와 오차 곱셈과 같은 볼링거 밴드의 매개 변수는 고도의 유연성을 제공하여 사용자 정의 할 수 있습니다.

위험 분석

  1. 볼링거 밴드 매개 변수들의 잘못된 선택은 전략의 성능에 영향을 미치는 조기 또는 늦은 엔트리로 이어질 수 있습니다. 매개 변수를 최적화함으로써 이를 완화할 수 있습니다.
  2. 가격이 볼링거 밴드 근처에서 변동할 때 포지션이 자주 열리고 닫히게 되는데 이로 인해 거래 비용이 증가합니다.
  3. 트렌드가 매우 강하고 가격이 오랫동안 볼링거 밴드에 다시 진입하지 않으면 트렌드 수익이 놓칠 수 있습니다.
  4. 볼링거 밴드 표시기를 단독으로 사용하는 것은 일부 도구 또는 시장 조건에 효과적이지 않을 수 있으며 다른 신호와 함께 사용하는 것이 필요할 수 있습니다.

최적화 방향

  1. 더 많은 필터링 조건을 도입하는 것을 고려하십시오. 예를 들어, 가격이 일정 기간 동안 볼링거 밴드 이상으로 달렸다면 브레이크오웃이 더 신뢰할 수 있습니다. 또는 MA 각도 및 ADX와 같은 트렌드 결정 지표를 사용하십시오.
  2. 오스실레이션 시장에서는 블라인드 엔트리를 피하기 위해 리미트 오더와 타이머를 추가할 수 있습니다.
  3. 출구에서는 ATR 또는 이동 평균을 추가로 결합하여 출구 시기를 제어할 수 있습니다.
  4. 적절한 거래 목표 및 시간 프레임을 선택하기 위해 다른 기본 자산 및 시간 프레임에 대한 매개 변수 최적화 및 특성 분석을 수행합니다.
  5. 변동성이 줄어들 때 포지션 크기를 늘리고 변동성이 증가할 때 포지션 크기를 줄이는 등 포지션 관리를 추가하는 것을 고려해야 합니다.

요약

볼링거 밴드 (Bollinger Bands) 브레이크아웃 재입구 거래 전략 (Breakout Reentry Trading Strategy) 은 간단하고 실용적인 양적 거래 전략이다. 극단적인 상황에 대한 가격의 반응을 활용하고 볼링거 밴드 (Bollinger Bands) 툴을 통해 진입 및 출구 조건을 구성하여 일정 범위에서 트렌드 시작 및 종료 지점을 캡처하고 빈번한 거래를 제어할 수 있다. 동시에 이 전략에는 매개 변수 선택, 오스실레이션 시장에서의 열악한 성능, 그리고 불충분한 트렌드 캡처 등의 문제도 있다. 세부 사항의 최적화와 다른 신호와의 조합을 통해 이 전략의 적응력과 견고성을 더욱 향상시킬 것으로 예상된다.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-27 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(shorttitle="BB", title="Bollinger Bands", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(1.7, minval=0.001, maxval=50, title="StdDev")

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

break_up = close > upper
break_down = close < lower
inside = close > lower and close < upper

sell_condition = break_up[1] and inside
buy_condition = break_down[1] and inside

// Conditions to close trades
close_sell_condition = close > basis
close_buy_condition = close < basis

trade_condition = sell_condition or buy_condition

// Tracking the high of the breakout candle
var float peak = na

if (not trade_condition)
    peak := close
if (break_up and peak < high)
    peak := high
if (break_down and peak > low)
    peak := low

// Entering positions
if (buy_condition)
    strategy.entry("Buy", strategy.long)
if (sell_condition)
    strategy.entry("Sell", strategy.short)

// Exiting positions when close crosses the basis
if (strategy.position_size > 0 and close_sell_condition) // If in a long position and close crosses above basis
    strategy.close("Buy")
if (strategy.position_size < 0 and close_buy_condition) // If in a short position and close crosses below basis
    strategy.close("Sell")

더 많은