Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan Indeks Kekuatan Relatif (RSI) dan Purata Bergerak (MA) untuk mengenal pasti trend pasaran dan peluang perdagangan. Sistem ini juga menggabungkan penapis jumlah dan turun naik untuk meningkatkan kebolehpercayaan isyarat perdagangan.
Strategi ini menggunakan mekanisme pengesahan isyarat dua: 1. Lapisan Pengesahan Trend: Menggunakan persilangan purata bergerak pantas (FastMA) dan purata bergerak perlahan (SlowMA) untuk menentukan trend pasaran. Apabila garis pantas melintasi di atas garis perlahan, trend menaik ditubuhkan; apabila garis pantas melintasi di bawah garis perlahan, trend menurun ditubuhkan. 2. Lapisan Pengesahan Momentum: Menggunakan RSI sebagai alat pengesahan momentum. Dalam trend menaik, RSI harus di bawah 50, menunjukkan potensi menaik; dalam trend menurun, RSI harus di atas 50, menunjukkan potensi menurun. 3. Penapis Dagangan: Tetapkan ambang minimum untuk jumlah dan turun naik ATR untuk menapis isyarat dengan kecairan atau turun naik yang tidak mencukupi.
Strategi ini menubuhkan sistem perdagangan yang komprehensif melalui penggunaan bersepadu penunjuk trend dan momentum. Kekuatan sistem terletak pada mekanisme pengesahan isyarat berlapis-lapis dan rangka kerja pengurusan risiko yang komprehensif. Walau bagaimanapun, penerapan praktikal memerlukan perhatian terhadap kesan keadaan pasaran terhadap prestasi strategi dan pengoptimuman parameter berdasarkan keadaan sebenar. Melalui peningkatan dan pengoptimuman yang berterusan, strategi ini mempunyai potensi untuk mengekalkan prestasi yang stabil di pelbagai persekitaran pasaran.
/*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="Закрито по сигналу")