이 전략은 이동 평균 크로스오버, RSI 과잉 구매/대판 조건, ATR 기반 스톱 로스/테이크 노프트 레벨을 포함한 여러 신호를 결합한 기술 지표 기반 스윙 거래 시스템이다. 핵심 메커니즘은 RSI 신호에 의해 확인된 단기 EMA 및 장기 SMA 크로스오버를 통해 시장 트렌드를 포착하는 데 의존하며, ATR을 사용하여 동적 스톱 로스 및 테이크 노프트 레벨을 설정합니다. 전략은 길고 짧은 거래 방향을 지원하며 양쪽 방향의 유연한 활성화 / 비활성화를 허용합니다.
이 전략은 여러 계층의 기술 지표 접근 방식을 사용합니다.
이 전략은 여러 기술적 지표의 조합을 통해 비교적 완전한 거래 시스템을 구축합니다. 이 전략의 강점은 신호 확인 신뢰성과 포괄적인 위험 관리에 있습니다. 그러나 전략 성능에 대한 시장 환경 영향은 주의가 필요합니다. 제안된 최적화 방향에 의해 개선의 여지가 있습니다. 라이브 거래에 적용할 때 철저한 매개 변수 테스트 및 백테스팅 검증이 권장됩니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © CryptoRonin84 //@version=5 strategy("Swing Trading Strategy with On/Off Long and Short", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Input for turning Long and Short trades ON/OFF enable_long = input.bool(true, title="Enable Long Trades") enable_short = input.bool(true, title="Enable Short Trades") // Input parameters for strategy sma_short_length = input.int(20, title="Short EMA Length", minval=1) sma_long_length = input.int(50, title="Long SMA Length", minval=1) sl_percentage = input.float(1.5, title="Stop Loss (%)", step=0.1, minval=0.1) tp_percentage = input.float(3, title="Take Profit (%)", step=0.1, minval=0.1) risk_per_trade = input.float(1, title="Risk Per Trade (%)", step=0.1, minval=0.1) capital = input.float(10000, title="Initial Capital", step=100) // Input for date range for backtesting start_date = input(timestamp("2020-01-01 00:00"), title="Backtest Start Date") end_date = input(timestamp("2024-12-31 23:59"), title="Backtest End Date") inDateRange = true // Moving averages sma_short = ta.ema(close, sma_short_length) sma_long = ta.sma(close, sma_long_length) // RSI setup rsi = ta.rsi(close, 14) rsi_overbought = 70 rsi_oversold = 30 // ATR for volatility-based stop-loss calculation atr = ta.atr(14) stop_loss_level_long = strategy.position_avg_price - (1.5 * atr) stop_loss_level_short = strategy.position_avg_price + (1.5 * atr) take_profit_level_long = strategy.position_avg_price + (3 * atr) take_profit_level_short = strategy.position_avg_price - (3 * atr) // Position sizing based on risk per trade risk_amount = capital * (risk_per_trade / 100) position_size = risk_amount / (close * sl_percentage / 100) // Long and Short conditions long_condition = ta.crossover(sma_short, sma_long) and rsi < rsi_overbought short_condition = ta.crossunder(sma_short, sma_long) and rsi > rsi_oversold // Execute long trades if (long_condition and inDateRange and enable_long) strategy.entry("Long", strategy.long, qty=position_size) strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_level_long, limit=take_profit_level_long) // Execute short trades if (short_condition and inDateRange and enable_short) strategy.entry("Short", strategy.short, qty=position_size) strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_level_short, limit=take_profit_level_short) // Plot moving averages plot(sma_short, title="Short EMA", color=color.blue) plot(sma_long, title="Long SMA", color=color.red) // Plot RSI on separate chart hline(rsi_overbought, "Overbought", color=color.red) hline(rsi_oversold, "Oversold", color=color.green) plot(rsi, title="RSI", color=color.purple) // Plot signals on chart plotshape(series=long_condition and enable_long, title="Long Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=short_condition and enable_short, title="Short Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Background color for backtest range bgcolor(inDateRange ? na : color.red, transp=90)