Cette stratégie constitue un système de trading quantitatif combinant l’Indice de force relative (RSI) et les moyennes mobiles (MA) pour identifier les tendances de marché et les opportunités de trading. Le système intègre également des filtres de volume et de volatilité pour améliorer la fiabilité des signaux. L’idée centrale consiste à déterminer la direction de la tendance via le croisement de moyennes mobiles rapides et lentes, tout en utilisant le RSI pour confirmer le momentum, formant ainsi un cadre décisionnel complet.
La stratégie utilise un mécanisme de double confirmation : 1. Couche de confirmation de tendance : Utilise le croisement entre la moyenne mobile rapide (FastMA) et la moyenne mobile lente (SlowMA). Un croisement haussier (fastMA > slowMA) indique une tendance ascendante, inversement pour une tendance descendante. 2. Couche de confirmation de momentum : Le RSI doit être inférieur à 50 en tendance haussière (marge de progression) et supérieur à 50 en tendance baissière. 3. Filtres de trading : Seuils minimums de volume et de volatilité (ATR) pour éliminer les signaux peu liquides ou non volatils.
Ce système combine efficacement analyse de tendance et de momentum avec une gestion rigoureuse des risques. Bien que performant dans des conditions de marché directionnelles, son optimisation continue et l’adaptation de ses paramètres restent cruciales pour maintenir son efficacité opérationnelle dans différents environnements de trading. 2. Risque de Slippage : Dans des conditions de marché volatiles, les prix d’exécution réels peuvent s’écarter significativement des prix de déclenchement des signaux. 3. Sensibilité aux Paramètres : La performance de la stratégie dépend fortement des réglages de paramètres. Différents environnements de marché peuvent nécessiter des combinaisons de paramètres distinctes.
Cette stratégie constitue un système de trading complet grâce à l’intégration synergique d’indicateurs de tendance et de momentum. Ses principaux atouts résident dans son mécanisme de confirmation de signaux multicouches et son cadre de gestion des risques robuste. Une attention particulière doit cependant être portée à l’influence des conditions de marché sur la performance opérationnelle, ainsi qu’à l’optimisation contextuelle des paramètres. Par des améliorations itératives, cette approche présente un potentiel d’adaptation performante à divers régimes de marché.
/*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="Закрито по сигналу")