듀얼 볼링거 밴드 변동성 추적 전략 (Dual Bollinger Band Volatility Tracking strategy) 은 트래킹을 위해 듀얼 볼링거 밴드를 구축하여 가격 변동성을 포착하는 양적 거래 전략이다. 이 전략은 볼링거 밴드의 상부 및 하부 레일을 활용하여 실시간 시장 변동성을 포착합니다.
이 전략은 먼저 N일 이동평균을 기준으로 계산하고, 이후 볼링거 밴드를 구성하기 위해 표준편차의 배수를 기반으로 상위 및 하위 레일을 계산합니다. 이 전략은 상위 및 하위 레일 모두 표준편차의 배수를 사용하는 이중 볼링거 밴드를 사용합니다. 이중 볼링거 밴드가 형성되면 가격이 상위 레일을 통과하면 구매 신호가 발생하고 가격이 하위 레일을 통과하면 판매 신호가 발생하여 볼링거 밴드에서 가격 변동 기회를 포착합니다.
이 전략은 또한 백테스트를 더 타겟화하고 초기 데이터가 테스트 결과에 영향을 미치지 않도록 시간 창을 설정합니다. 전체 전략 작업 흐름은: 이중 볼링거 밴드, 가격과 레일의 크로스오버를 거래 신호로 구성하고 초기 데이터의 영향을 피하기 위해 시간 창을 설정합니다.
이 전략의 가장 큰 장점은 Bollinger Bands의 상부 및 하부 레일을 뚫고 OPERATION 방향을 결정함으로써 가격 변동성을 실시간으로 파악할 수 있다는 것입니다. 다른 지표와 비교하면 Bollinger Bands는 시장에 더 민감하게 반응하고 짧은 시간 내에 거래 신호를 형성 할 수 있습니다. 또한 이중 Bollinger Bands는 더 넓은 채널을 설정하여 가격 유출의 확률이 높아지며 전략이 더 많은 거래 기회를 포착 할 수 있습니다.
이 전략의 주요 위험은 볼링거 밴드를 구성하는 N-day 기간의 매개 변수 설정과 표준편차 배수에서 발생합니다. 매개 변수가 적절히 설정되지 않으면 너무 넓거나 너무 좁은 볼링거 밴드를 초래하여 거래 기회를 놓치고 잘못된 신호를 생성합니다. 또한 양방향 거래에는 스톱 로스가 설정되지 않아 손실이 커질 수 있습니다.
해결책은 매개 변수를 최적화하고 실시간으로 볼링거 밴드의 모양을 평가하는 것입니다. 또한 단일 손실을 제어하기 위해 역사적 데이터에 기반한 스톱 로스 전략을 설정합니다.
이 전략에 최적화해야 할 주요 측면:
볼링거 밴드의 매개 변수를 최적화하고, N일 기간과 표준편차 배수를 다른 시장 특성에 더 잘 맞게 조정합니다.
주문 갱신 메커니즘을 늘려서 원래 주문에서 수익을 얻은 후 추가 주문을 할 수 있도록 하여 수익 공간을 확대합니다.
손해를 막기 위한 전략을 세우고, 손해를 통제하기 위해, 가격이 불리한 방향으로 볼링거 밴드의 상단 또는 하단 경로를 통과할 때 지점을 종료합니다.
다른 지표를 포함해서 신호를 검사하고 변동성 있는 시장에서 잘못된 신호를 피합니다.
이중 볼링거 밴드 변동성 추적 전략은 더 많은 단기 거래 기회를 잡을 수 있도록 양면 볼링거 밴드를 구축하여 실시간으로 가격 변동성을 포착합니다. 이 전략의 장점은 시장 변화에 민감하고 빠른 신호 생성입니다. 주요 위험은 부적절한 매개 변수 설정과 스톱 손실 부족에서 발생합니다. 다차원적 최적화를 통해 전략을 더 안정적이고 효율적으로 만들 수 있습니다.
/*backtest start: 2022-12-18 00:00:00 end: 2023-12-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("BB_BB", overlay=true,default_qty_type=strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0) length = input(20, minval=1) src = input(close, title="Source") mult = input(2.0, minval=0.001, maxval=50) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2017, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev plot(basis, color=red) p1 = plot(upper, color=blue) p2 = plot(lower, color=blue) fill(p1, p2) buy = crossover(sma(close,1), upper) or crossover(sma(close,1), lower) sell = crossunder(sma(close,1), upper) or crossunder(sma(close,1), lower) if(buy) strategy.entry("BUY", strategy.long, when = window()) if(sell) strategy.entry("SELL", strategy.short, when = window())