Strategi ini adalah sistem perdagangan kuantitatif yang komprehensif berdasarkan Indeks Kekuatan Relatif (RSI), Purata Bergerak Eksponen (EMA), dan Julat Benar Purata (ATR). Strategi ini meratakan RSI menggunakan EMA, mencetuskan perdagangan melalui pecah RSI pada tahap utama, dan menggunakan ATR untuk tahap berhenti rugi dan mengambil keuntungan dinamik untuk mencapai kawalan risiko yang berkesan.
Logik teras merangkumi komponen utama berikut:
Strategi ini menggabungkan tiga penunjuk teknikal klasik - RSI, EMA, dan ATR - untuk membina sistem perdagangan kuantitatif yang lengkap. Ia menunjukkan kepraktisan yang kuat dalam penjanaan isyarat, kawalan risiko, dan pelaksanaan perdagangan. Melalui pengoptimuman dan peningkatan yang berterusan, strategi menunjukkan janji untuk prestasi yang stabil dalam perdagangan langsung. Walau bagaimanapun, pengguna perlu mempertimbangkan kesan keadaan pasaran terhadap prestasi strategi, menetapkan parameter dengan betul, dan mengekalkan kawalan risiko yang betul.
/*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)