Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan Indeks Kekuatan Relatif (RSI) dan Moving Averages (MA) untuk mengidentifikasi tren pasar dan peluang perdagangan. Sistem ini juga menggabungkan filter volume dan volatilitas untuk meningkatkan keandalan sinyal perdagangan. Konsep inti adalah menentukan arah tren melalui persilangan rata-rata bergerak cepat dan lambat sambil menggunakan RSI untuk konfirmasi momentum, akhirnya membentuk kerangka keputusan perdagangan yang lengkap.
Strategi ini menggunakan mekanisme konfirmasi dua sinyal: 1. Trend Confirmation Layer: Menggunakan crossover dari Fast Moving Average (FastMA) dan Slow Moving Average (SlowMA) untuk menentukan tren pasar. Ketika garis cepat melintasi di atas garis lambat, tren naik ditetapkan; ketika garis cepat melintasi di bawah garis lambat, tren turun ditetapkan. 2. Layer Konfirmasi Momentum: Menggunakan RSI sebagai alat konfirmasi momentum. Dalam tren naik, RSI harus di bawah 50, menunjukkan potensi naik; dalam tren turun, RSI harus di atas 50, menunjukkan potensi turun. Filter Perdagangan: Menetapkan ambang minimum untuk volume dan volatilitas ATR untuk menyaring sinyal dengan likuiditas atau volatilitas yang tidak cukup.
Strategi ini membangun sistem perdagangan yang komprehensif melalui penggunaan terintegrasi indikator tren dan momentum. Kekuatan sistem ini terletak pada mekanisme konfirmasi sinyal berlapis-lapis dan kerangka manajemen risiko yang komprehensif. Namun, penerapan praktis membutuhkan perhatian terhadap dampak kondisi pasar pada kinerja strategi dan optimasi parameter berdasarkan keadaan aktual. Melalui peningkatan dan optimalisasi terus-menerus, strategi ini memiliki potensi untuk mempertahankan kinerja yang stabil di berbagai lingkungan pasar.
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-16 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ // © Boba2601 //@version=5 strategy("RSI-MA Synergy", overlay=true, margin_long=100, margin_short=100) // === Налаштування індикаторів === length_rsi = input.int(14, title="RSI Period", group="Індикатори") fastMALength = input.int(9, title="Fast MA Length", group="Індикатори") slowMALength = input.int(21, title="Slow MA Length", group="Індикатори") // === Налаштування стоп-лосу і тейк-профіту === useStopLossTakeProfit = input.bool(true, title="Використовувати стоп-лос і тейк-профіт", group="Стоп-лос і Тейк-профіт") stopLossPercent = input.float(2.0, title="Стоп-лос (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт") takeProfitPercent = input.float(4.0, title="Тейк-профіт (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт") // === Налаштування об'єму та волатильності === useVolumeFilter = input.bool(false, title="Використовувати фільтр об'єму", group="Об'єм та Волатильність") volumeThreshold = input.int(50000, title="Мінімальний об'єм", group="Об'єм та Волатильність") useVolatilityFilter = input.bool(false, title="Використовувати фільтр волатильності", group="Об'єм та Волатильність") atrLength = input.int(14, title="Період ATR для волатильності", group="Об'єм та Волатильність") volatilityThreshold = input.float(1.5, title="Мінімальна волатильність (ATR)", step=0.1, group="Об'єм та Волатильність") // === Розрахунок індикаторів === rsiValue = ta.rsi(close, length_rsi) fastMA = ta.sma(close, fastMALength) slowMA = ta.sma(close, slowMALength) // === Розрахунок об'єму та волатильності === averageVolume = ta.sma(volume, 20) atrValue = ta.atr(atrLength) // === Умови входу в позицію === longCondition = ta.crossover(fastMA, slowMA) and rsiValue < 50 if useVolumeFilter longCondition := longCondition and volume > volumeThreshold if useVolatilityFilter longCondition := longCondition and atrValue > volatilityThreshold shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue > 50 if useVolumeFilter shortCondition := shortCondition and volume > volumeThreshold if useVolatilityFilter shortCondition := shortCondition and atrValue > volatilityThreshold // === Логіка входу та виходу з позиції === if (longCondition) strategy.entry("Long", strategy.long) if (useStopLossTakeProfit) stopLossPrice = close * (1 - stopLossPercent / 100) takeProfitPrice = close * (1 + takeProfitPercent / 100) strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice) if (shortCondition) strategy.entry("Short", strategy.short) if (useStopLossTakeProfit) stopLossPrice = close * (1 + stopLossPercent / 100) takeProfitPrice = close * (1 - takeProfitPercent / 100) strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice) // === Закриття позицій за зворотнім сигналом === if (strategy.position_size > 0 and (ta.crossunder(fastMA, slowMA) or rsiValue > 50)) strategy.close("Long", comment="Закрито по сигналу") if (strategy.position_size < 0 and (ta.crossover(fastMA, slowMA) or rsiValue < 50)) strategy.close("Short", comment="Закрито по сигналу")