Système de trading dynamique de suivi des tendances RSI à cinq moyennes mobiles

EMA RSI DC
Date de création: 2024-12-05 15:15:28 Dernière modification: 2024-12-05 15:15:28
Copier: 0 Nombre de clics: 445
1
Suivre
1617
Abonnés

Système de trading dynamique de suivi des tendances RSI à cinq moyennes mobiles

Aperçu

La stratégie est un système de suivi des tendances combinant plusieurs indicateurs techniques, principalement intégrant cinq moyennes mobiles indicielles de différentes périodes (EMA), un indicateur relativement fort (RSI) et deux canaux de Donchian de différentes périodes (Channel Donchian). Le système capture les tendances du marché à travers la combinaison de plusieurs indicateurs et utilise des objectifs de stop-loss et de profit dynamiques pour gérer les risques et les gains.

Principe de stratégie

La stratégie utilise plusieurs niveaux d’indicateurs techniques pour la confirmation des signaux: d’abord, un cadre de tendance est construit à l’aide de 5 EMAs (cycles 9 , 21 , 55 , 89 , 144) pour déterminer la direction de la tendance initiale par le croisement d’une EMA rapide et d’une EMA lente. Ensuite, le RSI (cycle 14) est utilisé comme filtre de tendance, exigeant que le RSI soit supérieur à la zone de survente (au-dessus de 60) et inférieur à la zone de survente (au-dessous de 40), afin d’éviter des transactions fréquentes dans le marché de liquidation.

Avantages stratégiques

  1. Vérification croisée de multiples indicateurs techniques pour améliorer la fiabilité du signal
  2. La combinaison de suivi des tendances et d’indicateurs de dynamique permet une bonne performance dans un marché en tendance
  3. L’utilisation d’objectifs de stop-loss dynamiques et de multiples gains permet de protéger les fonds et de tirer le meilleur parti de la tendance
  4. Filtrer les signaux RSI pour réduire les fausses signaux de correction
  5. Un degré élevé d’automatisation du système réduit l’impact émotionnel de l’intervention humaine

Risque stratégique

  1. Les multiples indicateurs peuvent entraîner des retards de signal, susceptibles d’entraîner des retraits plus importants dans des marchés à retournement rapide.
  2. Le filtrage du RSI pourrait avoir manqué certains points de départ importants
  3. Les paramètres de stop loss et de profit à pourcentage fixe peuvent ne pas s’appliquer à tous les environnements de marché
  4. Dans les marchés très volatils, il est possible de toucher fréquemment les points de rupture
  5. Un excès d’indicateurs techniques peut conduire à une optimisation excessive du système

Orientation de l’optimisation de la stratégie

  1. Introduction de paramètres d’indicateur adaptés, adaptés dynamiquement en fonction des fluctuations du marché
  2. Ajouter un indicateur de volume comme confirmation auxiliaire
  3. Développer des stratégies d’arrêt plus flexibles, telles que l’arrêt suivi ou l’arrêt dynamique basé sur ATR
  4. Adhésion à un mécanisme d’identification des environnements de marché, avec différents paramètres de réglage dans différentes conditions de marché
  5. Pensez à ajouter des filtres temporels pour éviter de prendre des positions à des moments inappropriés

Résumer

La stratégie utilise une combinaison de multiples indicateurs techniques pour construire un système de négociation relativement complet. Bien qu’il y ait un certain retard, il est possible d’obtenir des rendements stables dans un marché tendance grâce à un filtrage de signal strict et à une gestion des risques.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-04 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA RSI Donchian Strategy", overlay=true)

// Input parameters
fastEmaLength = input(9, title="Fast EMA Length")
midEmaLength = input(21, title="Mid EMA Length")
slowEmaLength = input(55, title="Slow EMA Length")
ema89Length = input(89, title="89 EMA Length")
ema144Length = input(144, title="144 EMA Length")
rsiPeriod = input(14, title="RSI Period")
rsiOverbought = input(60, title="RSI Overbought Level")
rsiOversold = input(40, title="RSI Oversold Level")
donchianLength1 = input(21, title="Donchian Channel Length 1")
donchianLength2 = input(74, title="Donchian Channel Length 2")

// EMA calculations
fastEma = ta.ema(close, fastEmaLength)
midEma = ta.ema(close, midEmaLength)
slowEma = ta.ema(close, slowEmaLength)
ema89 = ta.ema(close, ema89Length)
ema144 = ta.ema(close, ema144Length)

// RSI calculation
rsi = ta.rsi(close, rsiPeriod)

// Donchian Channel calculations
donchianUpper1 = ta.highest(high, donchianLength1)
donchianLower1 = ta.lowest(low, donchianLength1)
donchianUpper2 = ta.highest(high, donchianLength2)
donchianLower2 = ta.lowest(low, donchianLength2)
donchianMid1 = (donchianUpper1 + donchianLower1) / 2
donchianMid2 = (donchianUpper2 + donchianLower2) / 2

// Plot EMAs
plot(fastEma, color=color.green, linewidth=2, title="Fast EMA")
plot(midEma, color=color.blue, linewidth=2, title="Mid EMA")
plot(slowEma, color=color.orange, linewidth=2, title="Slow EMA")
plot(ema89, color=color.red, linewidth=2, title="89 EMA")
plot(ema144, color=color.purple, linewidth=2, title="144 EMA")

// Plot Donchian Channels
plot(donchianUpper1, color=color.new(color.blue, 0), title="Donchian Upper 1")
plot(donchianLower1, color=color.new(color.blue, 0), title="Donchian Lower 1")
plot(donchianMid1, color=color.new(color.blue, 80), title="Donchian Mid 1")
plot(donchianUpper2, color=color.new(color.red, 0), title="Donchian Upper 2")
plot(donchianLower2, color=color.new(color.red, 0), title="Donchian Lower 2")
plot(donchianMid2, color=color.new(color.red, 80), title="Donchian Mid 2")

// Entry Conditions
longCondition = ta.crossover(fastEma, slowEma) and rsi > rsiOverbought
shortCondition = ta.crossunder(fastEma, slowEma) and rsi < rsiOversold

// Stop Loss and Take Profit
var float longStopLoss = na
var float longTakeProfit1 = na
var float longTakeProfit2 = na
var float shortStopLoss = na
var float shortTakeProfit1 = na
var float shortTakeProfit2 = na

if longCondition
    longStopLoss := high * 0.99
    longTakeProfit1 := longStopLoss * 1.02618
    longTakeProfit2 := longStopLoss * 1.036185
    strategy.entry("Long", strategy.long)
    
if shortCondition
    shortStopLoss := low * 1.01
    shortTakeProfit1 := shortStopLoss * 0.97382
    shortTakeProfit2 := shortTakeProfit1 * 0.96381
    strategy.entry("Short", strategy.short)

// Exit Conditions
if not na(longStopLoss)
    strategy.exit("Take Profit 1", "Long", limit=longTakeProfit1)
    strategy.exit("Take Profit 2", "Long", limit=longTakeProfit2)
    strategy.exit("Stop Loss", "Long", stop=longStopLoss)

if not na(shortStopLoss)
    strategy.exit("Take Profit 1", "Short", limit= shortTakeProfit1)
    strategy.exit("Take Profit 2", "Short", limit=shortTakeProfit2)
    strategy.exit("Stop Loss", "Short", stop=shortStopLoss)

// Labels for buy and sell signals
if longCondition
    label.new(bar_index, low, "Buy", color=color.green, style=label.style_label_up, textcolor=color.white)

if shortCondition
    label.new(bar_index, high, "Sell", color=color.red, style=label.style_label_down, textcolor=color.white)

// Alerts
alertcondition(longCondition, title="Long Entry Alert", message="Long entry signal")
alertcondition(shortCondition, title="Short Entry Alert", message="Short entry signal")