Saturday, 18 February 2017

Moyenne Mobile Simple C #

Pour obtenir une performance asymptotique de O (n) (comme la solution codée à la main), vous pouvez utiliser la fonction Aggregate comme dans La valeur cumulée (implémentée en tant que type anonyme) contient deux champs: Résultat contient la liste de résultats build up jusque là. Le travail contient les derniers éléments de période-1. La fonction agrégat ajoute la valeur courante à la liste de travail, construit la moyenne courante et l'ajoute au résultat, puis supprime la première valeur (c'est-à-dire la plus ancienne) de la liste de travail. La graine (c'est-à-dire la valeur de départ pour l'accumulation) est construite en mettant les premiers éléments de la période-1 dans le résultat Travailler et initialisant dans une liste vide. En conséquence, l'agrégation commence par la période d'élément (en sautant les éléments de la période-1 au début). En programmation fonctionnelle, c'est un modèle d'utilisation typique pour la fonction d'agrégat (ou de pli), btw. La solution n'est pas fonctionnellement propre en ce que les mêmes objets de liste (travail et résultat) sont réutilisés à chaque étape. Je ne sais pas si cela pourrait causer des problèmes si certains futurs compilateurs essaient de paralléliser la fonction agrégat automatiquement (d'autre part Im aussi pas sûr, si c'est possible après tout.). Une solution purement fonctionnelle devrait créer de nouvelles listes à chaque étape. Notez également que C manque d'expressions de listes puissantes. Dans un pseudocode python-C-mixte hypothétique on pourrait écrire la fonction d'agrégation comme ce qui serait un peu plus élégant à mon humble avis :) Notez le temps de fonctionnement de O (n2). Puisque vous avez besoin de sauter de plus en plus d'éléments à chaque étape (et afaik Skip (i) doit appeler IEnumerator. MoveNext i fois). Voir ma réponse pour une solution en temps O (n). (Je viens de remarquer le commentaire des OP ci-dessous que heshe sera éventuellement obtenir les valeurs d'un DB SQL à l'avenir. Dans ce cas, je serais fortement décourager de cette solution) ndash MartinStettner Mar 3 11 à 0:53 Pour la manière la plus efficace possible Pour calculer une moyenne mobile avec LINQ, vous ne devriez pas utiliser LINQ Au lieu de cela, je propose de créer une classe d'aide qui calcule une moyenne mobile de la manière la plus efficace possible (en utilisant un tampon circulaire et causal moyen mobile filtre), puis une méthode d'extension pour le rendre accessible À LINQ. Premièrement, la moyenne mobile Cette classe fournit une implémentation très rapide et légère d'un filtre MovingAverage. Il crée un tampon circulaire de longueur N et calcule une addition, une soustraction et une multiplication par point de données ajouté, par opposition aux N multiplications par point pour la mise en œuvre de la force brute. Les méthodes d'extension ci-dessus enveloppent la classe MovingAverage et permettent l'insertion dans un flux IEnumerable. Pour ce faire d'une manière plus fonctionnelle, youd besoin d'une méthode de balayage qui existe dans Rx, mais pas dans LINQ. Nous allons regarder comment il ressemblerait si wed ont une méthode de balayage Et voici la méthode de balayage, pris et ajusté à partir d'ici: Cela devrait avoir de meilleures performances que la méthode de force brute puisque nous utilisons un total courant pour calculer le SMA. Pour commencer, nous devons calculer la première période que nous appelons semence ici. Ensuite, chaque valeur subséquente que nous calculons à partir de la valeur de la graine accumulée. Pour ce faire, nous avons besoin de l'ancienne valeur (c'est-à-dire delta) et de la valeur la plus récente pour laquelle on fixe ensemble la série, une fois depuis le début et une fois décalée par le delta. À la fin, nous faisons un certain nettoyage en ajoutant des zéros pour la longueur de la première période et en ajoutant la valeur initiale d'amorçage. A répondu Jun 19 13 à 22: 58A Moyenne mobile simple est une moyenne des données calculées sur une période de temps. La moyenne mobile est l'indicateur de prix le plus utilisé dans les analyses techniques. Cette moyenne peut être utilisée avec n'importe quel prix, y compris Hi, Low, Open ou Close, et peut être appliquée à d'autres indicateurs aussi. Une moyenne mobile lisse une série de données, ce qui est très important dans un marché volatil car il aide à identifier les tendances importantes. Dundas Chart pour Reporting Services a quatre types de moyennes mobiles, y compris Simple, Exponential. Triangulaire. Et pondéré. La différence la plus importante entre les moyennes mobiles ci-dessus est la façon dont ils pondent leurs points de données. Nous vous recommandons de lire la section Utilisation des formules financières avant de continuer. L'utilisation de formules financières fournit une explication détaillée sur l'utilisation des formules et explique également les différentes options disponibles lorsque vous appliquez une formule. FormulaFinancial (FinancialFormula. MovingAverage, 20, série 1: Y2, série 2: Y) Un graphique linéaire est un bon choix lorsque vous affichez une moyenne mobile simple. Interprétation financière: La moyenne mobile est utilisée pour comparer les prix des titres avec leur moyenne mobile. L'élément le plus important utilisé pour calculer la moyenne mobile est une période qui devrait être égale au cycle du marché observé. La moyenne mobile est un indicateur de retard, et sera toujours derrière le prix. Lorsque le prix suit une tendance, la moyenne mobile est très proche du prix des titres. Quand un prix monte, la moyenne mobile restera probablement basse en raison de l'influence des données historiques. Calcul: La moyenne mobile est calculée en utilisant la formule suivante: Dans la formule précédente, la valeur n représente une période de temps. Les périodes les plus courantes sont: 10 jours, 50 jours et 200 jours. Une moyenne mobile se déplace parce que chaque nouveau point de données est ajouté, le point de données le plus ancien est supprimé. Une moyenne mobile simple donne un poids égal à chaque prix de point de données. Cet exemple montre comment calculer une moyenne mobile de 20 jours en utilisant la méthode Formula. J'ai une quantité de données de 4000 de stock, et tring pour calculer la moyenne mobile pour toutes les valeurs de données, mais puisque la moyenne mobile est basée sur les données précédentes et je ne peux pas Calculer le SMA de 15 jours pour les 14 premiers jours, sauter les 14 premiers jours et calculer le SMA sur le reste des données. Et il doit utiliser LINQ pour accomplir. Est-ce que n'importe qui peut donner un échantillons ou un indice comment à l'aide de LINQ pour calculer la moyenne mobile La sortie pour les valeurs moyennes sont toutes autour de 500s je ne comprends vraiment pas comment est-ce possible pour obtenir cette valeur élevée. Déplacement moyenneur avec des sommes tableau: 06072012 562,49 571,72 06082012 565,84 580,32 06112012 568,56 571,17 06122012 569,55 576,16 06132012 570,56 572,16 06142012 570,63 571,53 06152012 571,21 574,13 06182012 572,78 585,78 06192012 573,79 587,41 06202012 574,23 585,74 06212012 574,22 577,67 06222012 575,63 582,10 06252012 576,06 570,77 06262012 576,68 572,03 06272012 576,88 574.50 06282012 576.7 569.05 06292012 576.95 584.00 07022012 578.37 592.52 07032012 579.92 599.41 07032012 581.74 599.41 Modifié par Leemx vendredi 16 novembre 2012 02:59 Proposé par Lisa Zhu Personnel des contingents Microsoft lundi 19 novembre 2012 07:38 linq related (From : Visual C Général) Friday, November 16, 2012 2:42 AM Pour créer une moyenne mobile, je commencerais par créer une plage de 0 à (longueur de la liste de données - longueur de la période de déplacement), puis pour chaque valeur dans la plage Sélectionner les éléments x à x 43 la longueur de la période de déplacement et calculer la moyenne. Tout en un beau LINQ déclaration: Notez que ce n'est pas très efficace, car vous essentiellement itérer sur la liste des données pour chaque valeur dans la gamme .. Hé, regardez Ce système permet des signatures de plus de 60 cha. Modifié par Arno Brouwer Vendredi, Novembre 23, 2012 4:42 PM Marqué comme réponse par Alexander Sun Vendredi, Décembre 07, 2012 2:44 AM vendredi 23 novembre 2012 4:41 PM Toutes les réponses Un exemple de votre déclaration LINQ serait utile. Pour créer une moyenne mobile, je commencerais par créer une plage de 0 à (longueur de la liste de données - longueur de la période de déplacement), puis pour chaque valeur dans la gamme sélectionner les éléments x À x 43 la durée de la période de déplacement et de calculer la moyenne. Tout en un beau LINQ déclaration: Notez que ce n'est pas très efficace, car vous essentiellement itérer sur la liste des données pour chaque valeur dans la gamme .. Hé, regardez Ce système permet des signatures de plus de 60 cha. Modifié par Arno Brouwer Vendredi, Novembre 23, 2012 4:42 PM Marqué comme réponse par Alexander Sun Friday, December 07, 2012 2:44 AM vendredi 23 novembre 2012 16:41 Microsoft effectue un sondage en ligne pour comprendre votre opinion sur le site Web Msdn. Si vous choisissez de participer, le sondage en ligne vous sera présenté lorsque vous quitterez le site Web Msdn. Souhaitez-vous participer Aidez-nous à améliorer MSDN. Visitez notre page UserVoice pour soumettre et voter sur les idées Centres de développement Ressources d'apprentissage


No comments:

Post a Comment