Stratégie de suivi de tendance Double EMA Golden Cross


Date de création: 2023-11-21 15:10:54 Dernière modification: 2023-11-21 15:10:54
Copier: 0 Nombre de clics: 648
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance Double EMA Golden Cross

Aperçu

Cette stratégie consiste à calculer la direction de la tendance en calculant une EMA rapide et une EMA lente, et en comparant la relation entre la taille et la taille des deux EMA. C’est une stratégie simple de suivi de la tendance. Faire plus lorsque l’EMA rapide traverse l’EMA lente et faire moins lorsque l’EMA rapide traverse l’EMA lente.

Principe de stratégie

Les indicateurs centraux de cette stratégie sont les EMA rapides et les EMA lents. La longueur des EMA rapides est réglée sur 21 cycles et celle des EMA lents sur 55 cycles. Les EMA rapides répondent plus rapidement aux variations de prix, reflétant les tendances à court terme récentes; les EMA lents répondent plus lentement aux variations de prix et filtrent une partie du bruit, reflétant les tendances à moyen et long terme.

Lorsque la ligne rapide traverse la ligne lente sur l’EMA, cela indique que la tendance à court terme se transforme en hausse et que la tendance à moyen et long terme peut se retourner, ce qui est un signal de hausse. Lorsque la ligne rapide traverse l’EMA en dessous de l’EMA, cela indique que la tendance à court terme se transforme en baisse et que la tendance à moyen et long terme peut se retourner, ce qui est un signal de creux.

La comparaison des EMA rapides et lents permet de capturer les points de basculement des tendances sur deux échelles de temps, à court et à moyen terme, ce qui est typique des stratégies de suivi des tendances.

Avantages stratégiques

  1. La pensée est simple, claire, facile à comprendre et à mettre en œuvre.
  2. Adaptation des paramètres est flexible, les cycles EMA de la ligne rapide et de la ligne lente peuvent être personnalisés
  3. Arrêt de perte ATR configurable, avec des risques contrôlables

Risque stratégique

  1. Le choix du point d’intersection de la double EMA peut être inapproprié, il y a un risque de manquer le meilleur point d’entrée
  2. En cas de choc, il peut y avoir plusieurs signaux d’inactivité, ce qui entraîne un risque de perte.
  3. Les paramètres ATR sont mal réglés, ce qui peut entraîner un stop-loss trop lâche ou trop radical.

Les mesures de prévention:

  1. Optimiser les paramètres EMA pour trouver la combinaison optimale de paramètres
  2. Augmentation des mécanismes de filtrage pour éviter les signaux inefficaces des chocs
  3. Tester et optimiser les paramètres ATR pour s’assurer que les paramètres d’arrêt de perte sont raisonnables

Orientation de l’optimisation de la stratégie

  1. Test de stabilité de différents paramètres du cycle EMA basé sur des méthodes statistiques
  2. Augmentation des conditions de filtrage, combinée à d’autres indicateurs pour éviter les signaux invalides
  3. Optimiser les paramètres ATR pour obtenir le meilleur taux de stop-loss

Résumer

Cette stratégie est simple, claire et facile à mettre en œuvre. En combinaison avec l’ATR, elle permet de mettre en place des arrêts de perte et des risques contrôlables. En optimisant les paramètres et en augmentant les conditions de filtrage, la stabilité et la rentabilité de la stratégie peuvent être encore améliorées.

Code source de la stratégie
/*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)