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