이 전략은 볼링거 밴드, 변동성 메트릭스 및 리스크 관리를 결합한 트렌드 다음 시스템이다. 정확한 리스크 통제를 위해 ATR을 사용하여 포지션 크기를 동적으로 조정하는 동시에 볼링거 밴드 너머의 가격 브레이크오프를 모니터링하여 트렌드 기회를 포착합니다. 이 전략은 또한 범위 시장에서 잘못된 신호를 효과적으로 필터하기 위해 통합 기간 탐지 메커니즘을 통합합니다.
이 전략은 다음과 같은 핵심 논리에 기반합니다. 1. 20개 기간 이동 평균을 볼링거 밴드의 중간 대역으로 사용하며, 상단과 하단 대역은 2개의 표준편차로 이루어져 있습니다. 2. 현재 볼링거 밴드 너비와 이동 평균을 비교하여 시장 통합 기간을 식별합니다. 3. 통합되지 않은 기간 동안, 상위 밴드 브레이크에 대한 긴 위치와 하위 밴드 브레이크에 대한 짧은 위치. 4. 14주기 ATR를 이용하여 동적으로 스톱 로스 레벨을 계산하고 2:1 리스크/어워드 비율에 기초하여 수익을 취하는 레벨을 설정합니다. 5. 1% 계정 리스크 제한 및 ATR 값을 기반으로 각 거래의 위치 크기를 자동으로 계산합니다.
이 전략은 포괄적인 위험 통제 시스템을 통합하면서 볼링거 밴드 브레이크오웃을 통해 트렌드를 포착합니다. 이 전략의 장점은 높은 적응력과 통제 가능한 위험, 그러나 잘못된 브레이크오웃 및 트렌드 역전 위험에주의를 기울여야합니다. 트렌드 확인 지표를 추가하고 매개 변수 조정 메커니즘을 최적화함으로써 전략은 추가적으로 개선 될 수 있습니다. 전반적으로 논리적으로 건전하고 실용적인 트렌드 다음 전략을 나타냅니다.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-08 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands Breakout Strategy", overlay=true) // Input parameters length = input(20, title="Bollinger Bands Length") stdDev = input(2.0, title="Standard Deviation") riskRewardRatio = input(2.0, title="Risk/Reward Ratio") atrLength = input(14, title="ATR Length") riskPercentage = input(1.0, title="Risk Percentage per Trade") // Calculate Bollinger Bands basis = ta.sma(close, length) dev = stdDev * ta.stdev(close, length) upperBand = basis + dev lowerBand = basis - dev // Calculate ATR for position sizing atr = ta.atr(atrLength) // Plot Bollinger Bands plot(basis, color=color.blue, title="Basis") plot(upperBand, color=color.red, title="Upper Band") plot(lowerBand, color=color.green, title="Lower Band") // Market Consolidation Detection isConsolidating = (upperBand - lowerBand) < ta.sma(upperBand - lowerBand, length) * 0.5 // Breakout Conditions longCondition = ta.crossover(close, upperBand) and not isConsolidating shortCondition = ta.crossunder(close, lowerBand) and not isConsolidating // Risk Management: Calculate position size equity = strategy.equity riskAmount = equity * (riskPercentage / 100) positionSize = riskAmount / (atr * riskRewardRatio) // Execute trades with risk management if (longCondition) strategy.entry("Long", strategy.long, qty=positionSize) strategy.exit("Take Profit", from_entry="Long", limit=close + atr * riskRewardRatio, stop=close - atr) if (shortCondition) strategy.entry("Short", strategy.short, qty=positionSize) strategy.exit("Take Profit", from_entry="Short", limit=close - atr * riskRewardRatio, stop=close + atr) // Alert conditions for breakouts alertcondition(longCondition, title="Long Breakout", message="Long breakout detected!") alertcondition(shortCondition, title="Short Breakout", message="Short breakout detected!")