Stratégie de suivi des tendances à moyennes mobiles multiples et de filtrage de la volatilité dynamique

EMA TR ATR
Date de création: 2025-01-17 15:00:37 Dernière modification: 2025-01-17 15:00:37
Copier: 3 Nombre de clics: 303
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances à moyennes mobiles multiples et de filtrage de la volatilité dynamique

Aperçu

La stratégie est un système de trading intelligent qui combine le suivi des tendances et le filtrage de la volatilité. Il identifie les tendances du marché grâce à la moyenne mobile exponentielle (EMA), utilise le True Range (TR) et les filtres de volatilité dynamique pour déterminer le moment d’entrée et gère le risque avec un mécanisme dynamique de stop-profit et de stop-loss basé sur la volatilité. La stratégie prend en charge deux modes de trading : Scalp et Swing, qui peuvent être commutés de manière flexible en fonction des différents environnements de marché et styles de trading.

Principe de stratégie

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

  1. Identification des tendances : utilisez l’EMA sur 50 périodes comme filtre de tendance et n’optez pour une position longue que lorsque le prix est supérieur à l’EMA et pour une position courte lorsque le prix est inférieur à l’EMA.
  2. Filtrage de volatilité : calcule l’EMA du True Range (TR) et utilise un facteur de filtre réglable (par défaut 1,5) pour filtrer le bruit du marché.
  3. Conditions d’entrée : Combiné à l’analyse morphologique de trois lignes K consécutives, le mouvement des prix doit être continu et accéléré.
  4. Take Profit et Stop Loss : En mode court terme, il est défini en fonction du TR actuel ; en mode bande, il est défini en fonction des points hauts et bas précédents pour obtenir une gestion dynamique des risques.

Avantages stratégiques

  1. Forte adaptabilité : grâce à la combinaison du filtrage dynamique de la volatilité et du suivi des tendances, il peut s’adapter à différents environnements de marché.
  2. Gestion parfaite des risques : Fournit des mécanismes dynamiques de stop-profit et de stop-loss pour deux modes de trading, qui peuvent être sélectionnés de manière flexible en fonction des caractéristiques du marché.
  3. Bonne adaptabilité des paramètres : les paramètres clés tels que le coefficient de filtre, le cycle de tendance, etc. peuvent être optimisés en fonction des caractéristiques des produits de trading.
  4. Bon effet de visualisation : fournit des signaux d’achat et de vente clairs et des affichages de position stop-profit et stop-loss pour faciliter la surveillance des transactions.

Risque stratégique

  1. Risque de retournement de tendance : des stops consécutifs peuvent survenir aux points de retournement de tendance.
  2. Risque de fausse cassure : de faux signaux peuvent être déclenchés lorsque la volatilité augmente soudainement.
  3. Sensibilité des paramètres : un réglage incorrect des coefficients du filtre peut entraîner un signal trop fort ou trop faible.
  4. Impact du glissement : dans un marché rapide, vous pouvez être confronté à un glissement important, ce qui peut affecter les performances de votre stratégie.

Orientation de l’optimisation de la stratégie

  1. Ajouter un filtrage de la force de la tendance : des indicateurs tels que ADX peuvent être introduits pour évaluer la force de la tendance et améliorer les effets de suivi des tendances.
  2. Optimisez le take-profit et le stop-loss : envisagez d’introduire un stop-loss mobile pour protéger davantage de profits.
  3. Améliorer le modèle de swing trading : des conditions de jugement plus spécifiques au swing trading peuvent être ajoutées pour améliorer les capacités de détention à moyen et long terme.
  4. Ajouter une analyse de volume : combinez les changements de volume pour confirmer la validité de la percée.

Résumer

Cette stratégie construit un système de trading complet en combinant de manière organique le suivi des tendances, le filtrage de la volatilité et la gestion dynamique des risques. L’avantage de cette stratégie est qu’elle est hautement adaptable et qu’elle contrôle les risques, tout en offrant une large marge d’optimisation. En définissant des paramètres raisonnables et en choisissant des modes de trading appropriés, la stratégie peut maintenir des performances stables dans différents environnements de marché. Il est recommandé aux traders d’effectuer des backtests et des optimisations de paramètres suffisants avant une utilisation réelle, et d’effectuer les ajustements correspondants en fonction des caractéristiques de produits de trading spécifiques.

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

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

//@version=5
strategy("Scalp Slayer (I)", overlay=true)

// Input Parameters
filterNumber = input.float(1.5, "Filter Number", minval=1.0, maxval=10.0, tooltip="Higher = More aggressive Filter, Lower = Less aggressive")
emaTrendPeriod = input.int(50, "EMA Trend Period", minval=1, tooltip="Period for the EMA used for trend filtering")
lookbackPeriod = input.int(20, "Lookback Period for Highs/Lows", minval=1, tooltip="Period for determining recent highs/lows")
colorTP = input.color(title='Take Profit Color', defval=color.orange)
colorSL = input.color(title='Stop Loss Color', defval=color.red)

// Inputs for visibility
showBuyLabels = input.bool(true, title="Show Buy Labels")
showSellLabels = input.bool(true, title="Show Sell Labels")

// Alert Options
alertOnCondition = input.bool(true, title="Alert on Condition Met", tooltip="Enable to alert when condition is met")

// Trade Mode Toggle
tradeMode = input.bool(false, title="Trade Mode (ON = Swing, OFF = Scalp)", tooltip="Swing-mode you can use your own TP/SL.")

// Calculations
tr = high - low
ema = filterNumber * ta.ema(tr, 50)
trendEma = ta.ema(close, emaTrendPeriod)  // Calculate the EMA for the trend filter

// Highest and lowest high/low within lookback period for swing logic
swingHigh = ta.highest(high, lookbackPeriod)
swingLow = ta.lowest(low, lookbackPeriod)

// Variables to track the entry prices and SL/TP levels
var float entryPriceLong = na
var float entryPriceShort = na
var float targetPriceLong = na
var float targetPriceShort = na
var float stopLossLong = na
var float stopLossShort = na
var bool tradeActive = false

// Buy and Sell Conditions with Trend Filter
buyCondition = close > trendEma and  // Buy only if above the trend EMA
      close[2] > open[2] and close[1] > open[1] and close > open and 
      (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and 
      (math.abs(close - open) > math.abs(close[1] - open[1])) and 
      close > close[1] and close[1] > close[2] and tr > ema

sellCondition = close < trendEma and  // Sell only if below the trend EMA
       close[2] < open[2] and close[1] < open[1] and close < open and 
       (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and 
       (math.abs(close - open) > math.abs(close[1] - open[1])) and 
       close < close[1] and close[1] < close[2] and tr > ema

// Entry Rules
if (buyCondition and not tradeActive)
    entryPriceLong := close  // Track entry price for long position
    stopLossLong := tradeMode ? ta.lowest(low, lookbackPeriod) : swingLow  // Scalping: recent low, Swing: lowest low of lookback period
    targetPriceLong := tradeMode ? close + tr : swingHigh  // Scalping: close + ATR, Swing: highest high of lookback period
    tradeActive := true

if (sellCondition and not tradeActive)
    entryPriceShort := close  // Track entry price for short position
    stopLossShort := tradeMode ? ta.highest(high, lookbackPeriod) : swingHigh  // Scalping: recent high, Swing: highest high of lookback period
    targetPriceShort := tradeMode ? close - tr : swingLow  // Scalping: close - ATR, Swing: lowest low of lookback period
    tradeActive := true

// Take Profit and Stop Loss Logic
signalBuyTPPrint = (not na(entryPriceLong) and close >= targetPriceLong)
signalSellTPPrint = (not na(entryPriceShort) and close <= targetPriceShort)

signalBuySLPrint = (not na(entryPriceLong) and close <= stopLossLong)
signalSellSLPrint = (not na(entryPriceShort) and close >= stopLossShort)

if (signalBuyTPPrint or signalBuySLPrint)
    entryPriceLong := na  // Reset entry price for long position
    targetPriceLong := na  // Reset target price for long position
    stopLossLong := na  // Reset stop-loss for long position
    tradeActive := false

if (signalSellTPPrint or signalSellSLPrint)
    entryPriceShort := na  // Reset entry price for short position
    targetPriceShort := na  // Reset target price for short position
    stopLossShort := na  // Reset stop-loss for short position
    tradeActive := false

// Plot Buy and Sell Labels with Visibility Conditions
plotshape(showBuyLabels and buyCondition, "Buy", shape.labelup, location=location.belowbar, color=color.green, text="BUY", textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and sellCondition, "Sell", shape.labeldown, location=location.abovebar, color=color.red, text="SELL", textcolor=color.white, size=size.tiny)

// Plot Take Profit Flags
plotshape(showBuyLabels and signalBuyTPPrint, title="Take Profit (buys)", text="TP", style=shape.flag, location=location.abovebar, color=colorTP, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellTPPrint, title="Take Profit (sells)", text="TP", style=shape.flag, location=location.belowbar, color=colorTP, textcolor=color.white, size=size.tiny)

// Plot Stop Loss "X" Marker
plotshape(showBuyLabels and signalBuySLPrint, title="Stop Loss (buys)", text="X", style=shape.xcross, location=location.belowbar, color=colorSL, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellSLPrint, title="Stop Loss (sells)", text="X", style=shape.xcross, location=location.abovebar, color=colorSL, textcolor=color.white, size=size.tiny)

// Alerts

alertcondition(buyCondition and alertOnCondition, title="Buy Alert", message='{"content": "Buy {{ticker}} at {{close}}"}')
alertcondition(sellCondition and alertOnCondition, title="Sell Alert", message='{"content": "Sell {{ticker}} at {{close}}"}')
alertcondition(signalBuyTPPrint and alertOnCondition, title="Buy TP Alert", message='{"content": "Buy TP {{ticker}} at {{close}}"}')
alertcondition(signalSellTPPrint and alertOnCondition, title="Sell TP Alert", message='{"content": "Sell TP {{ticker}} at {{close}}"}')
alertcondition(signalBuySLPrint and alertOnCondition, title="Buy SL Alert", message='{"content": "Buy SL {{ticker}} at {{close}}"}')
alertcondition(signalSellSLPrint and alertOnCondition, title="Sell SL Alert", message='{"content": "Sell SL {{ticker}} at {{close}}"}')

if buyCondition
    strategy.entry("Enter Long", strategy.long)
else if sellCondition
    strategy.entry("Enter Short", strategy.short)