Calcul de Moyenne Mobile Exponentielle

Discutez d'informatique ici !
Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 24 Mai 2008, 14:59

Un petit test intéressant...
J'ai tracé la reponse impulsionelle, donc, voici les résultat.
Les MME sont sur l'axe de gauche.
J'approfondi...
La première valeur c'est en fait .
Image



Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 24 Mai 2008, 15:07

Mykeul a écrit:Donc tu vois, on prend betement les valeurs comme elles viennent ...


Et oui ça ca me surprends un peu de la part de Metastock.
Comme tu le dit, on prend betement les valeurs.
Mais je vais tester ça aussi, c'est assez facile à vérifier.

Mykeul
Membre Naturel
Messages: 24
Enregistré le: 19 Mai 2008, 06:51

par Mykeul » 24 Mai 2008, 15:11

La première valeur c'est en fait \alpha.


Ce n'est pas plutot (\alpha x valeur) meme si ici valeur = 1 sur ton impulsion ?

Mykeul
Membre Naturel
Messages: 24
Enregistré le: 19 Mai 2008, 06:51

par Mykeul » 24 Mai 2008, 15:14

La première valeur c'est en fait .


J'ai parlé trop vite.
En fait, je dirais plutot que la derniere valeur c'est ( x valeur)

En effet la valeur de la MME étant affichée pour aujourd'hui, aujourd'hui est la derniere valeur de la serie.

Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 24 Mai 2008, 15:26

Les valeurs de la réponse à l'impulsion sont:
(Pour que les formules marchent, il faut que l'impulsion soit égale à 1)







etc

Et on retrouve bien les formules.

On peut deja voir sul le graphe que l'algo de calcul utilisé par Metastock semble être récursif (formule de Roberts) sinon la réponse devrait s'arreter
net. Il faut pour cela voir plus loin dans le temps.

Je continue...

Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 24 Mai 2008, 21:51

D'autres résultats, comme on le voit sur ce graphe, Metastock ne calcule
pas la MME quand il n'a pas assez de valeurs. il commence à partir de N-1.
Je n'ai pas encore compris comment il calcule la première valeur, le fameux .

Image

Mykeul
Membre Naturel
Messages: 24
Enregistré le: 19 Mai 2008, 06:51

par Mykeul » 25 Mai 2008, 12:57

Je suis quasi certain que la premiere valeur prise par metastock (le ) n'est pas une moyenne mais tout simplement la 1ere valeur de la serie.
Je sais que j'ai copié/collé un texte qui dit le contraire plus tot, mais c'est parce qu'elle EMA "habituelle" se calcule en prenant une SMA sur la serie complète. Cependant, Metastock, la référence des logiciels de bourse, ne prend pas la SMA mais la 1ere valeur. La majorité des logiciels s'alignent sur lui, j'ai vérifié.

Voici un extrait d'une source C :
Code: Tout sélectionner
   /* The first EMA is calculated differently. It
    * then become the seed for subsequent EMA.
    *
    * The algorithm for this seed vary widely.
    * Only 3 are implemented here:
    *
    * TA_MA_CLASSIC:
    *    Use a simple MA of the first 'period'.
    *    This is the approach most widely documented.
    *
    * TA_MA_METASTOCK:
    *    Use first price bar value as a seed
    *    from the begining of all the available
    *    data.
    *
    * TA_MA_TRADESTATION:
    *    Use 4th price bar as a seed, except when
    *    period is 1 who use 2th price bar or something
    *    like that... (not an obvious one...).
    */


Au dela de ca, je pense que cette valeur n'est pas si importante que cela, en effet nous utilisons rarement des EMA pour une periode inférieure à 5, c'est souvent du 20,50,100... periodes.
Et en regardant la formule, on voit que sur une EMA sur 20 périodes, le multiplicateur de la toute premiere valeur est , or , donc

Mais bon, je n'ai toujours pas trouvé la suite ...

Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 25 Mai 2008, 13:24

J'ai toujours un doute sur le calcul de la première valeur. Qu'entends-tu exactement par "premiere valeur de la serie" ?
Sur le dernier graphe que je donne, ça n'a pas l'air de marcher ???



Attention, c'est qu'il faut prendre et non pas .
Donc ça fait:

pour et


donc le 21ème terme (plus ancien) à quand même 1.28% d'importance....

Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 25 Mai 2008, 17:17

Je t'ai fait un petit tableau résumant l'erreur moyenne qui est comise lorsque on calcule la MME que sur les n dernières valeurs:

ici N=20=constante.

Error[n=20]=13.51%
Error[n=21]=12.22%
Error[n=22]=11.05%
Error[n=23]=10.00%
Error[n=24]=9.05%
Error[n=25]=8.19%
Error[n=26]=7.41%
Error[n=27]=6.70%
Error[n=28]=6.06%
Error[n=29]=5.48%
Error[n=30]=4.96%
Error[n=31]=4.49%
Error[n=32]=4.06%
Error[n=33]=3.67%
Error[n=34]=3.32%
Error[n=35]=3.01%
Error[n=36]=2.72%
Error[n=37]=2.46%
Error[n=38]=2.23%
Error[n=39]=2.01%

Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 25 Mai 2008, 22:40

Un dernier petit graphe pour essayer de bien comprendre la différence entre une SMA et une EMA. La difficulté c'est bien sur de saisir la différence entre ce qu'on appelle un filtre à réponse impulsionelle finie où on a un nombre fini de coefficients (ex SMA) et un filtre à réponse impulsionelle infinie (ex EMA). Les valeurs de la réponse à l'impulsion sont les coefficients de la pondération.

J'espère que tu commences à comprendre. Je sais que c'est pas evident.

Image

Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 26 Mai 2008, 14:32

Salut,

Retour sur le calcul de la première valeur.

Sur le graphe du post #46 , une initialisation qui marche, pour ce cas:



Je ferai d'autres tests.

Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 27 Mai 2008, 00:17

Re,

J'ai vérifié et effectivement, en prenant la première valeur de la serie comme première valeur d'EMA et en commencement le calcul (en utilisant la formule de Roberts) à partir de la 2ème valeur, ça a l'air de marcher. En tout cas on retrouve bien les résultats de Metastock. Donc ton algo est tout bon depuis le départ.
Mais comment as-tu obtenu ces résultats ????

Mykeul a écrit:Voici le résultat (EMA) donné par les logiciels :
N=5(serie:1,2,3,4,5) : 2.60494
N=4(serie:1,2,3,4) : 2.30560
N=3(serie:1,2,3) : 1.93750
N=2(serie:1,2) : 1.49383
N=1(serie:1) : 1.00000
Ce sont donc les résultats que je dois trouver.

Mykeul
Membre Naturel
Messages: 24
Enregistré le: 19 Mai 2008, 06:51

par Mykeul » 27 Mai 2008, 11:59

Bonjour,

Excuse moi, je n'ai pu eu beaucoup de temps hier mais je ne lache pas.
Pour les resultats, je les ai eu en faisant une fausse valeur ayant pour serie 1 2 3 4 5, puis en faisant une moyenne dans metastock et en sortant les valeurs de MME1, MME2, MME3, MME4 et MME5.

Sur ton graphe avec l'impulsion, je ne comprends pas pourquoi la MME20 ne retombe pas directement à 0 à la 21eme période. Ce n'est pas normale, elle n'a plus de 1 dans la serie !

Et je ne saisi pas non plus pourquoi c'est égal à puisque dans la formule on avait donc pas de ...

Jean_Luc
Membre Relatif
Messages: 158
Enregistré le: 25 Avr 2008, 11:17

par Jean_Luc » 27 Mai 2008, 13:44

Bonjour,

Mykeul a écrit:Sur ton graphe avec l'impulsion, je ne comprends pas pourquoi la MME20 ne retombe pas directement à 0 à la 21eme période. Ce n'est pas normale, elle n'a plus de 1 dans la serie !


Ces courbes sont faites avec Metastock et elles prouvent que ce logiciel utilise bien la formule récursive de Roberts pour le calcul de l'EMA. Je sais la difficulté c'est de comprendre que les poids dans le cas d'une EMA ne retombe jamais à 0. Mais c'est vrai qu'à partir d'un certain rang (beaucoup plus grand que N), ces poids deviennent négligeable.

Mykeul a écrit:Et je ne saisi pas non plus pourquoi c'est égal à puisque dans la formule on avait donc pas de ...


Ou as-tu vu cette formule ???
La formule de Roberts, c'est:

Pour et N le nombre de période.




En posant,






Et on voit bien que:



Les coeficients de la pondération pour les valeurs plus anciennes sont donc bien . Et ça correspond tout à fait avec les résultats de Metastock. Tu peux vérifier.

EDIT:

Si tu as une série de n valeurs , voici le calcul itératif équivalent à la forme récursive utilisé par Metastock (en indexant à partir de t=0):



En faisant le choix et en remarquant que , on a:



ou en remettant dans l'ordre chronologique:



On voit donc, l'effet de l'initialisation de . Dans ce cas, cette valeur reçoit une pondération de qui s'amenuise donc au fur et à mesure que n augmente.

Mykeul
Membre Naturel
Messages: 24
Enregistré le: 19 Mai 2008, 06:51

par Mykeul » 31 Mai 2008, 01:30

Je dois t'avouer que je n'ai pas compris grand chose à ton dernier post, surtout la fin. C'est au delà de mes compétences.
Cela dit, après plusieurs jours de recherches, voici un code qui marche :

Code: Tout sélectionner
    my $alpha = 2 / ($nb + 1);

    for (my $i=$first+1;$iget($name, $i - 1);
      my $ema = $alpha * ($self->{'args'}->get_arg_values($calc, $i, 2) - $oldema) + $oldema;
      $indic->set($name, $i, $ema);
    }


Pfiouuuu

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite