Système de trading à double moyenne mobile de tendance de rebond combiné à une stratégie d'optimisation dynamique du stop loss ATR

EMA ATR SL TP MA
Date de création: 2025-01-10 15:19:40 Dernière modification: 2025-01-10 15:19:40
Copier: 1 Nombre de clics: 454
1
Suivre
1617
Abonnés

Système de trading à double moyenne mobile de tendance de rebond combiné à une stratégie d’optimisation dynamique du stop loss ATR

Aperçu

Cette stratégie est un système de trading de suivi de tendance basé sur un système de double moyenne mobile et un stop loss dynamique ATR. Il utilise des moyennes mobiles exponentielles (EMA) sur 38 et 62 périodes pour identifier les tendances du marché, détermine les signaux d’entrée par le croisement des prix avec l’EMA rapide et le combine avec l’indicateur ATR pour une gestion dynamique du stop loss. La stratégie propose des modes de trading à la fois agressifs et conservateurs pour s’adapter aux traders ayant différentes préférences de risque.

Principe de stratégie

La logique fondamentale de la stratégie repose sur les éléments clés suivants :

  1. Détermination de la tendance : La tendance actuelle du marché est déterminée par la relation positionnelle entre les EMA de 38 et 62 périodes. Lorsque l’EMA rapide est au-dessus de l’EMA lente, il s’agit d’une tendance à la hausse, sinon il s’agit d’une tendance à la baisse.
  2. Signaux d’entrée : Dans une tendance haussière, un signal long est généré lorsque le prix franchit l’EMA rapide par le bas ; dans une tendance baissière, un signal court est généré lorsque le prix franchit l’EMA rapide par le haut.
  3. Gestion des risques : En utilisant un système de stop-loss dynamique basé sur l’ATR, le niveau de stop-loss est ajusté en conséquence lorsque le prix évolue dans une direction favorable, protégeant les bénéfices existants sans quitter le marché prématurément. Des objectifs de stop loss et de profit en pourcentage fixe sont également définis.

Avantages stratégiques

  1. Excellentes performances de suivi des tendances : le système de moyenne mobile double peut capturer efficacement les tendances à moyen et long terme et éviter les transactions fréquentes sur un marché volatil.
  2. Contrôle parfait des risques : la combinaison d’un stop loss fixe et d’un stop loss dynamique peut limiter le risque maximum et protéger les bénéfices.
  3. Forte adaptabilité : il propose deux modes de trading, agressif et conservateur, qui peuvent être ajustés de manière flexible en fonction de l’environnement du marché et des préférences de risque personnelles.
  4. Retour visuel clair : l’état du marché et les signaux de trading sont affichés de manière intuitive via des lignes K et des flèches de différentes couleurs.

Risque stratégique

  1. Risque d’inversion de tendance : des stops continus peuvent se produire aux points d’inversion de tendance. Il est recommandé de trader uniquement lorsque la tendance est claire.
  2. Risque de dérapage : lorsque le marché fluctue violemment, le prix réel de la transaction peut s’écarter considérablement du prix du signal. La fourchette de stop loss doit être assouplie de manière appropriée.
  3. Sensibilité des paramètres : Le choix de la période de moyenne mobile et du multiple ATR affectera considérablement les performances de la stratégie. Doit être optimisé pour différents environnements de marché.

Orientation de l’optimisation de la stratégie

  1. Ajouter un filtre de force de tendance : les indicateurs de force de tendance tels que l’ADX peuvent être introduits pour entrer sur le marché uniquement lorsque la tendance est claire.
  2. Mécanisme de stop loss optimisé : le multiple ATR peut être ajusté dynamiquement en fonction de la volatilité pour rendre le stop loss plus adaptable.
  3. Ajoutez une confirmation de volume : lorsque le signal d’entrée apparaît, combinez-le avec une analyse de volume pour améliorer la fiabilité du signal.
  4. Classification de l’environnement de marché : ajustez dynamiquement les paramètres de stratégie en fonction des différents environnements de marché (tendance/oscillation).

Résumer

Cette stratégie construit un système de trading complet de suivi de tendance en combinant le système classique de double moyenne mobile avec la technologie moderne de stop-loss dynamique. L’avantage de cette stratégie est son contrôle parfait des risques et sa forte adaptabilité, mais les traders doivent toujours optimiser les paramètres et gérer les risques en fonction de l’environnement de marché spécifique. Grâce aux orientations d’optimisation recommandées, la stabilité et la rentabilité de la stratégie devraient être encore améliorées.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © aalapsharma

//@version=5
strategy(title="CM_SlingShotSystem - Strategy", shorttitle="SlingShotSys_Enhanced_v5", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1)

// Inputs
sae = input.bool(true, "Show Aggressive Entry Bars? (Highlight only)")
sce = input.bool(true, "Show Conservative Entry Bars? (Highlight only)")
st = input.bool(true, "Show Trend Arrows (Top/Bottom)?")
def = input.bool(false, "(Unused) Only Choose 1 - Either Conservative Entry Arrows or 'B'-'S' Letters")
pa = input.bool(true, "Show Conservative Entry Arrows?")
sl = input.bool(false, "Show 'B'-'S' Letters?")
useStopLoss = input.bool(true, "Use Stop-Loss?")
stopLossPerc = input.float(5.0, "Stop-Loss (%)", step=0.1)
useTakeProfit = input.bool(true, "Use Take-Profit?")
takeProfitPerc = input.float(20.0, "Take-Profit (%)", step=0.1)
useTrailingStop = input.bool(false, "Use ATR Trailing Stop?")
atrLength = input.int(14, "ATR Length", minval=1)
atrMult = input.float(2.0, "ATR Multiple for Trailing Stop", step=0.1)

// Calculations
emaSlow = ta.ema(close, 62)
emaFast = ta.ema(close, 38)
upTrend = emaFast >= emaSlow
downTrend = emaFast < emaSlow
pullbackUpT() => emaFast > emaSlow and close < emaFast
pullbackDnT() => emaFast < emaSlow and close > emaFast
entryUpT() => emaFast > emaSlow and close[1] < emaFast and close > emaFast
entryDnT() => emaFast < emaSlow and close[1] > emaFast and close < emaFast
entryUpTrend = entryUpT() ? 1 : 0
entryDnTrend = entryDnT() ? 1 : 0
atrValue = ta.atr(atrLength)

// Trailing Stop Logic (Improved)
var float trailStopLong = na
var float trailStopShort = na

if (strategy.position_size > 0)
    trailStopLong := math.max(close - (atrValue * atrMult), nz(trailStopLong[1], close))
    trailStopLong := strategy.position_avg_price > trailStopLong ? strategy.position_avg_price : trailStopLong
else
    trailStopLong := na

if (strategy.position_size < 0)
    trailStopShort := math.min(close + (atrValue * atrMult), nz(trailStopShort[1], close))
    trailStopShort := strategy.position_avg_price < trailStopShort ? strategy.position_avg_price : trailStopShort
else
    trailStopShort := na

// Plotting
col = emaFast > emaSlow ? color.lime : emaFast < emaSlow ? color.red : color.yellow
p1 = plot(emaSlow, "Slow MA (62)", linewidth=4, color=col)
p2 = plot(emaFast, "Fast MA (38)", linewidth=2, color=col)
fill(p1, p2, color=color.silver, transp=50)
barcolor((sae and pullbackUpT()) ? color.yellow : (sae and pullbackDnT()) ? color.yellow : na)
barcolor((sce and entryUpT()) ? color.aqua : (sce and entryDnT()) ? color.aqua : na)
plotshape(st and upTrend, title="Trend UP", style=shape.triangleup, location=location.bottom, color=color.lime)
plotshape(st and downTrend, title="Trend DOWN", style=shape.triangledown, location=location.top, color=color.red)
plotarrow((pa and entryUpTrend == 1) ? 1 : na, title="Up Entry Arrow", colorup=color.lime, maxheight=30, minheight=30)
plotarrow((pa and entryDnTrend == 1) ? -1 : na, title="Down Entry Arrow", colordown=color.red, maxheight=30, minheight=30)
plotchar(sl and entryUpTrend ? (low - ta.tr) : na, title="Buy Entry (Letter)", char='B', location=location.absolute, color=color.lime)
plotchar(sl and entryDnTrend ? (high + ta.tr) : na, title="Short Entry (Letter)", char='S', location=location.absolute, color=color.red)
plot(useTrailingStop and strategy.position_size > 0 ? trailStopLong : na, "Trailing Stop Long", color=color.green, style=plot.style_linebr)
plot(useTrailingStop and strategy.position_size < 0 ? trailStopShort : na, "Trailing Stop Short", color=color.red, style=plot.style_linebr)

// Function to calculate stop and limit prices
f_calcStops(_entryPrice, _isLong) =>
    _stopLoss = _isLong ? _entryPrice * (1.0 - stopLossPerc / 100.0) : _entryPrice * (1.0 + stopLossPerc / 100.0)
    _takeProfit = _isLong ? _entryPrice * (1.0 + takeProfitPerc / 100.0) : _entryPrice * (1.0 - takeProfitPerc / 100.0)
    [_stopLoss, _takeProfit]

// Entry and Exit Logic (Simplified using strategy.close)
if (entryUpT() and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)

if (entryDnT() and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)

// Exit conditions based on Stop-loss and Take-profit
[slPrice, tpPrice] = f_calcStops(strategy.position_avg_price, strategy.position_size > 0)

if (strategy.position_size > 0)
    strategy.exit("Exit Long", "Long", stop=slPrice, limit=tpPrice, trail_price = trailStopLong, trail_offset = atrValue * atrMult)

if (strategy.position_size < 0)
    strategy.exit("Exit Short", "Short", stop=slPrice, limit=tpPrice, trail_price = trailStopShort, trail_offset = atrValue * atrMult)

// Close opposite position on new entry signal
if (entryUpT() and strategy.position_size < 0)
    strategy.close("Short", comment="Close Short on Long Signal")

if (entryDnT() and strategy.position_size > 0)
    strategy.close("Long", comment="Close Long on Short Signal")