Stratégie de trading dynamique à périodes EMA multiples


Date de création: 2023-12-12 12:18:41 Dernière modification: 2023-12-12 12:18:41
Copier: 1 Nombre de clics: 1090
1
Suivre
1621
Abonnés

Stratégie de trading dynamique à périodes EMA multiples

Aperçu

L’idée centrale de cette stratégie est de générer un signal de trading basé sur la croisée de plusieurs moyennes mobiles d’indices (EMA). Lorsque l’EMA à court terme porte une EMA à plus long terme, faites plus; lorsque l’EMA à court terme porte une EMA à plus long terme, faites le plein.

Principe de stratégie

La stratégie impose 8 cycles d’EMA, respectivement les lignes 8, 13, 21, 34, 55, 89, 144 et 233. Ces EMA sont configurés pour être activés ou désactivés indépendamment.

Si les deux EMA sont activés, shorterEMA > longerEMA est un signal de multiplication, et shorterEMA < longerEMA est un signal d’annulation.

Par exemple, si une EMA de 55 jours et une EMA de 89 jours sont activées, faire plus lorsque l’EMA de 55 jours est portée sur l’EMA de 89 jours; faire un pari lorsque l’EMA de 55 jours est portée sur l’EMA de 89 jours. Cela permet à cette stratégie de dynamiser la combinaison d’EMA utilisée, de passer d’une période plus longue à une période plus courte, ou vice versa.

Le nombre de positions est défini comme les droits et intérêts du compte divisé par le nombre de groupes EMA activés. Cela garantit que la taille des positions sur chaque EMA est la même.

Analyse des avantages

  • Flexibilité cyclique de la stratégie en configurant des EMA différents
  • Chaque EMA peut être configurée indépendamment, permettant une personnalisation élevée
  • Les positions détenues sont réparties proportionnellement sur chaque EMA, ce qui favorise la gestion des risques.
  • Utilisation de plusieurs EMA permettant de passer à une EMA plus appropriée à différentes étapes du marché
  • Les stratégies sont simples, claires, faciles à comprendre et à déboguer

Analyse des risques

  • L’EMA ne peut pas déterminer la structure du marché en tant qu’indicateur unique et pourrait envoyer de faux signaux
  • Les EMA sont susceptibles de se croiser dans des marchés très volatiles, ce qui augmente la fréquence des transactions et les coûts de dérapage.
  • Nécessité d’optimiser les paramètres EMA pour les différents marchés
  • Les signaux de transaction peuvent être confirmés en combinaison avec d’autres indicateurs.

On peut envisager d’utiliser l’EMA en combinaison avec d’autres indicateurs, tels que l’indicateur de passage ou l’indicateur de choc pour filtrer les signaux, ou en combinaison avec l’indicateur de tendance et l’indicateur de revers. En outre, l’optimisation des paramètres d’EMA est très importante et doit être adaptée aux différents marchés.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. L’optimisation des paramètres de l’EMA. La meilleure combinaison de paramètres de l’EMA peut être trouvée à l’aide de la numérisation des paramètres et de la méthode d’analyse de marche en avant.

  2. Ajout de conditions de filtrage. Des conditions de filtrage supplémentaires peuvent être ajoutées à l’intersection des EMA pour éviter les signaux erronés, tels que le filtrage du volume de transactions, le filtrage de la volatilité, etc.

  3. Combinaison avec d’autres indicateurs. L’EMA peut être combinée avec d’autres indicateurs tels que le MACD, le KDJ, le Blink Belt et ainsi de suite, en tirant parti de leur complémentarité.

  4. Adaptation dynamique des positions. Les positions sur chaque EMA peuvent être ajustées dynamiquement en fonction de la volatilité du marché ou de la force de la tendance.

  5. Optimiser le rapport des gains et des pertes. Optimiser le niveau de stop-loss pour trouver le meilleur rapport des gains et des pertes.

Résumer

La stratégie est très simple et directe dans son ensemble, en capturant les tendances à court et à moyen terme par le croisement d’EMA. Son avantage réside dans sa haute configuration et sa flexibilité, permettant au trader de choisir la combinaison d’EMA qui lui convient le mieux. Cependant, l’EMA en tant qu’indicateur unique est susceptible de générer de faux signaux, ce qui est le plus grand risque de la stratégie.

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