이 전략은 상대적 강도 지수 (RSI), 기하급수적인 이동 평균 (EMA), 평균 진정한 범위 (ATR) 를 기반으로 한 포괄적 인 양적 거래 시스템입니다. 이 전략은 EMA를 사용하여 RSI를 부드럽게하고 주요 수준에서 RSI 브레이크오웃을 통해 거래를 유발하며 효과적인 리스크 통제를 달성하기 위해 동적 스톱 로스 및 영리 수준을 위해 ATR을 사용합니다. 또한 전략에는 거래 신호 계산 및 기록 기능이 포함되어 거래자가 백테스팅 및 최적화에 도움을줍니다.
핵심 논리는 다음의 주요 구성 요소를 포함합니다.
이 전략은 세 가지 고전적인 기술 지표 - RSI, EMA, ATR - 를 결합하여 완전한 양적 거래 시스템을 구축합니다. 신호 생성, 위험 통제 및 거래 실행에서 강력한 실용성을 보여줍니다. 지속적인 최적화 및 개선으로 전략은 라이브 거래에서 안정적인 성능을 약속합니다. 그러나 사용자는 전략 성과에 대한 시장 조건의 영향을 고려하고 적절한 매개 변수를 설정하고 적절한 위험 통제를 유지해야합니다.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy("RSI Trading Strategy with EMA and ATR Stop Loss/Take Profit", overlay=true) length = input.int(14, minval=1, title="RSI Length") src = input(close, title="Source") rsi = ta.rsi(src, length) smoothingLength = input.int(14, minval=1, title="Smoothing Length") smoothedRsi = ta.ema(rsi, smoothingLength) // استفاده از EMA برای صاف کردن RSI atrLength = input.int(14, title="ATR Length") atrMultiplier = input.float(1, title="ATR Multiplier") atrValue = ta.atr(atrLength) // محاسبه ATR level1 = 30 level2 = 70 // تنظیمات استراتژی var table crossingTable = table.new(position.top_right, 2, 5, border_width=1) var int crossCount = 0 var float crossPrice = na // شرط ورود به معامله خرید زمانی که RSI از سطح 70 به بالا عبور میکند if (ta.crossover(smoothedRsi, level2)) strategy.entry("Long", strategy.long) // تنظیم حد سود و حد ضرر strategy.exit("Take Profit/Stop Loss", "Long", stop=close - atrMultiplier * atrValue, limit=close + atrMultiplier * atrValue, comment="") crossCount := crossCount + 1 crossPrice := close // شرط ورود به معامله فروش زمانی که RSI از سطح 70 به پایین عبور میکند if (ta.crossunder(smoothedRsi, level2)) strategy.entry("Short", strategy.short) // تنظیم حد سود و حد ضرر strategy.exit("Take Profit/Stop Loss", "Short", stop=close + atrMultiplier * atrValue, limit=close - atrMultiplier * atrValue, comment="") crossCount := crossCount + 1 crossPrice := close // شرط ورود به معامله خرید زمانی که RSI از سطح 30 به بالا عبور میکند if (ta.crossover(smoothedRsi, level1)) strategy.entry("Long", strategy.long) // تنظیم حد سود و حد ضرر strategy.exit("Take Profit/Stop Loss", "Long", stop=close - atrMultiplier * atrValue, limit=close + atrMultiplier * atrValue, comment="") crossCount := crossCount + 1 crossPrice := close // شرط ورود به معامله فروش زمانی که RSI از سطح 30 به پایین عبور میکند if (ta.crossunder(smoothedRsi, level1)) strategy.entry("Short", strategy.short) // تنظیم حد سود و حد ضرر strategy.exit("Take Profit/Stop Loss", "Short", stop=close + atrMultiplier * atrValue, limit=close - atrMultiplier * atrValue, comment="") crossCount := crossCount + 1 crossPrice := close if (not na(crossPrice)) table.cell(crossingTable, 0, crossCount % 5, text=str.tostring(crossCount), bgcolor=color.green) table.cell(crossingTable, 1, crossCount % 5, text=str.tostring(crossPrice), bgcolor=color.green) // ترسیم خطوط و مقادیر RSI plot(smoothedRsi, title="Smoothed RSI", color=color.blue) hline(level1, "Level 30", color=color.red) hline(level2, "Level 70", color=color.green)