Stratégie de suivi des tendances à double EMA Golden Cross

Auteur:ChaoZhang est là., Date: 2023-11-21 15:10:54 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie calcule la ligne EMA rapide et la ligne EMA lente et compare la relation de taille entre les deux EMA pour déterminer la direction de la tendance du marché. Elle appartient à une stratégie de suivi de tendance simple. Lorsque l'EMA rapide franchit le niveau supérieur de l'EMA lente, passez long. Lorsque l'EMA rapide franchit le niveau inférieur de l'EMA lente, passez court.

La logique de la stratégie

Les indicateurs de base de cette stratégie sont l'EMA rapide et l'EMA lente. La longueur de l'EMA rapide est fixée à 21 périodes et la longueur de l'EMA lente est fixée à 55 périodes. L'EMA rapide peut répondre plus rapidement aux changements de prix, reflétant la tendance à court terme récente; l'EMA lente répond plus lentement aux changements de prix, filtrant un peu de bruit et reflétant la tendance à moyen et long terme.

Lorsque l'EMA rapide traverse au-dessus de l'EMA lente, cela indique que la tendance à court terme a tourné vers le haut et que la tendance à moyen et à long terme peut s'être inversée, ce qui est un signal pour aller long. Lorsque l'EMA rapide traverse en dessous de l'EMA lente, cela indique que la tendance à court terme a tourné vers le bas et que la tendance à moyen et à long terme peut s'être inversée, ce qui est un signal pour aller court.

En comparant les EMA rapides et lents, il capte les points d'inversion de tendance sur deux échelles de temps, à court terme et à moyen et long terme, ce qui est une stratégie de suivi de tendance typique.

Les avantages

  1. Logie simple et claire, facile à comprendre et à mettre en œuvre
  2. réglage des paramètres flexible, les périodes EMA rapides et lentes peuvent être personnalisées
  3. ATR configurable pour le stop loss et le profit pour les risques contrôlables

Les risques

  1. Temps inapproprié des croisements EMA, risque de manquer le meilleur point d'entrée
  2. Des signaux invalides fréquents lors de la consolidation du marché, entraînant des pertes
  3. Réglage incorrect des paramètres ATR, entraînant des arrêts trop lâches ou trop agressifs

Gestion des risques:

  1. Optimiser les paramètres de ligne rapide et lente de l'EMA pour trouver des combinaisons optimales
  2. Ajout de mécanismes de filtrage pour éviter les signaux non valables provenant de la consolidation du marché
  3. Tester et optimiser les paramètres ATR afin d'assurer un stop loss et un profit raisonnables

Les domaines d'amélioration

  1. Stabilité d'essai de différents paramètres de la période EMA basés sur des méthodes statistiques
  2. Ajouter des conditions de filtrage combinées à d'autres indicateurs pour éviter les signaux non valides
  3. Optimiser les paramètres ATR pour obtenir le meilleur ratio stop loss/take profit

Résumé

Cette stratégie évalue la tendance basée sur les croisements EMA, ce qui est simple et clair à mettre en œuvre.


/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "VP Backtester", overlay=false)


// Create General Strategy Inputs
st_yr_inp = input(defval=2017, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
 
// Default Stop Types
fstp = input(defval=false, title="Fixed Perc stop")
fper = input(defval=0.1, title='Percentage for fixed stop', type=float)
atsp = input(defval=true, title="ATR Based stop")
atrl = input(defval=14, title='ATR Length for stop')
atrmsl = input(defval=1.5, title='ATR Multiplier for stoploss')
atrtpm = input(defval=1, title='ATR Multiplier for profit')
 
// Sessions
asa_inp = input(defval=true, title="Trade the Asian Session")
eur_inp = input(defval=true, title="Trade the European Session")
usa_inp = input(defval=true, title="Trade the US session")
ses_cls = input(defval=true, title="End of Session Close Out?")
 
// Session Start / End times (In exchange TZ = UTC-5)    
asa_ses = "1700-0300" 
eur_ses = "0200-1200" 
usa_ses = "0800-1700"  
 
in_asa = time(timeframe.period, asa_ses)
in_eur = time(timeframe.period, eur_ses)
in_usa = time(timeframe.period, usa_ses)
 
strategy.risk.allow_entry_in(strategy.direction.all)
 
// Set start and end dates for backtest
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
window()  => time >= start and time <= end ? true : false // create function "within window of time"

 
// Check if we are in a sessions we want to trade
can_trade = asa_inp and not na(in_asa) ? true :
  eur_inp and not na(in_eur) ? true :
  usa_inp and not na(in_usa) ? true :
  false
  
// atr calc for stop and profit
atr = atr(atrl)
atr_stp_dst_sl = atr * atrmsl
atr_stp_dst_tp = atr * atrtpm



//*************************************************************************************
// Put your strategy/indicator code below
// and make sure to set long_condition=1 for opening a buy trade
// and short_condition for opening a sell trade
//*************************************************************************************
fastInput = input(21)
slowInput = input(55)

fast = ema(close, fastInput)
slow = ema(close, slowInput)

plot(fast, color = red)
plot(slow, color = blue)

long_condition = crossover(fast, slow)
short_condition = crossunder(fast, slow)


//*************************************************************************************
// Trade management with ATR based stop & profit
//*************************************************************************************
if (long_condition and window() )
    strategy.entry("Long Entry",  strategy.long)
    if strategy.position_size <= 0 // Less than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  - atr_stp_dst_sl
            atr_profit = open + atr_stp_dst_tp
            strategy.exit('ATR Long Exit', "Long Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open - (open * fper)
            strategy.exit('Perc Fixed Long Stop Exit', "Long Entry", stop=stop)
 
if (short_condition and window() )
    strategy.entry("Short Entry",strategy.short)
    if strategy.position_size >= 0 // Greater than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  + atr_stp_dst_sl
            atr_profit = open - atr_stp_dst_tp
            strategy.exit('ATR Short Exit', "Short Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open + (open * fper)
            strategy.exit('Perc Fixed Short Stop Exit', "Short Entry", stop=stop)
 
 
strategy.close_all(when=not can_trade and ses_cls)
 


Plus de