
Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan indeks kekuatan relatif (RSI) dan rata-rata pergerakan (MA) untuk mengidentifikasi tren pasar dan peluang perdagangan melalui sinergi kedua indikator. Sistem ini juga menggabungkan filter volume dan volatilitas untuk meningkatkan keandalan sinyal perdagangan. Ide inti dari strategi ini adalah untuk menentukan arah tren melalui persilangan rata-rata pergerakan cepat dan rata-rata pergerakan lambat, dan menggunakan RSI untuk mengonfirmasi momentum, yang pada akhirnya membentuk kerangka kerja keputusan perdagangan yang lengkap.
Strategi ini mengadopsi mekanisme konfirmasi sinyal lapisan ganda:
Strategi ini membentuk sistem perdagangan yang relatif lengkap dengan menggunakan indikator tren dan momentum secara komprehensif. Keunggulan sistem terletak pada mekanisme konfirmasi sinyal multi-level dan sistem manajemen risiko yang sempurna, tetapi dalam penerapan aktual, perlu memperhatikan dampak lingkungan pasar terhadap kinerja strategi dan mengoptimalkan parameter berdasarkan kondisi aktual. Melalui perbaikan dan pengoptimalan yang berkelanjutan, strategi ini diharapkan dapat 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="Закрито по сигналу")