Stratégie de négociation dynamique EMA sur plusieurs délais

Auteur:ChaoZhang est là., Date: 2023-12-12 12:18:41 Je suis désolé
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est de générer des signaux de trading basés sur le croisement de multiples moyennes mobiles exponentielles (EMA). Elle va long lorsque l'EMA à court terme traverse l'EMA à long terme depuis le bas, et ferme les positions lorsque l'EMA à court terme traverse l'EMA à long terme. Cette stratégie permet de configurer plusieurs périodes EMA, et chaque EMA peut être activée indépendamment.

Nom de la stratégie

Stratégie de négociation dynamique EMA sur plusieurs délais

Principe de stratégie

La stratégie définit 8 périodes de courbe de croissance (EMR) - 8 jours, 13 jours, 21 jours, 34 jours, 55 jours, 89 jours, 144 jours et 233 jours.

Il génère des signaux longs lorsque l'EMA à court terme traverse l'EMA à long terme depuis le bas. Il génère des signaux de sortie lorsque l'EMA à court terme traverse l'EMA à long terme depuis le haut. Donc, si deux EMA sont activés, l'EMA plus court > longerEMA est un signal long, l'EMA plus court < longerEMA est un signal de sortie.

Par exemple, si l'EMA de 55 jours et l'EMA de 89 jours sont activés, la stratégie va long lorsque l'EMA de 55 jours traverse l'EMA de 89 jours et quitte lorsque l'EMA de 55 jours traverse l'EMA de 89 jours. Cela permet à la stratégie d'ajuster dynamiquement les combinaisons d'EMA utilisées, passant de plus longs délais à plus courts ou inversement.

La taille de la position est réglée sur le capital de compte divisé par le nombre d'EMA activées divisé par le nombre d'EMA fermées.

Analyse des avantages

  • Flexibilité pour ajuster les délais en configurant différentes EMA
  • Chaque EMA peut être activée/désactivée indépendamment, hautement personnalisable
  • Positions réparties uniformément entre les EMA, bénéfiques pour la gestion des risques
  • Utilise plusieurs EMA, peut passer à des EMA plus appropriées pour différentes étapes du marché
  • La logique est simple et claire, facile à comprendre et à déboguer

Analyse des risques

  • L'EMA à elle seule ne peut pas déterminer la structure du marché, sujette à de faux signaux
  • Les marchés à piqûres conduisent à des croisements excessifs de la EMA, à une augmentation de la fréquence des échanges et des coûts de glissement
  • Nécessité d'optimiser les paramètres de l'EMA pour les différents marchés
  • Peut avoir besoin d'autres indicateurs pour confirmer les signaux

Considérez la combinaison de l'EMA avec d'autres indicateurs, par exemple des canaux ou des oscillateurs pour filtrer les signaux, ou incorporer des indicateurs de tendance et d'inversion.

Directions d'optimisation

La stratégie peut être optimisée sous plusieurs aspects:

  1. Optimiser les paramètres EMA par le biais de la numérisation des paramètres et de l'analyse progressive pour trouver les meilleures combinaisons EMA.

  2. Ajoutez des conditions de filtrage sur les croisements EMA pour éviter les faux signaux, par exemple le filtre de volume, le filtre de volatilité, etc.

  3. Combinez avec d'autres indicateurs comme le MACD, le KDJ, les bandes de Bollinger pour tirer parti de la complémentarité.

  4. Ajustez dynamiquement la taille des positions sur chaque EMA en fonction de la volatilité du marché ou de la force de la tendance.

  5. Optimiser les niveaux de stop loss et de profit pour obtenir le meilleur rapport risque/rendement.

Conclusion

Dans l'ensemble, il s'agit d'une stratégie très simple et directe générant des signaux à partir des croisements EMA pour capturer les tendances à court et à moyen terme. Son principal avantage réside dans la haute configuration et la flexibilité pour permettre aux traders de sélectionner les EMA qui leur conviennent. Cependant, EMA seul peut donner facilement de faux signaux, ce qui est le plus grand risque.


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

//@version=2
strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true)

// Revision:        1
// Author:          @ToS_MavericK

buyprice = 0.0
buyprice := buyprice[1]

// === INPUT SMA ===
EMA1  = input(8)
EMA2  = input(13)
EMA3  = input(21)
EMA4  = input(34)
EMA5  = input(55)
EMA6  = input(89)
EMA7  = input(144)
EMA8  = input(233)

EnableEMA1 = input(true)
EnableEMA2 = input(true)
EnableEMA3 = input(true)
EnableEMA4 = input(true)
EnableEMA5 = input(true)
EnableEMA6 = input(true)
EnableEMA7 = input(true)
EnableEMA8 = input(true)

//Profit  = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1)
//StopLoss    = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
FromMonth   = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear    = input(defval = 2018, title = "From Year", minval = 2012)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay   = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear  = input(defval = 2020, title = "To Year", minval = 2012)


// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)
vEMA3 = ema(close, EMA3)
vEMA4 = ema(close, EMA4)
vEMA5 = ema(close, EMA5)
vEMA6 = ema(close, EMA6)
vEMA7 = ema(close, EMA7)
vEMA8 = ema(close, EMA8)

count = -1
if (EnableEMA1 == true)
    count := count + 1
if (EnableEMA2 == true)
    count := count + 1
if (EnableEMA3 == true)
    count := count + 1
if (EnableEMA4 == true)
    count := count + 1
if (EnableEMA5 == true)
    count := count + 1
if (EnableEMA6 == true)
    count := count + 1
if (EnableEMA7 == true)
    count := count + 1
if (EnableEMA8 == true)
    count := count + 1

// set position size
Amount = 1 / (close * count)

// === EXECUTION ===
strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2)
strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2))

strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3)
strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3))

strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4)
strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4))

strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5)
strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5))

strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6)
strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6))

strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7)
strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7))

strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8)
strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8))

plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line)  // plot FastMA
plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line)    // plot SlowMA

//plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line)    // plot SlowMA
//plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line)    // plot SlowMA


Plus de