Stratégie de suivi des tendances dynamiques multi-indicateurs basée sur l'EMA et la SMA

EMA SMA ATR PP supertrend
Date de création: 2024-12-27 14:12:50 Dernière modification: 2024-12-27 14:12:50
Copier: 0 Nombre de clics: 426
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances dynamiques multi-indicateurs basée sur l’EMA et la SMA

Aperçu de la stratégie

La stratégie est un système de suivi de tendance dynamique combinant plusieurs indicateurs techniques. Elle identifie les tendances du marché et les opportunités de négociation en intégrant des points pivots, des indicateurs SuperTrend et des signaux croisés de moyennes mobiles. La caractéristique centrale de la stratégie est l’utilisation d’une méthode d’analyse à des périodes de temps fixes, assurant la cohérence du signal tout en améliorant la fiabilité du signal de négociation par la vérification des points pivots.

Principe de stratégie

La stratégie repose sur les mécanismes fondamentaux suivants :

  1. Utilisez des données de prix de périodes fixes pour l’analyse afin d’éviter les interférences de différentes périodes
  2. Le SMA est calculé à partir des EMA de 8 cycles et de 21 cycles, formant la base du suivi de la tendance
  3. L’indicateur SuperTrend, combiné à l’ATR et au comptage des points de repère, est utilisé pour confirmer la direction de la tendance
  4. Les signaux de croisement SMA n’ont été considérés comme valides que s’ils sont apparus dans les 3 cycles de la position pivot
  5. Calcul dynamique et suivi des niveaux de support/résistance pour les décisions de négociation

Avantages stratégiques

  1. Vérification croisée de multiples indicateurs pour améliorer la fiabilité du signal
  2. Analyse des cycles de temps fixes pour réduire les fausses interférences
  3. Mécanismes de vérification ponctuels pour s’assurer que les transactions se déroulent à des niveaux de prix critiques
  4. Suivi dynamique des points de résistance de support pour aider à déterminer la position de l’arrêt de perte
  5. L’utilisation des indicateurs SuperTrend fournit une confirmation supplémentaire de la direction de la tendance
  6. Réglages de paramètres flexibles qui peuvent être ajustés en fonction des différentes conditions du marché

Risque stratégique

  1. Plusieurs indicateurs peuvent entraîner un décalage du signal
  2. Le marché horizontal pourrait générer de faux signaux
  3. L’analyse des périodes de temps fixes peut manquer des signaux importants pour d’autres périodes
  4. Les mécanismes de vérification ponctuelle peuvent vous faire rater des opportunités commerciales importantes
  5. L’optimisation excessive des paramètres peut entraîner une suradaptation

Orientation de l’optimisation de la stratégie

  1. Introduction d’un mécanisme de filtrage de la volatilité pour réduire la fréquence des transactions pendant les périodes de faible volatilité
  2. Indicateurs de confirmation de force de tendance à la hausse, tels que l’ADX ou le MACD
  3. Développer un système de paramètres adaptatifs qui s’adaptent à la dynamique du marché
  4. Ajoutez une analyse du volume des transactions pour améliorer la fiabilité du signal
  5. Mise en place d’un mécanisme de stop-loss dynamique qui permet d’ajuster les positions de stop-loss en fonction des fluctuations du marché

Résumer

Cette stratégie crée un système de trading de suivi des tendances relativement complet grâce à la combinaison de multiples indicateurs techniques. Son avantage central est d’améliorer la fiabilité du signal grâce à l’analyse des périodes de temps fixes et à la vérification des points de repère. Bien qu’il existe un certain risque de retard, il peut être efficacement contrôlé par des mesures d’optimisation des paramètres et de gestion des risques.

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

//@version=6
strategy("Buy Sell Pivot Point", overlay=true)

// Input Parameters
prd = input.int(defval=2, title="Periodo Pivot Point", minval=1, maxval=50)
Factor = input.float(defval=3, title="Fator ATR", minval=1, step=0.1)
Pd = input.int(defval=10, title="Periodo ATR", minval=1)
showpivot = input.bool(defval=false, title="Mostrar Pivot Points")
showlabel = input.bool(defval=true, title="Mostrar Buy/Sell Labels")
showcl = input.bool(defval=false, title="Mostrar PP Center Line")
showsr = input.bool(defval=false, title="Mostrar Support/Resistance")
sma1_length = input.int(defval=8, title="SMA 1")
sma2_length = input.int(defval=21, title="SMA 2")
timeframe_fix = input.timeframe("D", title="Timeframe Fixo")

// Request data from the fixed timeframe
fix_close = request.security(syminfo.tickerid, timeframe_fix, close)
fix_high = request.security(syminfo.tickerid, timeframe_fix, high)
fix_low = request.security(syminfo.tickerid, timeframe_fix, low)
fix_ph = request.security(syminfo.tickerid, timeframe_fix, ta.pivothigh(prd, prd))
fix_pl = request.security(syminfo.tickerid, timeframe_fix, ta.pivotlow(prd, prd))
fix_atr = request.security(syminfo.tickerid, timeframe_fix, ta.atr(Pd))

// Convert Pivot High/Low to valid boolean for conditions
ph_cond = not na(fix_ph)
pl_cond = not na(fix_pl)

// Draw Pivot Points
plotshape(ph_cond and showpivot, title="Pivot High", text="H", style=shape.labeldown, color=color.red, textcolor=color.red, location=location.abovebar, offset=-prd)
plotshape(pl_cond and showpivot, title="Pivot Low", text="L", style=shape.labelup, color=color.lime, textcolor=color.lime, location=location.belowbar, offset=-prd)

// Calculate the Center line using pivot points
var float center = na
lastpp = ph_cond ? fix_ph : pl_cond ? fix_pl : na
if not na(lastpp)
    center := na(center) ? lastpp : (center * 2 + lastpp) / 3

// Upper/Lower bands calculation
Up = center - (Factor * fix_atr)
Dn = center + (Factor * fix_atr)

// Get the trend
var float TUp = na
var float TDown = na
var int Trend = 0
TUp := na(TUp[1]) ? Up : fix_close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := na(TDown[1]) ? Dn : fix_close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := fix_close > TDown[1] ? 1 : fix_close < TUp[1] ? -1 : nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// Plot the trend
linecolor = Trend == 1 ? color.lime : Trend == -1 ? color.red : na
plot(Trailingsl, color=linecolor, linewidth=2, title="PP SuperTrend")

// Plot Center Line
plot(showcl ? center : na, color=showcl ? (center < fix_close ? color.blue : color.red) : na, title="Center Line")

// Calculate Base EMAs
ema_8 = ta.ema(fix_close, 8)
ema_21 = ta.ema(fix_close, 21)

// Calculate SMAs based on EMAs
sma1 = ta.sma(ema_8, sma1_length)
sma2 = ta.sma(ema_21, sma2_length)

// Plot SMAs
plot(sma1, color=#ffff00, linewidth=2, title="SMA 1 (based on EMA 8)")
plot(sma2, color=#aa00ff, linewidth=2, title="SMA 2 (based on EMA 21)")

// Initialize variables to track pivot points
var float last_pivot_time = na

// Update the pivot time when a new pivot is detected
if (ph_cond)
    last_pivot_time := bar_index
if (pl_cond)
    last_pivot_time := bar_index

// Calculate the crossover/crossunder signals
buy_signal = ta.crossover(sma1, sma2)  // SMA 8 crossing SMA 21 upwards
sell_signal = ta.crossunder(sma1, sma2)  // SMA 8 crossing SMA 21 downwards

// Ensure signal is only valid if it happens within 3 candles of a pivot point
valid_buy_signal = buy_signal and (bar_index - last_pivot_time <= 3)
valid_sell_signal = sell_signal and (bar_index - last_pivot_time <= 3)

// Plot Buy/Sell Signals
plotshape(valid_buy_signal and showlabel, title="Buy Signal", text="BUY", style=shape.labelup, color=color.lime, textcolor=color.black, location=location.belowbar)
plotshape(valid_sell_signal and showlabel, title="Sell Signal", text="SELL", style=shape.labeldown, color=color.red, textcolor=color.white, location=location.abovebar)

// Get S/R levels using Pivot Points
var float resistance = na
var float support = na
support := pl_cond ? fix_pl : support[1]
resistance := ph_cond ? fix_ph : resistance[1]

// Plot S/R levels
plot(showsr and not na(support) ? support : na, color=showsr ? color.lime : na, style=plot.style_circles, offset=-prd)
plot(showsr and not na(resistance) ? resistance : na, color=showsr ? color.red : na, style=plot.style_circles, offset=-prd)

// Execute trades based on valid signals
if valid_buy_signal
    strategy.entry("Buy", strategy.long)
if valid_sell_signal
    strategy.entry("Sell", strategy.short)

// Alerts
alertcondition(valid_buy_signal, title="Buy Signal", message="Buy Signal Detected")
alertcondition(valid_sell_signal, title="Sell Signal", message="Sell Signal Detected")
alertcondition(Trend != Trend[1], title="Trend Changed", message="Trend Changed")