Calcul de Moyenne Mobile Exponentielle

Discutez d'informatique ici !
Mykeul
Membre Naturel
Messages: 24
Enregistré le: 19 Mai 2008, 06:51

par Mykeul » 21 Mai 2008, 12:47

OK je n'avais pas compris cela alors.
Comme ci dessus, ca fonctionnait, j'ai refais les calculs sur 3 et 4 périodes avec N=5, mais le résultat est faux ...

Je vais tester les formules Wikipedia au cas où



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

par Jean_Luc » 21 Mai 2008, 13:37

Bon trés bien.

Il y a un autre problème, lorsque tu veux calculer une MME sur une série
de valeurs contenant moins de n valeurs (le n ici c'est le nombre de valeurs
sur lequel tu calcules cette moyenne pondérée, on prends par exemple n=50 pour une MME50) et ben ça coince !
Donc pour remédier à ce problème, on à plusieurs solutions:
1) On extrapole les données manquantes sachant qu'il existe plusieurs méthode d'extrapolation.
2) On les considère à 0 (Je ne pense pas que dans le cas d'une "MME commerciale" cette solution soit adaptée).
3) On les considère toutes égales à la première valeur connue.
4) On "renormalise le filtre" sur la longueur de la série, c'est ce qui est fait dans la méthode décrite dans le premier lien que j'ai donné au post #2.
...

Mais attention, toutes ces méthodes modifient les caractéristiques du filtre. Encore un fois, il faut choisir la bonne en fonction du besoin.

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

par Jean_Luc » 21 Mai 2008, 20:06

Pourrais-tu refaire les tests avec les séries sur tes softs ?

En fait quand je t'ai donné les tests, j'ai ordonné les valeurs de gauche à droite (J'ai plutôt l'habitude de représenter la flèche du temps dans ce sens :lol3:) et visiblement tu les a pris dans l'autre sens.

Donc pourrais-tu refaire les tests avec:

1 2
1 2 3
1 2 3 4
1 2 3 4 5

(Les 1 sont les valeurs les plus anciennes)

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

par Mykeul » 22 Mai 2008, 07:37

Voici les bons chiffres que je dois trouver :
1 2 = 1.66667
1 2 3 = 2.25
1 2 3 4 = 2.824
1 2 3 4 5 = 3.39506
1 2 3 4 5 6 = 3.96484
1 2 3 4 5 6 7 = 4.53394
1 2 3 4 5 6 7 8 = 5.10264
1 2 3 4 5 6 7 8 9 = 5.67109
1 2 3 4 5 6 7 8 9 10 = 6.23937

Voici les résultats avec la formule de Wikipedia Roberts 1959 :
MME = (alpha x valeurdujour) + ((1-alpha) x prev)
En prenant N variable étant = au nombre de périodes :
1 2 = 1.6667
1 2 3 = 2.25
1 2 3 4 = 2.824
1 2 3 4 5 = 3.39506
1 2 3 4 5 6 = 3.96484
1 2 3 4 5 6 7 = 4.53394
1 2 3 4 5 6 7 8 = 5.10264
1 2 3 4 5 6 7 8 9 = 5.67109
1 2 3 4 5 6 7 8 9 10 = 6.23937
Ca marche avec cette serie ... pourtant avec le meme calcul sur une serie de cloture, ca ne marche pas.
Je vais refaire des tests et reverifier les series.

Je reposte sous peu.

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

par Jean_Luc » 22 Mai 2008, 15:02

Salut,

C'est très étrange comme résultat ! Peut être un cas particulier du au système d'extrapolation qu'ils ont choisi. Ce qui est intéressant c'est que pour N=5, ça marche dans les 2 sens pour les séries 1,2,3,4,5 et 5,4,3,2,1.
Ce qui est certain c'est que la formule de Roberts que tu utilises est équivalente mathématiquement à la formule proposée ici si l'on choisi n grand. Le choix de que tu as fait revient à considérer toutes les valeurs précédentes égales à la première valeur de ta série.
En tout cas, calculer une MME avec un N variable, ce n'est plus une MME !
Ce que je ne comprends pas c'est comment tu choisis la valeur de N dans tes logiciels. Si tu peux pas la choisir, c'est comme avoir un logiciel de dessin qui te permette uniquement de dessiner en rouge. C'est pas terrible !

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

par Jean_Luc » 22 Mai 2008, 15:28

Je réecris juste la formule pour la méthode avec la moyenne pondérée. Dans le lien que je donne, la formule n'est pas correctement imprimée.



le a ici, c'est en fait .

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

par Mykeul » 22 Mai 2008, 20:59

J'avoue que je suis un peu paumé, je ne comprends plus.
Par contre, je vois qu'on a du mal sur le N.

Précisions : N ne varie pas pendant le calcul d'une MME. Si je calcule une MME20, N=20 tout le temps.
Forcement sur une serie "1 2" ... on a le choix entre N=2 ou ... N=1
Sur 1 2 3 ... si on prend N=3 et qu'on utilise les 3 valeurs, pour moi, ca fait une MME3, mais on peut aussi dire que N=2 mais alors il ne faut prendre que 2 valeurs (2 3) sinon je ne vois pas comment ca marche.

Je suis à l'Ouest ?
C'est fou que ce soit si compliqué, je me suis deja codé aisément l'écart type et tout un tas de formules bien plus compliquées ...

(Tu as vu on est 3eme sur Google en tapant "php moyenne mobile exponentielle", inutile mais marrant)

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

par Mykeul » 22 Mai 2008, 21:02


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

par Jean_Luc » 22 Mai 2008, 21:10

Précisions : N ne varie pas pendant le calcul d'une MME. Si je calcule une MME20, N=20 tout le temps.


Pas forcement, prendre N=20 pour une MME20, c'est un cas particulier.
Ca veux dire qu'on ne calcule cette moyenne pondérée que sur N valeurs,
N est le mombre de période, la période étant la durée entre 2 valeurs.
On commet un erreur de l'ordre de 14% dans ce cas.
On peut par exemple faire une MME20 5min sur une serie de 100 minutes.

Je suis à l'Ouest ?
C'est fou que ce soit si compliqué, je me suis deja codé aisément l'écart type et tout un tas de formules bien plus compliquées ...


Oui les mathématiques du signal c'est pas simple ! Une formule apparement simple (je pense à celle de Roberts) peut dissimuler tout un tas de mathématiques compliqués.

(Tu as vu on est 3eme sur Google en tapant "php moyenne mobile exponentielle", inutile mais marrant)


trip :lol3:

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

par Mykeul » 22 Mai 2008, 22:44

Oui mais là je n'ai plus beaucoup d'idées ...
Voici la dernière :
J'ai testé toutes les valeurs possible pour alpha, en partant de 0.000001 (6 chiffres après la virgule) et incrémentant de 0.000001 à chaque test.
C'est étonnant, voici ci dessous le résultat sur une série de 10 clotures ... je n'ai affiché qu'une ligne sur 10000 sinon c'est illisible.
La boucle avait pour ordre de s'arreter si le resultat arrondi à 4 chiffres apr_s la virgule valait 44.9254 (chiffre donné par Metastock)
Et cela ne l'a jamais touché !!!

0.01 // 44.6471901439
0.02 // 44.6960553801
0.03 // 44.7380626514
0.04 // 44.7738029471
0.05 // 44.8038107097
0.06 // 44.8285885338
0.07 // 44.8486045797
0.08 // 44.8642944417
0.09 // 44.8760629384
0.1 // 44.8842858268
0.11 // 44.8893114448
0.12 // 44.8914622814
0.13 // 44.8910364797
0.14 // 44.8883092723
0.15 // 44.8835343532
0.16 // 44.8769451867
0.17 // 44.8687562571
Après ca décroit.

Tu as d'autres idées ?

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

par Jean_Luc » 22 Mai 2008, 23:03

Je ne connais pas MetaStock, est-ce que dans la version free on peut faire le calul de MME ?
Je veux bien essayer de le telecharger pour en savoir plus.
Mais si tu veux faire des tests efficaces, fait des tests sur une longue serie, tu t'anfrachiras des problèmes aux bornes.

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

par Mykeul » 23 Mai 2008, 12:56

Voici un post trouvé sur un forum de bourse, qui tend à prouver que la formule est bonne et que ca marche :

Hi, with the following input values : {2, 1, 2}, TA_EMA(this_range, 2) yields {1.5, 1.8333}

calculations :
k = 2 / (periods + 1) = 2 / 3 = 0.66
EMA_0 = SMA (first 'periods' values) = 1.5
EMA_1 = k * input + (1-k) * EMA_0 = (0.66 * 2) + (0.33*1.5) = 1.8333

The code in TA_EMA.c seems correct :
prevMA = ((inReal[today++]-prevMA)*optInK_1) + prevMA
which tantamounts
EMA_n2 = (k * price_n2) + ((1-k) * EMA_n1).

... ?

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

par Jean_Luc » 23 Mai 2008, 13:33

Ce qui est interressant dans ce que tu as écrit, c'est de voir que:
EMA_0 = SMA (first 'periods' values) = 1.5
Autremenent dit, on a la valeur de .

Ce qui est important de comprendre, je sais je me répette mais bon:

Le N (ou nombre de période) représente une certaine constante de temps=N * période. La période est la durée entre 2 valeurs. Cette constante de temps définie la constante de lissage et est indépendante de la série.

Comme on l'a vu, pour calculer une MME juste tu as besoin d'un grand nombre de valeurs, donc cela pose un problème quand tu n'as qu'un faible nombre de valeurs. Dans ce cas on est obligé de faire des approximations.

Le choix de prendre revient à considérer toutes les valeurs précédentes (inconnues) égales à la première valeur, pour donner un exemple, en faisant ce choix, on a:
MME ( 1,2,3 ) = MME ( 1,1,2,3 ) = MME ( 1,1,1,2,3 ) = etc...

Ce que tu peux tester, c'est de voir avec MegaStock si il donne un résultat identique pour ces séries, si ce n'est pas le cas, ça veut dire que les programmeurs de MegaStock n'ont pas fait ce choix .

La je rentre dans les details, mais un test implacable existe, c'est de regarder la réponse impulsionnelle du filtre. Pour faire ça, il faut calculer ceci:

0 ... 0 1 =>
0 ... 0 1 0 =>
0 ... 0 1 0 0 =>
0 ... 0 1 0 0 0 =>
0 ... 0 1 0 0 0 0 =>
0 ... 0 1 0 0 0 0 0 =>
etc

Les ... représentes des 0 , il faut en mettre beaucoup pour s'affranchir des effets du aux approximations aux bornes. Les sont les valeurs de la pondération utilisée et on peut en déduire N (à condition que le calcul soit bien un MME)

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

par Mykeul » 23 Mai 2008, 13:44

Metastock n'existe pas en gratuit, néanmoins pour tester tu peux prendre xTrade Lite ++ ( http://www.logxtrade.fr/telechargement.php )
Et télécharger les cours de maintenant au mois dernier sur http://download.abcbourse.com/historiques.aspx?f=xt (prend SRD, format xTrade) et ma serie finissant par 43.99 est celle de SUEZ (FR0000120529) il y a 5 jours.

Mykeul

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

par Jean_Luc » 23 Mai 2008, 14:37

OK, je n'arrive pas a installer xTrade Lite ++ le setup programme de la 3.5 crashe et Lite++ me dis "Les thèmes XP doivent être activer" ???
J'essayerai de me procurer MetaStock...

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

par Jean_Luc » 24 Mai 2008, 11:55

Salut,

Bon j'ai installé Metastock v10.

Le time periods, c'est la constante de temps (Ici en nombre de jours)
et on ne sait pas à priori sur combien de valeurs est calculée la MME.
Je vais faire des tests, je te tiens au courant.

Image

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

par Jean_Luc » 24 Mai 2008, 12:35

Autre chose, normalement pour que les formules présentées plus haut
fonctionnent bien, cela impose que la période (durée entre 2 valeurs) soit
constante. Or, la bourse n'est pas ouverte tous les jours (faut bien qu'ils
fassent un peu la fête les tradeurs :lol3:). Donc nouveau problème....
La date de la valeur devient donc importante et une interpolation des points
manquants (jour de fermeture) peut s'avèrer nécessaire....

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

par Mykeul » 24 Mai 2008, 13:10

Je pense bien saisir ce que tu m'indiques sur alpha. N n'est pas forcément égal au nombre de périodes. Cela dit comme on n'a qu'une "cloture" par jour, on a donc qu'une mesure par jour.
"La durée entre deux valeurs" ... 24h ? Je ne saisi pas pourquoi N ne doit pas valoir le nombre de périodes puisque qu'on n'a qu'une mesure par periode.

Enfin bref, pour moi et d'apres ce que je connais de Metastock, nous ne prenons pas en compte le fait qu'il y ait des journees, des week ends etc ... On a une mesure, c'est tout. D'ailleurs on change régulièrement l'echelle (jours -> semaines -> intraday...)

Je te remercie pour ton aide, j'essaie de trouver la solution mais malgré tous les tests, je ne trouve pas pour le moment.

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

par Jean_Luc » 24 Mai 2008, 13:30

Mykeul a écrit:Je pense bien saisir ce que tu m'indiques sur alpha. N n'est pas forcément égal au nombre de périodes.


Si, N c'est le nombre de periodes mais pas forcement la longueur de l'historique sur lequel on calcule la MME.

Mykeul a écrit:Cela dit comme on n'a qu'une "cloture" par jour, on a donc qu'une mesure par jour.


Oui mais seulement 5 par semaines, non ? voire moins ?

Mykeul a écrit:"La durée entre deux valeurs" ... 24h ? Je ne saisi pas pourquoi N ne doit pas valoir le nombre de périodes puisque qu'on n'a qu'une mesure par periode.


Oui 24h ou 1 jour, mais cette durée doit etre constante sur la longeur de la serie pour que les formules marchent.

Mykeul a écrit:Enfin bref, pour moi et d'apres ce que je connais de Metastock, nous ne prenons pas en compte le fait qu'il y ait des journees, des week ends etc ... On a une mesure, c'est tout. D'ailleurs on change régulièrement l'echelle (jours -> semaines -> intraday...)


D'accord, donc ça veut dire qu'une MME 50Jours n'a pas la même signification selon que l'on fait sa mesure un Lundi ou un Vendredi !

Je te remercie pour ton aide, j'essaie de trouver la solution mais malgré tous les tests, je ne trouve pas pour le moment.


De rien, Je continue les tests.

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

par Mykeul » 24 Mai 2008, 14:02

Je vais faire le test pour voir :

Voici la première série :
Image
Donc du lundi 12 au vendredi 16/05

Voici la deuxième série :
Image
Donc du mercredi 14 au mardi 20/05

Et ces 2 series comportent les memes valeurs.

Voici la MME appliquée : MME3 sur cloture
Image

Resultat premiere série :
(deduction valeurs utilisées) : (resultat)
1 2 3 : 2.25
2 3 4 : 3.125
3 4 5 : 4.06250

Resultat deuxieme série :
(deduction valeurs utilisées) : (resultat)
1 2 3 : 2.25
2 3 4 : 3.125
3 4 5 : 4.06250

Donc tu vois, on prend betement les valeurs comme elles viennent ...

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 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