볼링거 밴드 브레이크아웃 (Bollinger Bands Breakout with Volatility Filter Strategy) 은 볼링거 밴드 지표에 기반한 거래 전략이다. 볼링거 밴드를 사용하여 이동 평균에 대한 가격의 위치와 변동성을 결정하여 진입 및 출구 지점을 결정한다. 이 전략의 독특한 측면은 높은 시장 변동성 동안 트레이드에 진입하는 것을 피하는 변동성 필터를 사용하는 것입니다. 또한, 전략은 이익을 보호하고 위험을 제어하기 위해 이익을 취하고 손실을 중지하는 조건을 설정합니다.
이 전략의 핵심은 볼링거 밴드 지표의 계산이다. 볼링거 밴드는 세 개의 라인으로 구성된다: 중간 라인은 간단한 이동 평균이며, 상위와 하부 밴드는 각각 중간 라인의 위와 아래의 특정 표준 편차로 설정된다. 표준 편차의 크기는 매개 변수 mult에 의해 제어된다.
전략의 진입 조건은 볼링거 밴드 (Bollinger Bands) 에 대한 폐쇄 가격의 위치에 기반합니다. 거래 방향이 긴 (tradeDirection>=0) 로 설정되어 있고, 종료 가격이 하위 밴드 (lower_breakout_pct) 아래에서 일정 비율로 깨지면, 긴 포지션이 열립니다. 거래 방향이 짧은 (tradeDirection<=0) 로 설정되어 있고, 종료 가격이 상위 밴드 (upper_breakout_pct) 위에 일정 비율로 깨지면, 짧은 포지션이 열립니다. 브레이크 퍼센트 매개 변수는 트렌드를 확인하기 위해 포지션에 들어가기 전에 가격이 볼링거 밴드를 약간 넘을 수 있습니다.
반면, 두 개의 연속 촛불의 변화율이 모두 미리 설정된 변동성 임계 (변동성) 을 초과하면 현재 시장 변동성이 높다고 간주되며 전략은 새로운 포지션을 열지 않습니다. 이 변동성 필터는 극도로 변동적인 시장 조건에서 거래를 어느 정도 피할 수 있습니다.
출구 포지션의 경우, 긴 포지션의 종료 가격이 상위 지대 (상위 영역) 근처에 도달하면long_win_pct), 또는 단기 포지션의 폐쇄 가격은 하위 대역 (lower+area) 근처에 도달합니다.short_win_pct), 전략은 수익을 취하기 위해 해당 포지션을 닫습니다. 또한, 포지션의 실현되지 않은 손실이 미리 설정된 최대 드래운 다운 비율 (max_drawdown_percent) 을 초과하면 전략은 또한 손실을 중지하기 위해 포지션을 닫습니다.
볼링거 밴드 (Bollinger Bands) 는 이동 평균과 가격 변동에 대한 정보를 포함하는 성숙하고 널리 사용되는 기술 지표입니다. 거래 전략을 수립하기 위해 볼링거 밴드를 활용하면 트렌드와 변동의 변화를 파악할 수 있습니다.
이 전략은 장기 및 단기 엔트리 로직을 모두 포함하고 있으며, 상승 및 하락 시장에서 기회를 유연하게 포착 할 수 있습니다. 볼링거 밴드 브레이크아웃 포인트의 설정은 전략의 엔트리 포인트를 더 확인시킵니다.
변동성 필터는 매우 변동적인 시장에서 포지션을 개설하는 것을 피하고, 빈번한 거래와 레버리지와 관련된 위험을 어느 정도 줄입니다.
이 전략은 수익을 취하고 손실을 중지하는 메커니즘을 사용하여 적극적으로 포지션을 관리하고 가격이 핵심 수준으로 되돌아 갈 때 닫습니다. 이것은 이익을 보호하고 마감량을 제어하는 데 도움이됩니다.
볼링거 밴드는 본질적으로 지연 지표이며 시장에 반응하는 데 약간의 지연을 가지고 있습니다. 트렌드 반전 또는 시장 조건의 변화의 중요한 순간에 전략은 최고의 입시 시기를 놓칠 수 있습니다.
전략의 매개 변수 설정은 다른 시장 조건에 보편적으로 적용되지 않을 수 있습니다. 예를 들어, 변동성 필터의 임계 설정은 트렌딩 및 오스실레이션 시장에서 차별화되어야 할 수 있습니다. 고정 매개 변수는 전략이 특정 시장 조건에서 포지션을 열 수 없거나 너무 자주 열 수 없게 할 수 있습니다.
스톱 로스 조치가 있지만 시장 격차가 발생하면 전략은 미리 설정된 가격으로 실행되지 않을 수 있으며 더 큰 손실을 초래할 수 있습니다.
이 전략은 포지션 개척 후 후속 스톱 로스를 설정하지 않습니다. 이는 일부 수익을 줄 수 있습니다.
더 많은 기술 지표 또는 ATR, 트렌드 지표, 변동성 지표 등 시장 상태 판단을 전략의 필터링 조건으로 도입하여 입상품의 품질과 타이밍을 향상시키는 것을 고려하십시오.
변동성 필터에 대해, 필터링 효과를 향상시키기 위해 다른 도구 또는 시간 프레임에 적응하는 동적 임계치를 채택하도록 시도하십시오.
스톱 로스 및 테이크프로피스 측면에서 트레일링 스톱 또는 브레이크 이븐 스톱 메커니즘을 도입하여 전략이 트렌드가 계속될 때 포지션을 보유 할 수 있습니다. 동시에 위험 / 보상 비율을 최적화하기 위해 다른 스톱 로스 및 테이크프로피스 비율을 설정하는 것을 고려하십시오.
추출을 제어하기 위해 트렌드 강도, 변동성, 위험 수준 및 기타 지표에 따라 엔트리 크기를 동적으로 조정하여 포지션 관리를 더욱 최적화하십시오. 또한 포지션 추가 및 감소와 같은 작업을 통해 자본을 더 잘 활용하십시오.
불변성 필터 전략으로 볼링거 밴드 브레이크아웃 (Bollinger Bands Breakout with Volatility Filter) 은 볼링거 밴드 (Bollinger Bands) 의 가격 위치와 변동성의 특징을 활용하여 쌍방향 거래 전략을 구성합니다. 이 전략의 독특한 측면은 매우 변동적인 시장에서 거래를 피하는 변동성 필터이며, 비교적 간단한 수익 및 스톱-러스 조건을 설정하는 것입니다. 전반적으로 전략에는 상당히 포괄적인 입출 논리 및 위험 통제가 포함되어 있지만 시장 변화에 적응하는 측면, 매개 변수 적용 가능성 및 스톱-러스 효과에 대한 추가 최적화의 여지가 있습니다. 더 많은 기술적 지표, 동적 매개 변수 및 위치 관리 최적화가 도입 될 수 있다면 전략의 안정성과 수익성이 향상 될 수 있습니다.
/*backtest start: 2024-02-29 00:00:00 end: 2024-03-07 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("[Oppen Chow] Super BBS 1.0", default_qty_type = strategy.percent_of_equity, default_qty_value =100, initial_capital=500, commission_type=strategy.commission.percent, commission_value=0.08, pyramiding=2 ) // Input parameters length = 20 mult = 2 max_drawdown_percent = input(5.5, "Maximum Acceptable Drawdown") / 100 upper_breakout_pct = input(50, "Short Entry Breakout Percentage") / 100 lower_breakout_pct = input(25, "Long Entry Breakout Percentage") / 100 tradeDirection = input(1, title="Trade Direction") Volatility = input(0.5, title="Volatility") / 100 long_win_pct = input(-0.15, title = "Long Settlement Rate Near Boll Upper Limit") short_win_pct = input(0.4, title = "Short Settlement Rate Near Boll Lower Limit") // Bollinger Bands calculation basis = ta.sma(close, length) dev = mult * ta.stdev(close, length) upper = basis + dev lower = basis - dev area = upper - lower // Calculate the rate of change for two consecutive candlesticks var float change1 = na var float change2 = na change1 := change2 change2 := ((close - open) / open) // Check for two or more consecutive candlesticks with a change rate greater than 0.5% var bool highVolatility = false highVolatility := change2 > Volatility // Trading logic var float highestPriceSinceOpen = na var float lowestPriceSinceOpen = na var int profitableDrawbackCount = 1 // Entry logic - In the absence of high volatility if not highVolatility and strategy.position_size == 0 if (tradeDirection >= 0) and (close < lower - area * lower_breakout_pct) strategy.entry("Long", strategy.long) highestPriceSinceOpen := close profitableDrawbackCount := 0 if (tradeDirection <= 0) and (close > upper + area * upper_breakout_pct) strategy.entry("Short", strategy.short) lowestPriceSinceOpen := close profitableDrawbackCount := 0 if strategy.position_size > 0 and close > upper - area * long_win_pct strategy.close("Long", comment = "Take Profit") if strategy.position_size < 0 and close < lower + area * short_win_pct strategy.close("Short", comment = "Take Profit") // Stop loss logic - Based on drawdown percentage if strategy.position_size > 0 if (strategy.position_avg_price - close)/strategy.position_avg_price >= max_drawdown_percent strategy.close("Long", comment = "Drawdown Stop Loss") else if strategy.position_size < 0 if (close - strategy.position_avg_price)/strategy.position_avg_price >= max_drawdown_percent strategy.close("Short", comment = "Drawdown Stop Loss")