formulation EMA (moyenne mobile exponentielle)
Forums › ProRealTime forum Français › Support ProBuilder › formulation EMA (moyenne mobile exponentielle)
- This topic has 34 replies, 4 voices, and was last updated 5 years ago by Shark.
Tagged: ema, macd zerolag, zerolag
-
-
04/11/2019 at 11:12 AM #96051
pour quel valeur de (close) ma condition c1 est valide, en l’occurrence pour avoir un indicateur avec les mêmes valeurs sur l’avant dernière bougie et celle en cours.
je pensais à une sorte de boucle qui testerait x en partant de x = open -une valeur et la boucle teste cette valeur en rajoutant 0.00001 sur le prix à chaque fois et quand la condition est valide alors je retourne la valeur de x sur la graphique
04/11/2019 at 11:37 AM #9605904/11/2019 at 11:55 AM #96065je vais prendre un cas concret pour plus de facilité
bougie précédente valeur EMA[10](close) = 1.56895
nouvelle bougie (en cours) à combine doit elle clôturer pour avoir l’EMA[10](close) = 1.56895 aussi et je souhaite connaitre ce prix de clôture dés l’ouverture de celle-ci.
Je pense que ça va être ^plus clair comme ça,tout au moins je l’espère.
04/11/2019 at 11:55 AM #96066je vais prendre un cas concret pour plus de facilité
bougie précédente valeur EMA[10](close) = 1.56895
nouvelle bougie (en cours) à combine doit elle clôturer pour avoir l’EMA[10](close) = 1.56895 aussi et je souhaite connaitre ce prix de clôture dés l’ouverture de celle-ci.
Je pense que ça va être plus clair comme ça,tout au moins je l’espère.
J’ai pris l’exemple de l’EMA mais si je pouvais l’appliquais à d’autre indicateur MACD RSI se serait top.
04/11/2019 at 1:13 PM #96079Je viens de faire des tests, le problème est qu’il peut exister une différence très petite entre le calcul effectué et ce que devrait être le close, dont je considère que le Close a trouver est exacte si il est égal ou inférieur à la taille d’un tick. Voici le code spécifique à une EMA:
123456789101112131415161718192021222324252627defparam drawonlastbaronly=trueonce customEMA=closeonce prevEMA=closeEMALength = 10alpha = 2/(EMALength+1)once irange = 200 //ticksmincalc = prevEMA*100lasttest=mincalcif barindex>EMALength thenCustomEMA = alpha*Close + (1-alpha)*CustomEMA[1]for i = -irange to irange dopricetest=(Close+i*ticksize)calc = alpha*pricetest + (1-alpha)*CustomEMA[1]mincalc = min(mincalc,abs(calc-CustomEMA[1]))if mincalc<=ticksize and mincalc<lasttest thenlasttest=mincalcresult=pricetest//breakendifnextDRAWTEXT(" ---------- #result# EMA",barindex,result,dialog,standard,20) coloured(200,0,204)endifreturn result as "Close result",mincalc as "min distance found",customEMA coloured(200,0,0) style(line,2) as "real EMA",CustomEMA[1] coloured(255,0,255) as "prevema"ça n’est pas si simple pour d’autres indicateurs car il faut intervenir dans leurs formules et tout recoder à chaque fois, donc non pas si “top”.
En image ci-dessous en blanc la valeur trouvée, en rouge la EMA actuelle et en violet la EMA précédente, ça semble bien correspondre j’ai pu prendre une copie d’écran au bon moment.1 user thanked author for this post.
04/11/2019 at 2:13 PM #9609704/11/2019 at 7:19 PM #96165Oula ça me parle pas vu mes connaissances en programmation,
mais est il possible de déterminer la valeur x de clôture de la bougie en cours à partir de laquelle les EMA de la dernière et l’avant dernière bougies sont égales.
Quels serait la formule dans ce cas, x= … ?
Bon là c’est un peu moins simple que ton autre post sur la mm simple, mais c’est pas aussi compliqué que ça en a l’air si je me suis pas trompé…
Si on stocke dans une variable dénommée EMA10 ta moyenne mobile exponentielle de période N=10, et qu’on garde la nomenclature du langage PRT pour exprimer sa valeur dans la bougie précédente càd EMA10[1],
Alors on est d’accord qu’on cherche x tel que EMA10=EMA10[1] ou autrement dit EMA10-EMA10[1]=0
Sachant que EMA10 = x * 2 / (N+1) + EMA10[1] * (1 – 2 / (N+1)) (ici N=10 mais peu importe je laisse la formule générale, le N va vite disparaître de toute façon),
alors EMA10-EMA10[1]=0 s’écrit aussi:
x * 2 / (N+1) + EMA10[1] * (1 – 2 / (N+1)) – EMA10[1] = 0
soit: x * 2 / (N+1) – EMA10[1] * 2 / (N+1) = 0
soit: x – EMA10[1]=0 après simplification du 2/(N+1)… (comme promis le N disparaît)
La solution est donc : x = EMA10[1] sans nécessité de calcul numérique avec boucle
04/12/2019 at 9:03 AM #96223Exact, les 2 méthodes fonctionnent et aboutissent au même résultat.
Merci à vous pour votre implication.
Après mure réflexion, ce calcul de x m’intéressait pour plusieurs indicateurs, cela pourrait s’appliquer au RSI pour le franchissement des seuils 80/20 ou au CCI pour les 100/-100, mais l’indicateur que j’utilise vraiment dans mon trading est la MACD ZERO LAG.
J’ai donc un dernier projet si cela vous intéresse concernant cette fois ci la MACD Zero Lag, que j’utilise en H4 dans le but d’anticiper et de placer des OC, avec toujours la même approche, pour quelle valeur de x :
1- MACD ZERO LAG-SIGNAL=0 (le plus important )
2- MACD ZERO LAG [1]-MACD ZERO LAG=0
J’ai regardé de mon côté, j’ai vu que les calculs se font à partir de DEMA avec la formule suivante DEMA=2*EMA1-EMA2
avec pour EMA1 la moyenne mobile exponentielle sur telle période, mais surtout et ça complique les choses une EMA2 qui est la moyenne mobile de la EMA1 sur la même période si j’ai bien tout compris ?
Bref malheureusement vraiment au delà de mes compétences en mathématique et en programmation.
04/12/2019 at 9:05 AM #96225Bref malheureusement vraiment au delà de mes compétences en mathématique et en programmation.
C’est vraiment dommage !
1 user thanked author for this post.
04/12/2019 at 9:10 AM #96226Le RSI reverse engineering est ici : https://www.prorealcode.com/prorealtime-indicators/rsi-reverse-engineering-indicator/
Pour la même chose avec le MACD zerolag , il me semble avoir vu quelque-chose dans le style ces derniers mois, vu que ça semble être “à la mode” 😆 Faudrait chercher sur les forums.
1 user thanked author for this post.
04/12/2019 at 9:13 AM #96228Trouvé ici: Reverse Engineering of the Zero Lag MACD
Quand je disais que c’était à la mode ! 😛
1 user thanked author for this post.
04/12/2019 at 10:12 AM #96238C’est à la mode 🙂
Par contre le code ne fonctionne pas, enfin il fonctionne mais ne renvoie pas la valeur, il y a un léger décalage, je suis pile poil au moment ou l’histo était égal à 0.00000, de plus x évolue en fonction du prix sur la bougie. C’est normal que le calcul se refasse avec la création d’une nouvelle bougie mais là c’est durant la bougie en cours que ça bouge alors que je pense que ça ne devrait pas .
04/12/2019 at 10:39 AM #96242Ce code n’était pas spécifiquement dédié à ta demande. Dans la description, la personne qui l’a partagé explique que le prix affiché est celui où aura lieu le croisement entre la ligne de signal et l’histogramme.
1- MACD ZERO LAG-SIGNAL=0 (le plus important )
Merci de proposer un exemple graphique.
04/12/2019 at 3:32 PM #96271Pour moi je détecte une erreur dans le code dans le calcul des DEMA, si vous pou avez me confirmer, de plus ce que je ne comprends pas c’est que la valeur retournée (x pour moi) sur le graphe principal varie sur la bougie en cours avec le prix, x change à chaque nouvelle bougie ce qui est normal mais pourquoi changerait il sur la bougie en cours ?
Il y a une et une seule valeur de x pour que MACD ZR – SIGNAL = 0 (histogramme à 0) c’est comme si il y avait un arrondi pour moi on le voit dans les captures jointes au post suivant.
donc il semble que le code corresponde à mon souhait 1.
04/12/2019 at 3:39 PM #96274mon souhait 2 c’est toujours connaitre la valeur de x pour laquelle la :
MACD ZR [1] – MACD ZR =0
Cf captures jointes changement de couleur de la pente de la MACD ZR
Vous remarquerez au passage le changement de la valeur sur la graphe.
dans le code :
123456789defparam drawonlastbaronly=trueONCE FastAvg = 12ONCE SlowAvg = 26ONCE SigAvg = 9EMAshort1 = exponentialaverage[FastAvg](close)EMAshort2 = exponentialaverage[FastAvg](EMAshort1)DifferenceShort = EMAshort1 - EMAshort2Si je ne me trompe pas c’est le calcul de la DEMA 12 pour moi le code devrait être :
123456789defparam drawonlastbaronly=trueONCE FastAvg = 12ONCE SlowAvg = 26ONCE SigAvg = 9EMAshort1 = exponentialaverage[FastAvg](close)EMAshort2 = exponentialaverage[FastAvg](EMAshort1)DifferenceShort = 2*EMAshort1 - EMAshort2si vous me le confirmez ?
-
AuthorPosts
Find exclusive trading pro-tools on