이 전략은 볼링거 밴드 브레이크아웃을 기반으로 한 양적 거래 시스템으로, 상위 밴드에 3개의 표준 편차와 하위 밴드에 1개의 표준 편차를 사용하여, 중위 밴드로서 100일 이동 평균과 결합합니다. 이 전략은 주로 상위 밴드 이상의 가격 브레이크아웃을 감지하여 장기적인 트렌드를 포착하고 하위 밴드를 스톱 로스 신호로 사용합니다. 핵심 개념은 강력한 브레이크아웃 중에 포지션을 입력하고 가격이 하위 밴드 아래에 떨어지면 종료하여 통제된 위험 트렌드를 달성하는 것입니다.
기본 원리는 볼링거 밴드의 통계적 특성에 기반합니다. 상단 밴드는 3 개의 표준 편차를 사용하며, 정상적인 분포 가정 하에서 가격의 이 수준 이상의 파업 확률은 0.15%에 불과하며, 파업이 발생하면 중요한 트렌드 형성을 시사합니다. 중단 밴드는 100 일 이동 평균을 사용하며, 단기 시장 소음을 효과적으로 필터링 할 수 있는 충분한 기간입니다. 하단 밴드는 1 개의 표준 편차를 중지 손실 라인으로 사용하며, 비교적 보수적인 설정으로 적시에 출출 할 수 있습니다. 이 전략은 가격이 상단 밴드 이상의 파업을 할 때 긴 신호를 생성하고 가격이 하단 밴드 이하로 떨어지면 출출합니다.
이것은 명확한 논리를 가진 전략을 따르는 잘 설계된 트렌드입니다. 볼링거 밴드의 통계적 특성 및 이동 평균의 트렌드 추적 특성을 통해 중요한 시장 유출 기회를 효과적으로 포착합니다. 인수 위험이 있지만 합리적인 스톱 로스 설정과 위험 통제를 통해 전략은 실용적 가치를 유지합니다. 추가 최적화 잠재력은 신호 확인, 스톱 로스 메커니즘 및 위치 관리 측면에 있습니다.
/*backtest start: 2024-11-12 00:00:00 end: 2024-12-11 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © MounirTrades007 // @version=6 strategy("Bollinger Bands", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=200) // Get user input var g_bb = "Bollinger Band Settings" upperBandSD = input.float(title="Upper Band Std Dev", defval=3.0, tooltip="Upper band's standard deviation multiplier", group=g_bb) lowerBandSD = input.float(title="Lower Band Std Dev", defval=1.0, tooltip="Lower band's standard deviation multiplier", group=g_bb) maPeriod = input.int(title="Middle Band MA Length", defval=100, tooltip="Middle band's SMA period length", group=g_bb) var g_tester = "Backtester Settings" drawTester = input.bool(title="Draw Backtester", defval=true, group=g_tester, tooltip="Turn on/off inbuilt backtester display") // Get Bollinger Bands [bbIgnore1, bbHigh, bbIgnore2] = ta.bb(close, maPeriod, upperBandSD) [bbMid, bbIgnore3, bbLow] = ta.bb(close, maPeriod, lowerBandSD) // Prepare trade persistent variables drawEntry = false drawExit = false // Detect bollinger breakout if close > bbHigh and barstate.isconfirmed and strategy.position_size == 0 drawEntry := true strategy.entry(id="Trade", direction=strategy.long) alert("Bollinger Breakout Detected for " + syminfo.ticker, alert.freq_once_per_bar_close) // Detect bollinger sell signal if close < bbLow and barstate.isconfirmed and strategy.position_size != 0 drawExit := true strategy.close(id="Trade") alert("Bollinger Exit detected for " + syminfo.ticker, alert.freq_once_per_bar_close) // Draw bollinger bands plot(bbMid, color=color.blue, title="Middle SMA") plot(bbHigh, color=color.green, title="Upper Band") plot(bbLow, color=color.red, title="Lower Band") // Draw signals plotshape(drawEntry, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.normal, title="Buy Signal") plotshape(drawExit, style=shape.xcross, color=color.red, location=location.belowbar, size=size.normal, title="Sell Signal") // // ============================================================================= // // START BACKTEST CODE // // ============================================================================= // // Prepare stats table // var table testTable = table.new(position.top_right, 2, 2, border_width=1) // f_fillCell(_table, _column, _row, _title, _value, _bgcolor, _txtcolor) => // _cellText = _title + "\n" + _value // table.cell(_table, _column, _row, _cellText, bgcolor=_bgcolor, text_color=_txtcolor) // // Draw stats table // var bgcolor = color.black // if barstate.islastconfirmedhistory // if drawTester // dollarReturn = strategy.equity - strategy.initial_capital // f_fillCell(testTable, 0, 0, "Total Trades:", str.tostring(strategy.closedtrades), bgcolor, color.white) // f_fillCell(testTable, 0, 1, "Win Rate:", str.tostring(strategy.wintrades / strategy.closedtrades * 100, "##.##") + "%", bgcolor, color.white) // f_fillCell(testTable, 1, 0, "Equity:", "$" + str.tostring(strategy.equity, "###,###.##"), bgcolor, color.white) // f_fillCell(testTable, 1, 1, "Return:", str.tostring((strategy.netprofit / strategy.initial_capital) * 100, "##.##") + "%", dollarReturn > 0 ? color.green : color.red, color.white) // // ============================================================================= // // END BACKTEST CODE // // =============================================================================