이 전략은 다양한 기술적 지표의 조율을 통해 시장 추세를 파악하기 위해 변동성과 동력 지표를 결합한 적응형 거래 시스템이다. 이 전략은 시장 변동성을 모니터링하기 위해 ATR 지표, 트렌드 동력을 판단하기 위해 MACD 지표, 유연한 스톱 로스 및 영리 메커니즘으로 거래 신호를 확인하기 위해 가격 동력 지표를 결합합니다. 이 시스템은 강력한 적응력을 가지고 있으며 시장 조건에 따라 자동으로 거래 빈도 및 위치 통제를 조정할 수 있습니다.
이 전략은 핵심 거래 논리로서 세 개의 지표 시스템에 의존합니다. 첫째, ATR은 거래 결정에 대한 변동성을 참조하기 위해 시장 변동성 조건을 측정하는 데 사용됩니다. 둘째, MACD 지표의 황금과 죽음의 십자가는 트렌드 전환점을 캡처하는 데 사용됩니다. MACD 빠른 및 느린 라인 크로스오버가 주요 거래 트리거 신호로 사용됩니다. 셋째, 가격 동력 지표는 검증에 사용됩니다. 트렌드 강도를 확인하기 위해 이전 기간에 비해 가격 변화를 관찰하여 트렌드 강도를 확인합니다. 이 시스템은 또한 50 일 이동 평균을 트렌드 필터로 통합하여 가격이 이동 평균보다 높을 때 긴 포지션을 허용하고 아래에서 짧은 포지션을 설정합니다. 오버 트레이딩을 피하기 위해 전략 시그널은 최소 거래 간격을 강제하고 선택적으로 번갈 실행을 시행합니다.
이 전략은 여러 기술적 지표의 사용을 통해 시장 트렌드를 효과적으로 포착하는 잘 설계된 논리적으로 엄격한 양적 거래 시스템입니다. 이 시스템은 위험 통제 및 거래 실행에 상세한 고려 사항을 수행하여 좋은 실용성을 보여줍니다. 일부 잠재적 인 위험이 있지만 제안 된 최적화 방향을 통해 전략의 안정성과 수익성 모두 더 향상 될 것으로 예상 할 수 있습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("[ETH] Volatility & Momentum Adaptive Strategy", shorttitle="Definitive 1 day Ethereum Signal", overlay=true, initial_capital=10000, currency=currency.USD) // === Input Parameters === // trade_size = input.float(5, title="Trade Size (ETH)") atr_length = input.int(8, minval=1, title="ATR Length") macd_fast = input.int(8, minval=1, title="MACD Fast Length") macd_slow = input.int(7, minval=1, title="MACD Slow Length") macd_signal = input.int(9, minval=1, title="MACD Signal Length") momentum_length = input.int(37, title="Momentum Length") stop_loss_percent = input.float(9.9, title="Stop Loss Percentage (%)") take_profit_percent = input.float(9.0, title="Take Profit Percentage (%)") alternate_signal = input.bool(true, title="Alternate Buy/Sell Signals") // === Indicators === // // ATR to measure volatility atr = ta.atr(atr_length) // MACD for trend momentum [macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal) macd_cross_up = ta.crossover(macd_line, signal_line) macd_cross_down = ta.crossunder(macd_line, signal_line) // Momentum momentum = ta.mom(close, momentum_length) // === Signal Control Variables === // var bool last_signal_long = na var int last_trade_bar = na min_bars_between_trades = 5 // Adjust for minimal trade frequency control time_elapsed = na(last_trade_bar) or (bar_index - last_trade_bar) >= min_bars_between_trades // === Buy and Sell Conditions === // // Buy when: buy_signal = (macd_cross_up and momentum > 0 and close > ta.sma(close, 50) and time_elapsed) // Sell when: sell_signal = (macd_cross_down and momentum < 0 and close < ta.sma(close, 50) and time_elapsed) // Enforce alternate signals if selected if alternate_signal buy_signal := buy_signal and (na(last_signal_long) or not last_signal_long) sell_signal := sell_signal and (not na(last_signal_long) and last_signal_long) // === Trade Execution === // // Buy Position if (buy_signal) if strategy.position_size < 0 strategy.close("Short") strategy.entry("Long", strategy.long, qty=trade_size) last_signal_long := true last_trade_bar := bar_index // Sell Position if (sell_signal) if strategy.position_size > 0 strategy.close("Long") strategy.entry("Short", strategy.short, qty=trade_size) last_signal_long := false last_trade_bar := bar_index // === Stop Loss and Take Profit === // if strategy.position_size > 0 long_take_profit = strategy.position_avg_price * (1 + take_profit_percent / 100) long_stop_loss = strategy.position_avg_price * (1 - stop_loss_percent / 100) strategy.exit("TP/SL Long", from_entry="Long", limit=long_take_profit, stop=long_stop_loss) if strategy.position_size < 0 short_take_profit = strategy.position_avg_price * (1 - take_profit_percent / 100) short_stop_loss = strategy.position_avg_price * (1 + stop_loss_percent / 100) strategy.exit("TP/SL Short", from_entry="Short", limit=short_take_profit, stop=short_stop_loss) // === Visual Signals === // plotshape(series=buy_signal and time_elapsed, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sell_signal and time_elapsed, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")