이 전략은 볼링거 밴드, 우디스 CCI (상품 채널 지수), 이동 평균 (MA), 그리고 밸런스 부피 (OBV) 를 결합한 다중 지표 거래 시스템이다. 시장 변동성 범위를 제공하기 위해 볼링거 밴드, 신호 필터링을 위한 CCI 지표를 사용하며, 시장 트렌드가 명확할 때 거래를 실행하기 위해 MA 시스템을 부피 확인과 결합한다. 또한, 위험성을 효과적으로 제어하기 위해 동적 스톱-로스 및 영업 입지를 위해 ATR을 사용합니다.
핵심 논리는 다음과 같은 핵심 요소에 기반합니다.
이것은 여러 신호 확인을 통해 거래 정확성을 향상시키는 기술적 지표 조합을 기반으로 한 완전한 거래 시스템입니다. 전략 설계는 적절한 위험 통제와 좋은 실용적 응용 가치를 가지고 합리적입니다. 라이브 거래에서 보수적인 위치로 테스트하고 시장 조건에 따라 매개 변수를 지속적으로 최적화하는 것이 좋습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy(shorttitle="BB Debug + Woodies CCI Filter", title="Debug Buy/Sell Signals with Woodies CCI Filter", overlay=true) // Input Parameters length = input.int(20, minval=1, title="BB MA Length") src = input.source(close, title="BB Source") mult1 = input.float(1.0, minval=0.001, maxval=50, title="BB Multiplier 1 (Std Dev 1)") mult2 = input.float(2.0, minval=0.001, maxval=50, title="BB Multiplier 2 (Std Dev 2)") ma_length = input.int(50, minval=1, title="MA Length") ma_long_length = input.int(200, minval=1, title="Long MA Length") obv_smoothing = input.int(10, minval=1, title="OBV Smoothing Length") atr_length = input.int(14, minval=1, title="ATR Length") // ATR Length for TP/SL // Bollinger Bands basis = ta.sma(src, length) dev1 = mult1 * ta.stdev(src, length) dev2 = mult2 * ta.stdev(src, length) upper_1 = basis + dev1 lower_1 = basis - dev1 upper_2 = basis + dev2 lower_2 = basis - dev2 plot(basis, color=color.blue, title="BB MA") p1 = plot(upper_1, color=color.new(color.green, 80), title="BB Upper 1") p2 = plot(lower_1, color=color.new(color.green, 80), title="BB Lower 1") p3 = plot(upper_2, color=color.new(color.red, 80), title="BB Upper 2") p4 = plot(lower_2, color=color.new(color.red, 80), title="BB Lower 2") fill(p1, p2, color=color.new(color.green, 90)) fill(p3, p4, color=color.new(color.red, 90)) // Moving Averages ma_short = ta.sma(close, ma_length) ma_long = ta.sma(close, ma_long_length) plot(ma_short, color=color.orange, title="MA Short") plot(ma_long, color=color.yellow, title="MA Long") // OBV and Smoothing obv = ta.cum(ta.change(close) > 0 ? volume : ta.change(close) < 0 ? -volume : 0) obv_smooth = ta.sma(obv, obv_smoothing) // Debugging: Buy/Sell Signals debugBuy = ta.crossover(close, ma_short) debugSell = ta.crossunder(close, ma_short) // Woodies CCI cciTurboLength = 6 cci14Length = 14 cciTurbo = ta.cci(src, cciTurboLength) cci14 = ta.cci(src, cci14Length) // Filter: Only allow trades when CCI confirms the signal cciBuyFilter = cciTurbo > 0 and cci14 > 0 cciSellFilter = cciTurbo < 0 and cci14 < 0 finalBuySignal = debugBuy and cciBuyFilter finalSellSignal = debugSell and cciSellFilter // Plot Debug Buy/Sell Signals plotshape(finalBuySignal, title="Filtered Buy", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.normal) plotshape(finalSellSignal, title="Filtered Sell", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.normal) // Change candle color based on filtered signals barcolor(finalBuySignal ? color.lime : finalSellSignal ? color.red : na) // ATR for Stop Loss and Take Profit atr = ta.atr(atr_length) tp_long = close + 2 * atr // Take Profit for Long = 2x ATR sl_long = close - 1 * atr // Stop Loss for Long = 1x ATR tp_short = close - 2 * atr // Take Profit for Short = 2x ATR sl_short = close + 1 * atr // Stop Loss for Short = 1x ATR // Strategy Execution if (finalBuySignal) strategy.entry("Buy", strategy.long) strategy.exit("Take Profit/Stop Loss", "Buy", limit=tp_long, stop=sl_long) if (finalSellSignal) strategy.entry("Sell", strategy.short) strategy.exit("Take Profit/Stop Loss", "Sell", limit=tp_short, stop=sl_short) // Check for BTC/USDT pair isBTCUSDT = syminfo.ticker == "BTCUSDT" // Add alerts only for BTC/USDT alertcondition(isBTCUSDT and finalBuySignal, title="BTCUSDT Buy Signal", message="Buy signal detected for BTCUSDT!") alertcondition(isBTCUSDT and finalSellSignal, title="BTCUSDT Sell Signal", message="Sell signal detected for BTCUSDT!")