
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.
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.
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.
Cette stratégie peut être optimisée dans les domaines suivants:
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.
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.
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é.
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.
Optimiser le rapport des gains et des pertes. Optimiser le niveau de stop-loss pour trouver le meilleur rapport des gains et des pertes.
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.
/*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