Les ressources ont été chargées... Je charge...

L'évaluation de la volatilité est effectuée sur la base de la stratégie de suivi de tendance multi-EMA avec filtre de volatilité dynamique.

Auteur:ChaoZhang est là., Date: 2025-01-17 15h37
Les étiquettes:Le taux d'intérêtRésultatsATR

 Multi-EMA Trend Following Strategy with Dynamic Volatility Filter

Résumé

Cette stratégie est un système de trading intelligent qui combine le suivi des tendances avec le filtrage de la volatilité. Elle identifie les tendances du marché à l'aide des moyennes mobiles exponentielles (EMA), détermine le moment d'entrée à l'aide de True Range (TR) et des filtres de volatilité dynamique, et gère les risques à l'aide d'un mécanisme dynamique de stop-loss / take-profit basé sur la volatilité.

Principes de stratégie

La logique de base comprend les composantes clés suivantes: 1. Identification de tendance: utilise l'EMA à 50 périodes comme filtre de tendance, en prenant uniquement des positions longues au-dessus de l'EMA et des positions courtes au-dessous de l'EMA. 2. Filtrage de volatilité: Calcule l'EMA de True Range (TR) et utilise un coefficient de filtre réglable (défault 1.5) pour filtrer le bruit du marché. Conditions d'entrée: Combine l'analyse de trois bougies consécutives, exigeant que le mouvement des prix montre des caractéristiques de continuité et d'accélération. 4. Stop-Loss/Take-Profit: S'applique sur la base du TR actuel en mode scalp et sur la base des hauts/baisses précédents en mode swing, ce qui permet une gestion dynamique des risques.

Les avantages de la stratégie

  1. Une forte adaptabilité: s'adapte à différents environnements de marché grâce à la combinaison de filtrage dynamique de la volatilité et de suivi des tendances.
  2. Gestion complète des risques: offre des mécanismes dynamiques de stop-loss/take-profit pour les deux modes de négociation, permettant une sélection flexible en fonction des caractéristiques du marché.
  3. Une bonne réglabilité des paramètres: des paramètres clés tels que le coefficient de filtrage et la période de tendance peuvent être optimisés en fonction des caractéristiques des instruments de négociation.
  4. Excellente visualisation: fournit des marqueurs de signaux d'achat/vente clairs et des affichages de niveau stop-loss/take-profit pour une surveillance facile du commerce.

Risques stratégiques

  1. Risque d'inversion de tendance: il peut y avoir des arrêts consécutifs à des points tournants de tendance.
  2. Risque de fausse rupture: peut déclencher de faux signaux lors d'augmentations soudaines de la volatilité.
  3. Sensibilité des paramètres: des réglages incorrects du coefficient de filtrage peuvent entraîner un trop grand nombre ou un trop petit nombre de signaux.
  4. Impact du glissement: peut faire face à un glissement significatif sur les marchés rapides, ce qui affecte les performances de la stratégie.

Directions d'optimisation de la stratégie

  1. Ajouter le filtrage de la force de la tendance: peut introduire des indicateurs tels que l'ADX pour évaluer la force de la tendance et améliorer l'efficacité de la tendance.
  2. Optimiser le stop-loss/take-profit: peut envisager l'introduction de stops de trailing pour protéger plus de profits.
  3. Améliorer le mode swing: peut ajouter plus de conditions spécifiques au swing trading pour améliorer la capacité de détention à moyen et long terme.
  4. Ajouter une analyse de volume: combiner les modifications de volume pour confirmer la validité de la rupture.

Résumé

Cette stratégie construit un système de trading complet en combinant organiquement le suivi des tendances, le filtrage de la volatilité et la gestion dynamique des risques. Ses atouts résident dans son adaptabilité, son risque contrôlable, tout en offrant un potentiel d'optimisation significatif. Grâce à des paramètres appropriés et une sélection appropriée du mode de trading, la stratégie peut maintenir une performance stable dans différents environnements de marché.


/*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)

Relationnée

Plus de