이 전략은 브레이크 오브 구조 (BOS) 와 볼륨 확인을 기반으로 하는 지능형 거래 전략이다. 이 전략은 이전 최고 또는 최저 가격의 가격 브레이크오프를 감지하고 볼륨 확장 확인과 결합하여 거래 신호를 생성합니다. 연속 확인 요구 사항과 동적 인 이익 취득 / 중단 손실 설정을 포함한 여러 조건 검증 메커니즘을 사용하여 거래 신뢰성 및 위험 관리 기능을 향상시킵니다.
핵심 논리는 다음의 핵심 요소들을 포함합니다.
이 전략 시스템은 고전적인 기술 분석 이론과 현대적인 양적 거래 방법을 결합한 전략 시스템이다. 다중 조건 검증과 엄격한 위험 통제를 통해 전략은 좋은 안정성과 신뢰성을 보여줍니다. 최적화를 필요로하는 측면이 있지만 전반적인 프레임워크 디자인은 합리적이며 실용적인 응용 가치를 가지고 있습니다. 제안된 최적화 방향을 통해 전략의 성능을 더욱 향상시킬 수 있습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("BOS and Volume Strategy with Confirmation", overlay=true) // Parameters swingLength = input.int(20, title="Swing Length", minval=1) volumeMultiplier = input.float(1.1, title="Volume Multiplier", step=0.1) volumeSMA_length = input.int(10, title="Volume SMA Length", minval=1) takeProfitPercentage = input.float(0.02, title="Take Profit Percentage", step=0.01) stopLossPercentage = input.float(0.15, title="Stop Loss Percentage", step=0.01) // New parameter for stop loss atrLength = input.int(14, title="ATR Length") confirmationBars = input.int(2, title="Confirmation Bars", minval=1) // Calculate Swing Highs and Lows swingHigh = ta.highest(high, swingLength)[1] swingLow = ta.lowest(low, swingLength)[1] // Calculate Volume Moving Average volumeSMA = ta.sma(volume, volumeSMA_length) highVolume = volume > (volumeSMA * volumeMultiplier) // Break of Structure Detection with Confirmation var int bullishCount = 0 var int bearishCount = 0 if (close > swingHigh and highVolume) bullishCount := bullishCount + 1 bearishCount := 0 else if (close < swingLow and highVolume) bearishCount := bearishCount + 1 bullishCount := 0 else bullishCount := 0 bearishCount := 0 bullishBOSConfirmed = (bullishCount >= confirmationBars) bearishBOSConfirmed = (bearishCount >= confirmationBars) // Entry and Exit Conditions var float entryPrice = na // Declare entryPrice as a variable if (bullishBOSConfirmed and strategy.position_size <= 0) entryPrice := close // Use ':=' for assignment strategy.entry("Long", strategy.long) if (strategy.position_size > 0) // Calculate stop loss price stopLossPrice = entryPrice * (1 - stopLossPercentage) strategy.exit("Take Profit Long", from_entry="Long", limit=entryPrice * (1 + takeProfitPercentage), stop=stopLossPrice) if (bearishBOSConfirmed and strategy.position_size >= 0) entryPrice := close // Use ':=' for assignment strategy.entry("Short", strategy.short) if (strategy.position_size < 0) // Calculate stop loss price stopLossPrice = entryPrice * (1 + stopLossPercentage) strategy.exit("Take Profit Short", from_entry="Short", limit=entryPrice * (1 - takeProfitPercentage), stop=stopLossPrice) // Plot Swing Highs and Lows for Visualization plot(swingHigh, title="Swing High", color=color.green, linewidth=1) plot(swingLow, title="Swing Low", color=color.red, linewidth=1)