J'ai essentiellement un tableau de valeurs comme ceci: Le tableau ci-dessus est simplifié, Im collectionner 1 valeur par milliseconde dans mon code réel et j'ai besoin de 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. Réponse 2017 Stack Exchange, IncMarch 29th, 2014 par Ryan Hamilton Let8217s regarder comment écrire en moyenne mobile analytics en q pour la base de données kdb. Comme exemple de données (mcd. csv), nous allons utiliser les données sur les cours des actions pour McDonalds MCD. Le code ci-dessous téléchargera les données de stock historiques pour le MCD et les placera dans le tableau t: Moyenne mobile simple La moyenne mobile simple peut être utilisée pour lisser les données fluctuantes afin d'identifier les tendances et les cycles globaux. La moyenne mobile simple est la moyenne des points de données et pondère également toutes les valeurs dans le calcul. Par exemple, pour trouver le cours moyen d'un stock pour les dix derniers jours, nous ajoutons simplement le prix quotidien pour ces dix jours et diviser par dix. Cette fenêtre de taille dix jours se déplace ensuite à travers les dates, en utilisant les valeurs dans la fenêtre pour trouver la moyenne. Here8217s le code en kdb pour la moyenne mobile de 1020 jours et le graphique résultant. La moyenne mobile exponentielle est et comment le calculer Un des problèmes avec la moyenne mobile simple est qu'il donne chaque jour une pondération égale. À de nombreuses fins, il est plus logique de donner aux jours plus récents une pondération plus élevée, une méthode de faire cela est en utilisant la moyenne mobile exponentielle. La forme la plus simple de lissage exponentiel est donnée par la formule: où est le facteur de lissage, et 0 Ce tableau montre comment les différents poids sont calculés à partir des valeurs 1,2,3 , 4,8,10,20 et un facteur de lissage de 0,7. (Feuille de calcul Excel) Pour effectuer ce calcul dans kdb, nous pouvons faire ce qui suit: (Ce code a été initialement publié dans la liste de courrier électronique de google par Attila, la discussion complète peut être trouvée ici) Cet adverbe backslash fonctionne comme La syntaxe alternative généralise aux fonctions de 3 arguments ou plus où le premier argument est utilisé comme valeur initiale et les arguments sont des éléments correspondants des listes: Graphique Moyenne Mouvement Exponentiel Finalement, nous prenons notre formule et l'appliquons à nos données sur les cours boursiers, ce qui nous permet de voir la moyenne mobile exponentielle Pour deux facteurs de lissage différents: Graphique de prix des actions moyennes mobiles exponentielles produites à l'aide de qStudio Comme vous pouvez le voir avec l'EMA, nous pouvons hiérarchiser les valeurs plus récentes en utilisant un facteur de lissage choisi pour décider de l'équilibre entre les données récentes et historiques. La rédaction d'analyses kdb telles que Moyenne mobile exponentielle est couverte dans notre cours de formation kdb. Nous organisons régulièrement des formations à Londres, New York. Asie ou notre cours en ligne kdb est disponible pour commencer dès maintenant. 1 Response to 8220Exponential Moving Average EMA en Kdb8221 Merci Ryan, c'est très utile. Mais je pense qu'il ya une erreur typographique dans la définition ema8217s, devrait être: ema: Méthode moyenne mobile xyJava Si vous recherchez un EMA qui est optimisé pour les données en streaming, provenant d'un fichier ou service de citations, la classe d'exemple suivante vous fera bien , Par opposition à l'utilisation de calculs de force brute. Cette approche est particulièrement utile si vous traitez des données en temps réel. Les EMA, un cas particulier de moyennes mobiles pondérées, ont l'avantage que la pondération relative pour chaque période successive diminue d'un facteur constant f 2 (N1), N étant le nombre de périodes sur lesquelles l'EMA doit être appliquée. La classe d'exemple suivante implémente cette nature itérative de l'EMA et minimise les exigences de calcul par rapport aux données brutes, c'est-à - Ou des méthodes de post-traitement. Private int numPeriods 0 private int totalPeriods 0 privé double runningEMA 0.0 privé double facteur 0.0 public EMA (int numPeriods) this. numPeriods numPeriods factor 2.0 (numPeriods 1.0) Réinitialiser les calculs pour générer EMA pour la période donnée. Public void reset (int numPeriods) Retourne EMA pour la période définit pendant le constructeur. Si les périodes traitées sont inférieures à la plage EMA, zéro est renvoyé. Public double calculer (double prix) runningEMA facteurprice (1 facteur) runningEMA if (totalPeriods lt numPeriods) D'où proviennent les données de prix et ce que vous faites avec les résultats de l'EMA, c'est à vous. Par exemple, si vous avez les données de prix dans un tableau et souhaitez calculer un EMA dans un autre tableau, l'extrait suivant fonctionnera: les prix doubles. Source de calculs, fichier ou service de citation double ema nouveau doubleprices. length EMA ema nouveau EMA (50) 50 EMA période pour (int idx0 iltprices. length idx) emaidx ema (pricesidx) Bonne chance et meilleurs voeux pour votre projet.
No comments:
Post a Comment