Tuesday, 21 February 2017

C Code Exponentiel Mobile Moyenne

Les EMA de 12 et 26 jours sont les moyennes à court terme les plus populaires et elles sont utilisées pour créer des indicateurs comme la divergence de convergence moyenne mobile (MACD) et l'oscillateur de prix en pourcentage (PPO). En général, les EMA de 50 et de 200 jours sont utilisés comme signaux d'évolution à long terme. Les commerçants qui utilisent l'analyse technique trouvent des moyennes mobiles très utiles et perspicaces lorsqu'elles sont appliquées correctement, mais créent des ravages lorsqu'elles sont mal utilisées ou mal interprétées. Toutes les moyennes mobiles couramment utilisées dans l'analyse technique sont, par leur nature même, des indicateurs en retard. Par conséquent, les conclusions tirées de l'application d'une moyenne mobile à un graphique de marché particulier devraient être de confirmer un mouvement de marché ou d'indiquer sa force. Très souvent, au moment où une ligne d'indicateurs de la moyenne mobile a fait un changement pour refléter une évolution significative du marché, le point optimal d'entrée sur le marché a déjà dépassé. Un EMA sert à atténuer ce dilemme dans une certaine mesure. Parce que le calcul EMA place plus de poids sur les dernières données, il étreint l'action de prix un peu plus serré et réagit donc plus rapidement. Ceci est souhaitable lorsqu'un EMA est utilisé pour dériver un signal d'entrée de négociation. Interprétation de l'EMA Comme tous les indicateurs de la moyenne mobile, ils sont beaucoup mieux adaptés aux marchés tendances. Lorsque le marché est dans une tendance forte et soutenue à la hausse. La ligne indicatrice EMA affichera également une tendance haussière et vice-versa pour une tendance à la baisse. Un commerçant vigilant ne sera pas seulement attention à la direction de la ligne EMA, mais aussi la relation du taux de changement d'une barre à l'autre. Par exemple, lorsque l'action de prix d'une forte tendance haussière commence à s'écraser et à inverser, le taux de changement de l'EMA d'une barre à l'autre commencera à diminuer jusqu'à ce que la ligne d'indicateur s'atténue et que la vitesse de changement soit nulle. En raison de l'effet retardé, par ce point, ou même quelques bars avant, l'action de prix aurait déjà inversé. Il s'ensuit donc que l'observation d'une diminution constante du taux de variation de l'EMA pourrait elle-même être utilisée comme un indicateur qui pourrait mieux contrer le dilemme causé par l'effet retardé des moyennes mobiles. Utilisations courantes de l'EMA Les EMA sont couramment utilisés en conjonction avec d'autres indicateurs pour confirmer les mouvements significatifs du marché et pour évaluer leur validité. Pour les commerçants qui négocient des marchés intraday et rapide, l'EMA est plus applicable. Très souvent, les commerçants utilisent les EMA pour déterminer un biais de négociation. Par exemple, si un EMA sur un graphique quotidien montre une forte tendance à la hausse, une stratégie des commerçants intraday peut être de négocier uniquement du côté long sur un graphique intraday. Je sais que c'est réalisable avec boost comme par: Mais je voudrais vraiment Éviter d'utiliser le 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 at 14: 27Il est possible d'implémenter une moyenne mobile en C sans la nécessité d'une fenêtre d'échantillons Ive trouvé que je peux optimiser un peu, en choisissant une taille de fenêtre thats une puissance de deux pour permettre bit - changer au lieu de diviser, mais pas besoin d'un tampon serait bien. Existe-t-il un moyen d'exprimer un nouveau résultat de la moyenne mobile uniquement en fonction de l'ancien résultat et du nouvel échantillon Définir un exemple de moyenne mobile, à travers une fenêtre de 4 échantillons pour être: Ajouter un nouvel échantillon e: Une moyenne mobile peut être implémentée récursivement , Mais pour un calcul exact de la moyenne mobile, vous devez vous souvenir de l'échantillon d'entrée le plus ancien dans la somme (c'est-à-dire l'a dans votre exemple). Pour une longueur N moyenne mobile que vous calculez: où yn est le signal de sortie et xn est le signal d'entrée. Eq. (1) peut être écrit récursivement comme So Il faut toujours se souvenir de l'échantillon xn-N pour calculer (2). Comme l'a souligné Conrad Turner, vous pouvez utiliser une fenêtre exponentielle (infiniment longue) qui vous permet de calculer la sortie uniquement à partir de la sortie passée et de l'entrée courante: mais ce n'est pas une moyenne mobile standard (non pondérée) mais une valeur exponentielle (Au moins en théorie) vous n'oubliez jamais rien (les poids sont de plus en plus petits pour les échantillons loin dans le passé). J'ai mis en œuvre une moyenne mobile sans mémoire élément individuel pour un programme de suivi GPS que j'ai écrit. Je commence par 1 échantillon et diviser par 1 pour obtenir le courant avg. J'ajoute ensuite un autre échantillon et divise par 2 la valeur actuelle. Cela continue jusqu'à ce que j'arrive à la longueur de la moyenne. Chaque fois par la suite, j'ajoute dans le nouvel échantillon, obtenez la moyenne et retirez cette moyenne du total. Je ne suis pas un mathématicien, mais cela semblait être une bonne façon de le faire. J'ai pensé que cela transformerait l'estomac d'un vrai mec de maths, mais il s'avère que c'est l'un des moyens acceptés de le faire. Et ça marche bien. Rappelez-vous juste que plus votre longueur est plus lente, il suit ce que vous voulez suivre. Cela peut ne pas importe la plupart du temps, mais en suivant les satellites, si vous êtes lent, le sentier pourrait être loin de la position réelle et il sera mauvais. Vous pourriez avoir un écart entre le sat et les points de fuite. J'ai choisi une longueur de 15 mise à jour 6 fois par minute pour obtenir un lissage adéquat et ne pas trop loin de la position réelle sat avec les points de sentier lissée. Répondu 16 nov 16 à 23:03 initialiser total 0, count0 (chaque fois que vous voyez une nouvelle valeur Puis une entrée (scanf), un add totalValeur, un incrément (comptage), une moyenne de division (totalcount) Ce serait une moyenne mobile Toutes les entrées Pour calculer la moyenne sur les seules 4 dernières entrées, il faudrait 4 variables d'entrée, peut-être copier chaque entrée à une variable d'entrée plus ancienne, puis calculer la nouvelle moyenne mobile comme somme des 4 variables d'entrée, divisée par 4 Bon si toutes les entrées étaient positives pour rendre le calcul moyen répondu Feb 3 15 à 4:06 Cela va effectivement calculer la moyenne totale et PAS la moyenne mobile. 3 15 at 13:53 Votre réponse 2017 Stack Exchange, IncC algorithme de latence nulle exponentielle moyenne mobile Dernière mise à jour: 2012-08-13 J'ai essayé de mettre en œuvre une coupure basse fréquence en c qui prend essentiellement un flux de nombres et lisse La sortie (filtrage de mouvement de haute fréquence), mais il est important que les nombres pondérés avant sont considérés immédiatement comme les données est temps critique (il est de contrôler une base de simulation de mouvement en utilisant la sortie d'un peu de logiciel de jeu). Ive a obtenu un algorithme de moyenne mobile pondérée de travail mais pourrait faire avec quelque chose un peu plus sensible à l'extrémité avant, et j'ai trouvé ceci: - Le pseudo-code y est comme suit: Entrées: Prix (NumericSeries), Période (NumericSimple) Variables: (0), retard (0) si CurrentBar lt 1 commence alors ZLEMA Facteur de prix 2 (Period1) lag (Période-1) 2 fin else begin Facteur ZLEMA (2Price-Pricelag) (1-facteur) ZLEMA1 end Ive translated it in À C et mon code est comme suit: Cependant, il ne semble pas se comporter tout à fait comme l'espère. Il semble être presque là, mais parfois, je obtenir une valeur légèrement inférieure à tous les éléments de la file d'attente (quand ils sont tous plus élevés). Ma file d'attente et le nombre d'éléments sont passés comme paramètres, le plus récent étant à l'avant en tout temps, aussi je passe un compteur d'incrémentation commençant à 0 comme requis par la fonction. Im pas sûr Ive interprété la signification de ZLEMA1 correctement comme il n'est pas clair dans son pseudocode, donc j'ai supposé que ce soit les derniers appels zlema et aussi Im en supposant que le prix signifie réellement Price0. Peut-être que j'ai eu ce tort Est-ce que je suis censé être la copie des valeurs réelles zlema calculé retour à ma file d'attente d'origine avant le prochain appel Je ne changez pas la file d'attente d'origine à tous les autres que simplement déplacer toutes les valeurs un à la fin et insérer le dernier au début . Le code que j'utilise pour faire ceci est: Serait extrêmement reconnaissant si quelqu'un avec une meilleure compréhension des mathématiques pourrait s'il vous plaît santé vérifier cela pour moi de voir si j'ai eu quelque chose légèrement mal Merci si longtemps à l'avance si vous pouvez aider Tout d'abord grâce à tous pour Votre entrée, très appréciée Cela fait sens je devine, donc je suppose que le meilleur que je peux espérer est simplement une moyenne mobile exponentielle, en acceptant il y aura un peu de retard, mais ce sera minimisé par la pondération plus lourde avant que donné en typés pondérés Moyenne mobile J'ai cet algorithme aussi, mais un problème similaire en ce que les valeurs ne semblent pas tout à fait correct (sauf si c'est la nature de la formule). Par exemple, disons que mon tableau contient 16 valeurs, toutes les 0.4775 - la sortie est 0.4983, mais je m'attends à ce qu'il soit 0.4775 Est-ce que cela vous regarde bien. Moyenne mobile exponentielle. Float ema (float vals, int numVals, int currentSample) facteur de flottement statique 0 static float lastema 0 float ema si (currentSample lt 1) ema vals0 facteur 2.0 ((float) numVals) 1.0) else ema (factor vals0) - facteur) lastema) lastema ema return ema Inversement, parfois la sortie est inférieure à chacune des entrées, même si tous sont plus élevés. Il est appelé de la même manière que zlema (.) Ci-dessus, avec un compteur d'incrémentation. La formule et le pseudocode pour celui-ci sont ici: - autotradingstrategy. wordpress20091130exponential-moving-average Merci encore, excuses pour mon malentendu de certaines des bases :( Cordialement, Chris J En ce qui concerne le code que j'ai posté, vous avez raison sur la taille du tableau En ce qui concerne vos questions: 1) La constante de filtre représente une coupure de fréquence. J'ai utilisé un Digital Signal Processing (DSP) pour cette technique. Fr. wikipedia. orgwi kiLow-pas sfilter est une explication simple. Vous voulez la section Réalisation de temps discret. Dans mon cas, le A est le RC-Constant dont ils parlent. Ainsi, la fréquence de coupure est supérieure à 1 (2piA). Si vous n'avez pas une compréhension de la théorie du domaine fréquentiel, cela peut devenir compliqué. Dans votre cas, plus vous faites de A, plus la fréquence que ce filtre va permettre, c'est-à-dire qu'elle lisse la courbe de plus en plus. Plus vous le faites, plus le bruit est permis dans le système. Rappelez-vous que A doit être supérieur ou égal à 1 pour être efficace. J'ai rattaché de nouveau le XLS, cette fois sans les numéros changeants de rand (). Réglez la constante A et regardez comment il quotsmoothsquot (ou des filtres) sur les variations de haute fréquence. 2) Le dernier point du tableau d'entrée a la valeur la plus récente. 3) Il en va de même pour le tableau de sortie. La dernière est la valeur la plus récente. 5) Le NUMVALS est arbitraire. Vous pouvez continuellement ajouter sur le tableau d'entrée et de sortie autant de fois que youd comme et il wouldnt effet le filtre. En particulier, j'ai utilisé 49 points. Mais je peux facilement supprimer les 20 dernières et les 29 premières sorties restent les mêmes. La fonction n'est pas basée sur le nombre de points utilisés. Je voudrais mentionner que j'ai développé cette fonction pour une conversion ponctuelle. Si vous voulez faire une conversion pour la prochaine valeur à la volée, vous pouvez essayer quelque chose de plus simple (comme ci-joint). Encore une fois rouillée sur c. J'espère que c'est juste. La seule chose que vous devez fournir est la constante d'entrée et de filtre. Faites-moi savoir si cela vous aide.


No comments:

Post a Comment