Stratégie de suivi des tendances basée sur des indicateurs dynamiques combinée à un système de gestion des risques

EMA RSI DMI ATR MOM VOL
Date de création: 2025-02-10 14:20:44 Dernière modification: 2025-02-10 14:20:44
Copier: 0 Nombre de clics: 407
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances basée sur des indicateurs dynamiques combinée à un système de gestion des risques

Aperçu

Il s’agit d’une stratégie de suivi des tendances basée sur de multiples indicateurs techniques et de gestion des risques. La stratégie utilise de manière intégrée plusieurs indicateurs techniques tels que les moyennes mobiles, les indices de force relative (RSI), les indicateurs de mouvement (DMI) pour identifier les tendances du marché et protéger la sécurité des fonds grâce à des mesures de contrôle des risques telles que l’arrêt dynamique des pertes, la gestion des positions et la limite de retrait maximale mensuelle.

Principe de stratégie

La stratégie utilise un mécanisme de confirmation de tendance à plusieurs niveaux:

  1. Déterminez la direction de la tendance à l’aide de l’indice cyclique 8/21/50 des moyennes mobiles (EMA)
  2. Utilisation de la ligne médiane du canal de prix comme filtre de tendance
  3. Combiné avec la moyenne du RSI ((5 cycles) pour filtrer les fausses ruptures de mouvement dans la plage 35-65
  4. Confirmation de la force de la tendance par l’indicateur DMI (cycle 14)
  5. Utilisation de l’indicateur de dynamique ((8 cycles) et de l’amplification de la transaction pour vérifier la continuité de la tendance
  6. Le risque est contrôlé par un arrêt dynamique basé sur ATR.
  7. Gestion des positions avec un risque fixe de 5% du capital initial pour chaque transaction
  8. Limite de retrait mensuel maximal de 10% pour éviter les pertes excessives

Avantages stratégiques

  1. La vérification croisée de multiples indicateurs techniques améliore la précision des jugements de tendances
  2. Le mécanisme de stop-loss dynamique contrôle efficacement le risque d’une seule transaction
  3. La gestion des positions avec des risques fixes rend l’utilisation des fonds plus rationnelle
  4. La limite de retrait maximum mensuel offre une protection contre les risques systémiques
  5. La combinaison d’indicateurs d’échange améliore la fiabilité de la confirmation des tendances
  6. Un ratio de profit/perte de 2:1 améliore la rentabilité à long terme

Risque stratégique

  1. L’utilisation de multiples indicateurs peut entraîner un retard de signal
  2. Des signaux erronés peuvent être fréquents dans les marchés en crise
  3. Les modèles de risque fixe peuvent ne pas être suffisamment flexibles en cas de fortes fluctuations
  4. Les restrictions sur les retraits mensuels peuvent vous faire rater des opportunités de trading importantes
  5. La tendance à la reprise pourrait entraîner une rechute plus importante

Orientation de l’optimisation de la stratégie

  1. Introduction de paramètres d’indicateur adaptés pour s’adapter à différentes conditions du marché
  2. Développer des stratégies de gestion de position plus flexibles, en tenant compte des fluctuations du marché
  3. Évaluation quantitative de l’intensité des tendances et optimisation du moment de l’entrée
  4. Des mécanismes de réduction des risques mensuels plus intelligents
  5. Ajout d’un module de reconnaissance de l’environnement du marché pour ajuster les paramètres de la stratégie en fonction des différentes conditions du marché

Résumer

La stratégie a pour avantage de disposer d’un cadre complet de gestion des risques comprenant le stop-loss dynamique, la gestion des positions et le contrôle des retraits. Bien qu’il existe un certain risque de retard, la stratégie est susceptible de maintenir une performance stable dans différents environnements de marché grâce à l’optimisation et à l’amélioration. La clé est de renforcer son adaptabilité aux environnements de marché tout en conservant la logique centrale de la stratégie.

Code source de la stratégie
/*backtest
start: 2024-02-10 00:00:00
end: 2025-02-08 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("High Win-Rate Crypto Strategy with Drawdown Limit", overlay=true, initial_capital=10000, default_qty_type=strategy.fixed, process_orders_on_close=true)

// Moving Averages
ema8 = ta.ema(close, 8)
ema21 = ta.ema(close, 21)
ema50 = ta.ema(close, 50)

// RSI settings
rsi = ta.rsi(close, 14)
rsi_ma = ta.sma(rsi, 5)

// Momentum and Volume
mom = ta.mom(close, 8)
vol_ma = ta.sma(volume, 15)
high_vol = volume > vol_ma * 1

// Trend Strength
[diplus, diminus, _] = ta.dmi(14, 14)
strong_trend = diplus > 20 or diminus > 20

// Price channels
highest_15 = ta.highest(high, 15)
lowest_15 = ta.lowest(low, 15)
mid_channel = (highest_15 + lowest_15) / 2

// Trend Conditions
uptrend = ema8 > ema21 and close > mid_channel
downtrend = ema8 < ema21 and close < mid_channel

// Entry Conditions
longCondition = uptrend and ta.crossover(ema8, ema21) and rsi_ma > 35 and rsi_ma < 65 and mom > 0 and high_vol and diplus > diminus
shortCondition = downtrend and ta.crossunder(ema8, ema21) and rsi_ma > 35 and rsi_ma < 65 and mom < 0 and high_vol and diminus > diplus

// Dynamic Stop Loss based on ATR
atr = ta.atr(14)
stopSize = atr * 1.3

// Calculate position size based on fixed risk
riskAmount = strategy.initial_capital * 0.05

getLongPosSize(riskAmount, stopSize) => riskAmount / stopSize    
getShortPosSize(riskAmount, stopSize) => riskAmount / stopSize

// Monthly drawdown tracking
var float peakEquity = na
var int currentMonth = na
var float monthlyDrawdown = na
maxDrawdownPercent = 10

// Variables for SL and TP
var float stopLoss = na
var float takeProfit = na
var bool inTrade = false
var string tradeType = na

// Reset monthly metrics
monthNow = month(time)
if na(currentMonth) or currentMonth != monthNow
    currentMonth := monthNow
    peakEquity := strategy.equity
    monthlyDrawdown := 0.0

// Update drawdown metrics
peakEquity := math.max(peakEquity, strategy.equity)
monthlyDrawdown := math.max(monthlyDrawdown, (peakEquity - strategy.equity) / peakEquity * 100)

// Trading condition
canTrade = monthlyDrawdown < maxDrawdownPercent

// Entry and Exit Logic
if strategy.position_size == 0
    inTrade := false
    if longCondition and canTrade
        stopLoss := low - stopSize
        takeProfit := close + (stopSize * 2)
        posSize = getLongPosSize(riskAmount, stopSize)
        strategy.entry("Long", strategy.long, qty=posSize)
        strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)
        inTrade := true
        tradeType := "long"
    if shortCondition and canTrade
        stopLoss := high + stopSize
        takeProfit := close - (stopSize * 2)
        posSize = getShortPosSize(riskAmount, stopSize)
        strategy.entry("Short", strategy.short, qty=posSize)
        strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)
        inTrade := true
        tradeType := "short"

// Plot variables
plotSL = inTrade ? stopLoss : na
plotTP = inTrade ? takeProfit : na

// EMA Plots
plot(ema8, "EMA 8", color=color.blue, linewidth=1)
plot(ema21, "EMA 21", color=color.yellow, linewidth=1)
plot(ema50, "EMA 50", color=color.white, linewidth=1)

// SL and TP Plots
plot(plotSL, "Stop Loss", color=color.red, style=plot.style_linebr, linewidth=1)
plot(plotTP, "Take Profit", color=color.green, style=plot.style_linebr, linewidth=1)

// Signal Plots
plotshape(longCondition and canTrade, "Buy Signal", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition and canTrade, "Sell Signal", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// SL/TP Markers with correct y parameter syntax
plot(inTrade ? stopLoss : na, "Stop Loss Level", style=plot.style_circles, color=color.red, linewidth=2)
plot(inTrade ? takeProfit : na, "Take Profit Level", style=plot.style_circles, color=color.green, linewidth=2)

// Background Color
noTradingMonth = monthlyDrawdown >= maxDrawdownPercent
bgcolor(noTradingMonth ? color.new(color.gray, 80) : uptrend ? color.new(color.green, 95) : downtrend ? color.new(color.red, 95) : na)

// Drawdown Label
var label drawdownLabel = na
label.delete(drawdownLabel)
drawdownLabel := label.new(bar_index, high, "Monthly Drawdown: " + str.tostring(monthlyDrawdown, "#.##") + "%\n" + (noTradingMonth ? "NO TRADING" : "TRADING ALLOWED"), style=label.style_label_down, color=noTradingMonth ? color.red : color.green, textcolor=color.white, size=size.small)