Данная стратегия представляет собой количественную торговую систему, объединяющую индекс относительной силы (RSI) и скользящие средние (MA) для выявления рыночных трендов и торговых возможностей. Система включает фильтры объема и волатильности для повышения надежности сигналов. Основная идея заключается в определении направления тренда через пересечение быстрой и медленной скользящих средних с подтверждением импульса через RSI, формируя комплексную систему принятия решений.
Стратегия использует двухуровневый механизм подтверждения:
1. Уровень подтверждения тренда: пересечение быстрой (FastMA) и медленной (SlowMA) скользящих средних. Пересечение быстрой MA сверху вниз указывает на нисходящий тренд, снизу вверх – на восходящий.
2. Уровень подтверждения импульса: RSI как индикатор импульса. При восходящем тренде RSI должен быть ниже 50 (потенциал роста), при нисходящем – выше 50 (потенциал снижения).
3. Фильтры: минимальные пороги объема и ATR-волатильности для отсева сигналов с недостаточной ликвидностью или волатильностью.
Стратегия формирует комплексную торговую систему через синтез трендовых и импульсных индикаторов. Ключевые преимущества – многоуровневая валидация сигналов и продуманный риск-менеджмент. Для устойчивой работы требуется регулярная калибровка параметров под текущие рыночные условия. Дальнейшее развитие системы предполагает внедрение адаптивных алгоритмов и машинного обучения для повышения эффективности в различных рыночных средах. 2. Риск проскальзывания (Slippage Risk): В условиях высокой рыночной волатильности фактические цены исполнения могут существенно отклоняться от цен срабатывания сигналов. 3. Параметрическая чувствительность (Parameter Sensitivity): Результативность стратегии критически зависит от настроек параметров, различные рыночные условия могут требовать разных параметрических комбинаций.
Данная стратегия формирует комплексную торговую систему через интеграцию трендовых и моментумных индикаторов. Ключевые преимущества системы заключаются в многоуровневом механизме подтверждения сигналов и комплексной структуре управления рисками. Однако на практике требуется учитывать влияние рыночных условий на эффективность стратегии и проводить параметрическую оптимизацию в соответствии с реальными условиями. Последовательная доработка и калибровка стратегии позволяют достичь стабильной работы в различных рыночных режимах.
/*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="Закрито по сигналу")