Thursday 16 February 2017

Exponentiel Mobile Moyen Code Exemple

Moyenne mobile exponentielle La moyenne mobile exponentielle La moyenne mobile exponentielle diffère d'une moyenne mobile simple, tant par la méthode de calcul que par la façon dont les prix sont pondérés. La moyenne mobile exponentielle (abrégée aux initiales EMA) est effectivement une moyenne mobile pondérée. Avec l'EMA, la pondération est telle que les prix des jours récents sont donnés plus de poids que les prix plus anciens. La théorie derrière cela est que les prix plus récents sont considérés comme plus importants que les prix plus anciens, en particulier comme une moyenne simple à long terme (par exemple 200 jours) place poids égal sur les données de prix qui est plus de 6 mois et pourrait être pensé D'aussi légèrement dépassé. Le calcul de l'EMA est un peu plus complexe que la moyenne mobile simple, mais présente l'avantage de ne pas tenir compte d'un grand nombre de données couvrant chaque prix de clôture pour les 200 derniers jours (ou le nombre de jours considéré) . Tout ce dont vous avez besoin sont l'EMA pour la journée précédente et le cours de clôture d'aujourd'hui pour calculer la nouvelle moyenne mobile exponentielle. Calcul de l'exposant Initialement, pour l'EMA, un exposant doit être calculé. Pour commencer, prenez le nombre de jours EMA que vous souhaitez calculer et ajoutez un au nombre de jours que vous envisagez (par exemple pour une moyenne mobile de 200 jours, ajoutez un pour obtenir 201 dans le calcul). Appelez bien ce Days1. Ensuite, pour obtenir l'exposant, il suffit de prendre le numéro 2 et de le diviser par Days1. Par exemple, l'exposant pour une moyenne mobile de 200 jours serait: 2 201. Ce qui équivaut à 0,01 Calcul complet si la moyenne mobile exponentielle Une fois que nous avons l'exposant, nous avons besoin de deux autres bits d'information pour nous permettre d'effectuer le calcul complet . Le premier est la moyenne mobile exponentielle du jeudi. Eh bien supposons que nous savons déjà ce que nous aurions calculé hier. Toutefois, si vous n'êtes pas au courant d'EMA hier, vous pouvez commencer par calculer la moyenne mobile simple pour hier, et en utilisant cette place à la place de l'EMA pour le premier calcul (c'est-à-dire le calcul d'aujourd'hui) de l'EMA. Puis demain vous pouvez utiliser l'EMA que vous avez calculé aujourd'hui, et ainsi de suite. La deuxième information dont nous avons besoin est le prix de clôture d'aujourd'hui. Supposons que nous voulons calculer aujourd'hui 200 jours Moyenne mobile exponentielle pour une action ou un stock qui a un EMA jours précédents de 120 pence (ou cents) et un cours de clôture jours de clôture de 136 pence. Le calcul complet est toujours le suivant: Moyenne mobile exponentielle d'aujourd'hui (prix de clôture courants x exposant) (jours précédents EMA x (1 exposant)) Ainsi, en utilisant nos exemples ci-dessus, l'EMA actuelle de 200 jours serait: (136 x 0,01 ) (120 x (1- 0.01)) Ce qui équivaut à un EMA pour aujourd'hui de 120.16.I ont essentiellement un tableau de valeurs comme ceci: Le tableau ci-dessus est simplifié, Im collecte 1 valeur par millisecond dans mon code réel et je dois traiter La sortie sur un algorithme que j'ai écrit pour trouver le pic le plus proche avant un point dans le temps. Ma logique échoue parce que dans mon exemple ci-dessus, 0.36 est le vrai pic, mais mon algorithme regarderait en arrière et verrait le tout dernier nombre 0.25 comme le pic, car il y a une diminution à 0.24 avant lui. L'objectif est de prendre ces valeurs et de leur appliquer un algorithme qui les lisse un peu pour que je possède des valeurs plus linéaires. (C.-à-d.: Id comme mes résultats à curvy, pas jaggedy) On m'a dit d'appliquer un filtre exponentiel de moyenne mobile à mes valeurs. Comment puis-je le faire C'est vraiment difficile pour moi de lire les équations mathématiques, je traite beaucoup mieux avec le code. Comment puis-je traiter les valeurs dans mon tableau, en appliquant un calcul de moyenne exponentielle de la mobilité pour les égaliser demandée Feb 8 12 at 20h27 Pour calculer une moyenne mobile exponentielle. Vous devez garder un certain état autour et vous avez besoin d'un paramètre de réglage. Cela nécessite une petite classe (en supposant que vous utilisiez Java 5 ou plus tard): Instantiate avec le paramètre de décroissance que vous voulez (peut prendre l'accord doit être entre 0 et 1), puis utilisez la moyenne () pour filtrer. Lors de la lecture d'une page sur une récurrence mathématique, tout ce que vous avez vraiment besoin de savoir lorsque vous le transformer en code est que les mathématiciens aiment écrire des index dans des tableaux et des séquences avec des indices. (Theyve quelques autres notations ainsi, ce qui ne l'aide pas.) Cependant, l'EMA est assez simple car vous devez seulement se souvenir d'une vieille valeur aucune arrays compliqués d'état requis. Répondre févr. 8 12 at 20h42 TKKocheran: Pretty much. Notez que les premiers termes de la séquence moyenne sauteront un peu en raison des effets de frontière, mais vous obtenez ceux avec d'autres moyennes mobiles aussi. Cependant, un bon avantage est que vous pouvez envelopper la logique de la moyenne mobile dans le moyager et expérimenter sans déranger le reste de votre programme trop. Ndash Donal Fellows Feb 9 12 at 0:06 J'ai de la difficulté à comprendre vos questions, mais je vais essayer de répondre de toute façon. 1) Si votre algorithme a trouvé 0,25 au lieu de 0,36, alors il est faux. C'est faux parce qu'il suppose une augmentation ou une diminution monotone (qui monte ou monte toujours). Sauf si vous moyenne toutes vos données, vos points de données --- comme vous les présenter --- sont non linéaires. Si vous voulez vraiment trouver la valeur maximale entre deux points dans le temps, découpez votre tableau de tmin à tmax et trouvez le maximum de ce sous-tableau. 2) Maintenant, le concept de moyennes mobiles est très simple: imaginez que j'ai la liste suivante: 1.4, 1.5, 1.4, 1.5, 1.5. Je peux le lisser en prenant la moyenne de deux nombres: 1.45, 1.45, 1.45, 1.5. Notez que le premier nombre est la moyenne de 1,5 et 1,4 (deuxième et premier nombres) la deuxième (nouvelle liste) est la moyenne de 1,4 et 1,5 (troisième et deuxième liste ancienne) la troisième (nouvelle liste) la moyenne de 1,5 et 1,4 (Quatrième et troisième), et ainsi de suite. J'aurais pu faire la période trois ou quatre, ou n. Remarquez comment les données sont beaucoup plus lisses. Une bonne façon de voir les moyennes mobiles au travail est d'aller à Google Finance, sélectionnez un stock (essayez Tesla Motors assez volatile (TSLA)) et cliquez sur technicals au bas du graphique. Sélectionnez Moyenne mobile avec une période donnée, et Moyenne mobile exponentielle pour comparer leurs différences. Moyenne mobile exponentielle est juste une autre élaboration de cela, mais pondère les données plus anciennes moins que les nouvelles données, c'est une façon de biais le lissage vers l'arrière. Veuillez lire l'entrée de Wikipedia. Donc, c'est plus un commentaire qu'une réponse, mais la petite boîte de commentaire était juste à minuscule. Bonne chance. Si vous avez des problèmes avec les mathématiques, vous pourriez aller avec une moyenne mobile simple au lieu d'exponentielle. Donc, la sortie que vous obtenez serait les derniers termes x divisé par x. Pseudocode non testé: Notez que vous devrez manipuler les parties de début et de fin des données car clairement vous ne pouvez pas moyenne les 5 derniers termes lorsque vous êtes sur votre 2e point de données. En outre, il existe des moyens plus efficaces de calculer cette moyenne mobile (somme somme - la plus récente la plus récente), mais c'est pour obtenir le concept de ce qui se passe à travers. J'ai répondu Feb 8 12 à 20:41 Votre réponse 2017 Stack Exchange, Inc Je sais que cela est réalisable avec un coup de pouce comme par: Mais je voudrais vraiment éviter d'utiliser boost. J'ai googlé et n'a pas trouvé d'exemples appropriés ou lisibles. Essentiellement, je veux suivre la moyenne mobile d'un flux continu d'un flux de nombres à virgule flottante en utilisant les plus récents numéros 1000 comme un échantillon de données. Quel est le moyen le plus simple pour atteindre ce que j'ai expérimenté avec l'aide d'un tableau circulaire, moyenne mobile exponentielle et une moyenne mobile plus simple et a constaté que les résultats de la matrice circulaire convenait mieux à mes besoins. Si vos besoins sont simples, vous pouvez simplement essayer d'utiliser une moyenne mobile exponentielle. Autrement dit, vous créez une variable d'accumulateur, et comme votre code regarde chaque échantillon, le code met à jour l'accumulateur avec la nouvelle valeur. Vous choisissez un alpha constant qui se situe entre 0 et 1, et calculez ceci: Il vous suffit de trouver une valeur de alpha où l'effet d'un échantillon donné ne dure que pour environ 1000 échantillons. Hmm, je ne suis pas sûr que ce soit approprié pour vous, maintenant que Ive mis ici. Le problème est que 1000 est une fenêtre assez longue pour une moyenne mobile exponentielle Im pas sûr il ya un alpha qui serait la propagation de la moyenne sur les 1000 derniers chiffres, sans underflow dans le calcul en virgule flottante. Mais si vous voulez une moyenne plus petite, comme 30 nombres ou ainsi, c'est une manière très facile et rapide de le faire. A répondu 12 juin à 4:44 1 sur votre poste. La moyenne mobile exponentielle peut permettre à l'alpha d'être variable. Ainsi, cela permet de calculer des moyennes de base de temps (par exemple, des octets par seconde). Si le temps écoulé depuis la dernière mise à jour de l'accumulateur est supérieur à 1 seconde, laissez alpha be 1.0. Sinon, vous pouvez laisser alpha be (usecs depuis la dernière mise à jour1000000). Ndash jxh 12 juin à 6:21 Je veux essentiellement suivre la moyenne mobile d'un flux continu d'un flux de nombres à virgule flottante en utilisant les plus récents numéros 1000 comme un échantillon de données. Notez que la mise à jour ci-dessous le total en tant qu'éléments comme addedreplaced, en évitant coûteux O (N) traversal pour calculer la somme - nécessaire pour la moyenne - sur demande. Le total est fait d'un paramètre différent de T par rapport au support, par ex. En utilisant un long long pour un total de 1000 s longs, un int pour char s, ou un flottant double au total. C'est un peu vicié en ce que les numsamples pourraient dépasser INTMAX - si vous vous inquiétez vous pourriez employer un unsigned long long. Ou utiliser un membre de données bool supplémentaire pour enregistrer quand le conteneur est rempli tout en cyclant numsamples autour du tableau (mieux renommé quelque chose d'inoffensif comme pos). Répondue 12 juin à 5:19 on suppose que l'opérateur quotvoid (échantillon T) est effectivement opérateur quotvoid (T échantillon) quot. Ndash oPless Jun 8 14 at 11:52 oPless ahhh. Bien repéré. En fait, je voulais qu'il soit vide opérateur () (T échantillon), mais bien sûr, vous pouvez utiliser n'importe quelle note que vous avez aimé. Correction, merci. Ndash Tony D Jun 8 14 à 14:27


No comments:

Post a Comment