이 전략은 기술 지표 MACD 및 ATR와 평균 회귀 원리를 결합한 양적 거래 시스템이다. 가격 오차를 식별하기 위해 볼링거 밴드, 추진력 확인을 위해 MACD 및 동적 위험 관리에 대한 ATR을 사용합니다. 핵심 개념은 가격이 상당한 오차를 나타내면 평균 회귀 기회를 캡처하는 것입니다. 여러 기술 지표를 통해 검증됩니다.
이 전략은 함께 작동하는 세 가지 기술 지표를 사용합니다. 첫째, 볼링거 밴드는 중요한 가격 오차를 결정합니다. 둘째, MACD는 가격 동력을 검증하여 거래 방향이 시장 추세와 일치하는지 확인합니다. 마지막으로, ATR은 동적 스톱 로스 및 영리 레벨을 설정합니다. 구체적으로, 긴 신호는 가격이 시그널 라인 위에 MACD 라인이있는 하부 볼링거 밴드 아래로 떨어지면 생성되며 짧은 신호는 시장 변동성에 따라 상부 볼링거 밴드 위에 MACD 라인이있는 시그널 라인 아래로 가격이 떨어지면 발생합니다. ATR은 동적으로 스톱 로스 및 영리 수준을 조정합니다.
이 전략은 고전적인 기술 분석과 현대적인 양적 거래 방법을 결합한다. 여러 지표의 조율된 사용을 통해 단일 지표의 한계를 극복하면서 평균 회귀의 핵심 장점을 유지한다. 이 전략은 매우 확장 가능하며 매개 변수 최적화 및 추가 기능 모듈을 통해 지속적인 개선을 할 수 있다. 한편, 그 포괄적인 위험 제어 메커니즘은 안정성을 보장한다.
/*backtest start: 2024-11-12 00:00:00 end: 2024-12-11 08:00:00 period: 3h basePeriod: 3h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Enhanced Mean Reversion with MACD and ATR", overlay=true) // Nastavenia Bollinger Bands bbLength = input(20, title="Bollinger Bands Length") bbMult = input(2, title="Bollinger Bands Multiplier") basis = ta.sma(close, bbLength) dev = ta.stdev(close, bbLength) upperBand = basis + bbMult * dev lowerBand = basis - bbMult * dev // MACD indikátor macdShort = input(12, title="MACD Short Length") macdLong = input(26, title="MACD Long Length") macdSignal = input(9, title="MACD Signal Length") [macdLine, signalLine, _] = ta.macd(close, macdShort, macdLong, macdSignal) // ATR pre dynamický Stop Loss a Take Profit atrLength = input(14, title="ATR Length") atrMultiplier = input(1.5, title="ATR Multiplier") atrValue = ta.atr(atrLength) // Vstupné podmienky pre long pozície longCondition = ta.crossover(close, lowerBand) and macdLine > signalLine if (longCondition) strategy.entry("Long", strategy.long) // Vstupné podmienky pre short pozície shortCondition = ta.crossunder(close, upperBand) and macdLine < signalLine if (shortCondition) strategy.entry("Short", strategy.short) // Dynamický Stop Loss a Take Profit na základe ATR longSL = strategy.position_avg_price - atrValue * atrMultiplier longTP = strategy.position_avg_price + atrValue * atrMultiplier * 2 shortSL = strategy.position_avg_price + atrValue * atrMultiplier shortTP = strategy.position_avg_price - atrValue * atrMultiplier * 2 // Pridanie stop loss a take profit if (strategy.position_size > 0) strategy.exit("Take Profit/Stop Loss", "Long", stop=longSL, limit=longTP) if (strategy.position_size < 0) strategy.exit("Take Profit/Stop Loss", "Short", stop=shortSL, limit=shortTP) // Vizualizácia Bollinger Bands a MACD plot(upperBand, color=color.red, title="Upper Bollinger Band") plot(lowerBand, color=color.green, title="Lower Bollinger Band") plot(basis, color=color.blue, title="Bollinger Basis") hline(0, "MACD Zero Line", color=color.gray) plot(macdLine - signalLine, color=color.blue, title="MACD Histogram") plot(macdLine, color=color.red, title="MACD Line") plot(signalLine, color=color.green, title="Signal Line") // Generovanie alertov alertcondition(longCondition, title="Long Alert", message="Long Entry Signal") alertcondition(shortCondition, title="Short Alert", message="Short Entry Signal")