Saturday, 18 February 2017

Moyenne Mobile Exponentielle Php

Je veux calculer la valeur EMA (Exponential Moving Average) en PHP. Ive a essayé avec le code suivant mais son me donnant 500 erreur. PHP: fonction de calcul d'EMA Trader-email essayé avec Googling longtemps mais n'obtenant aucune aide sur ceci en PHP. Donc, je n'ai aucune idée de ce qui doit être fait pour calculer la valeur EMA. Edit-1: Extensions installées Ive installé toutes les extensions nécessaires, Maintenant, je reçois la sortie. Mais il ne semble pas donner une sortie appropriée. Je pense que la fonction PHP pour calculer EMA ne fonctionne pas correctement. Toute aide dans ce serait grandement appreciated. Im essayant de récupérer le dernier EMA d'un grand ensemble de données (15000 valeurs). C'est un algorithme très gourmand en ressources puisque chaque valeur dépend de la précédente. Voici mon code: Ce que j'ai déjà fait: Isoler k de sorte qu'il n'est pas calculé 10000 fois Conserver uniquement la dernière EMA calculée, et ne pas garder tous dans un tableau utiliser pour () au lieu de foreach () Son un tableau de base Cela m'a permis de réduire le temps d'exécution de 2000ms à environ 500ms pour 15000 valeurs Ce qui n'a pas fonctionné: Utilisez SplFixedArray (), ce rasé seulement 10ms d'exécution de 1 000 000 de valeurs Utilisez l'extension PHPTrader. Ce qui renvoie un tableau contenant toutes les EMA au lieu de tout dernier, et son écriture plus lente et en cours d'exécution le même algorithme en C et l'exécuter plus de 2 000 000 de valeurs ne prend que 13ms Donc, évidemment, en utilisant une compilation, la langue de bas niveau semble aider P Where Je devrais aller d'ici Le code sera finalement exécuté sur Ubuntu, donc quelle langue dois-je choisir Will PHP être en mesure d'appeler et de passer un tel argument énorme pour le script demandé Jul 11 ​​14 at 19:21 Clairement la mise en œuvre avec une extension vous donne un Considérable. En outre, le calcul peut être amélioré comme lui-même et que le gain que vous pouvez ajouter dans la langue que vous choisissez. Il est facile de voir que lastEMA peut être calculé comme suit: Ceci peut être réécrit comme suit afin de sortir de la boucle le plus possible: Pour expliquer l'extraction de la k pense que dans la formulation précédente est comme si tous les Les données brutes originales sont multipliées par k alors pratiquement vous pouvez au lieu de multiplier le résultat final. Notez que, réécrit de cette façon, vous avez 2 opérations à l'intérieur de la boucle au lieu de 3 (pour être précis à l'intérieur de la boucle, il ya aussi i incrément, i comparaison avec sizeata et assignation de valeur lastEMA) de cette façon, vous pouvez vous attendre à un Accélération dans la plage entre les 16 et 33. Il ya d'autres améliorations qui peuvent être considérées au moins dans certaines circonstances: Considérez uniquement les dernières valeurs Les premières valeurs sont multipliées plusieurs fois par k1m 1 - k leur contribution peut être peu ou même aller Sous la précision en virgule flottante (ou l'erreur acceptable). Cette idée est particulièrement utile si vous pouvez faire l'hypothèse que les données plus anciennes sont du même ordre de grandeur que la plus récente, car si vous considérez uniquement les dernières n valeurs l'erreur que vous faites est erron EMAofdiscardeddata (1-k) n. Donc, si l'ordre de grandeur est globalement le même, on peut dire que l'erreur relative est relerr err lastEMA EMAofdiscardeddata (1-k) n lastEMA qui est presque égal à simplement (1-k) n. Sous l'hypothèse que lastEMA est presque égale à EMAofdiscardeddata: Supposons que vous pouvez accepter un relerr relatif d'erreur que vous pouvez considérer en toute sécurité seulement les dernières n valeurs où (1 - k) n lt relerr. Signifie que vous pouvez pré-calculer (avant la boucle) n log (relerr) log (1-k) et calculer tout en considérant uniquement les n dernières valeurs. Si l'ensemble de données est très grand, cela peut donner une accélération raisonnable. Considérons que pour les nombres à virgule flottante de 64 bits, vous avez une précision relative (relative à la mantisse) qui est 2-53 (environ 1.1e-16 et seulement 2-24 5.96e-8 pour les nombres à virgule flottante 32 bits), vous ne pouvez donc pas obtenir Mieux que cette erreur relative, si fondamentalement vous ne devriez jamais avoir un avantage dans le calcul de plus de n log (1.1e-16) log (1-k) valeurs. Pour donner un exemple si la gamme 2000 puis n log (1.1e-16) log (1-22001) 36746. Je pense que c'est intéressant de savoir que les calculs supplémentaires seraient perdus à l'intérieur des redondements, il est inutile est mieux de ne pas le faire. Maintenant un exemple pour le cas où vous pouvez accepter une erreur relative plus grande que la précision en virgule flottante relerr 1ppm 1e-6 0.00001 6 chiffres décimales significatifs que vous avez n log (1.1e-16) log (1-22001) 13815 Je pense est tout à fait Peu de nombre par rapport à vos numéros d'échantillons dernière donc dans ce cas, la vitesse pourrait être évidente (Im en supposant que la gamme 2000 est significatif ou élevé pour votre application, mais thi je ne peux pas savoir). Juste quelques autres nombres parce que je ne sais pas quels sont vos chiffres typiques: relerr 1e-3 gamme 2000 n 6907 relerr 1e-3 gamme 200 n 691 relerr 1e-3 gamme 20 n 69 relerr 1e-6 gamme 2000 n 13815 relerr 1e - 6 gamme 200 n 1381 relerr 1e-6 plage 20 n 138 Si l'hypothèse lastEMA presque égal à EMAofdiscardeddata ne peut pas être pris les choses sont moins faciles mais puisque l'avantage cam est significatif, il peut être utile de continuer: nous devons ré-examiner le (1-k) le point central est de calculer lastEMA (1-k), le point central est de calculer lastEMA (last-time) (Par exemple M 1000 ou M 1e6) dans ce cas n lt (log (relerrM)) log (1) est un cas où nous savons a priori que, par exemple, EMAofdiscardeddata lastEMA lt M (par exemple M 1000 ou M 1e6) - k) si vous ne pouvez pas donner de numéro M vous devez trouver une bonne idée de surestimer EMAofdiscardeddata lastEMA un moyen rapide pourrait être de prendre M max (données) min (données) Parallélisation Le calcul peut être réécrit sous une forme Où il est une simple addition de termes indépendants: Donc, si le langage de mise en œuvre supporte la parallélisation, le jeu de données peut être divisé en 4 (ou 8 ou n. Essentiellement le nombre de cœurs CPU disponibles) et il peut être calculé la somme des termes sur chaque morceau en parallèle résumant les résultats individuels à la fin. Je ne vais pas en détail avec cela puisque cette réponse est déjà terriblement longue et je pense que le concept est déjà exprimé. Merci pour cette I39m en utilisant ce sur les données du marché boursier, donc le fait que les données plus anciennes est sur le même ordre de grandeur que les nouvelles données dépend de la période de temps utilisée. Supposons une gamme de 200, il y aura une variation beaucoup plus grande dans les prix sur un laps de temps quotidien (200 jours) que le délai de 5 minutes (16 heures). Je vais expérimenter différents scénarios sur des données réelles et simulées. Sur les nouvelles données, avec une gamme lt 200, j'utilise un jeu de données de 1000 éléments. Mais je fais aussi quelques tests en arrière au cours des dernières années, donc j'ai encore besoin de charger l'ensemble de données. Vous avez aidé pour les deux situations, je vous remercie ndash Lykegenes Jul 16 14 at 15:11 Construire votre propre extension améliore certainement les performances. Voici un bon tutoriel du site Web de Zend. Quelques chiffres de performance: Matériel: Ubuntu 14.04, PHP 5.5.9, Intel Core3.3Ghz, 128 Mo de RAM (c'est un VPS). Avant (PHP uniquement, 16 000 valeurs). 500ms C Extension, 16 000 valeurs. 0,3ms C Extension (100 000 valeurs). 3.7ms C Extension (500.000 valeurs). 28.0ms Mais Im mémoire limitée à ce stade, en utilisant 70MB. Moyenne mobile exponentielle - EMA Les EMA de 12 et 26 jours sont les moyennes à court terme les plus populaires et sont utilisées pour créer des indicateurs comme la moyenne mobile Divergence de convergence (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 une EMA sur un graphique quotidien montre une forte tendance à la hausse, une stratégie de traders intraday peut être de négocier uniquement du côté long sur un graphique intraday.


No comments:

Post a Comment