Tuesday 24 January 2017

Exponentielle Gleitende Durchschnittsberechnung C #

Ein Exponential Moving Average ist ein Durchschnitt der Daten, die über einen Zeitraum berechnet werden, in dem die letzten Tage mehr Gewicht erhalten. Der exponentielle gleitende Durchschnitt kann mit jedem Preis verwendet werden, einschließlich eines: Hi, Low, Open und Close, oder es könnte auf andere Indikatoren angewendet werden. Ein exponentieller gleitender Durchschnitt glättet eine Datenreihe, die sehr wichtig in einem volatilen Markt ist, da es hilft, überschüssiges Datenrauschen zu entfernen, so dass wesentliche Trends identifiziert werden können. Dundas Chart für Reporting Services hat vier Arten von gleitenden Durchschnitten: Einfach. Exponentiell. Dreieckig. Und Gewichtet. Der wichtigste Unterschied zwischen den obigen gleitenden Durchschnitten ist, wie sie ihre Datenpunkte gewichten. Wir empfehlen Ihnen, mit den Finanzformeln zu lesen, bevor Sie fortfahren. Mithilfe von Finanzformeln erhalten Sie eine ausführliche Erläuterung, wie Sie Formeln verwenden können, und erläutert auch die verschiedenen Optionen, die Ihnen beim Anwenden einer Formel zur Verfügung stehen. FormulaFinancial (FinancialFormula. ExponentialMovingAverage, 20, Serie 1: Y2, Serie 2: Y) Ein Liniendiagramm ist eine gute Wahl, wenn ein exponentieller gleitender Durchschnitt angezeigt wird. Finanzinterpretation: Der Exponential Moving Average wird verwendet, um einen Wert mit seinem exponentiellen gleitenden Durchschnitt zu vergleichen. Der exponentielle gleitende Durchschnitt gibt mehr Einfluss auf die aktuelleren Preise, und aufgrund dieses Gewichtungsmechanismus wird der gleitende Durchschnitt den Preisen viel schneller folgen als ein einfacher gleitender Durchschnitt. Das wichtigste Element, das bei der Berechnung des gleitenden Durchschnitts verwendet wird, ist die verwendete Zeitdauer. Dieser Zeitraum sollte dem beobachteten Marktzyklus entsprechen. Der Zeitraum beeinflusst den Prozentsatz, der als Gewicht für die letzten Perioden verwendet wird. Der exponentielle gleitende Durchschnitt ist ein nacheilender Indikator, und als solcher wird immer Weg Preis. Wenn der Preis einem Trend folgt, dann wird der exponentielle gleitende Durchschnitt sehr nahe an dem Preis liegen. Wenn ein Preis steigt, dann wird der exponentielle gleitende Durchschnitt höchstwahrscheinlich unter den Preis fallen. Dies ist wegen des Einflusses aus den historischen Daten. Berechnung: Um einen exponentiellen gleitenden Durchschnitt neu zu berechnen, müssen Sie einen Prozentsatz finden, der auf die letzten Tage angewendet werden kann. Der Prozentsatz kann unter Verwendung eines Zeitraums bestimmt werden: Als nächstes wird der exponentielle gleitende Durchschnitt unter Verwendung des heutigen Preises und gestern berechnet. Exponentieller gleitender Durchschnitt: Dieses Beispiel zeigt, wie ein 20-Tage-gleitender Durchschnitt unter Verwendung der Formelmethode berechnet wird, um eine asymptotische Leistung zu erzielen O (n) (wie die handcodierte Lösung tut), können Sie die Aggregate-Funktion wie in Der kumulierte Wert (implementiert als anonymer Typ) enthält zwei Felder: Ergebnis enthält die Ergebnisliste bis so weit. Das Arbeiten enthält die letzten Perioden-1 Elemente. Die Aggregatfunktion fügt den aktuellen Wert der Arbeitsliste hinzu, baut den aktuellen Durchschnitt auf und fügt sie dem Ergebnis hinzu und entfernt dann den ersten (d. H. Ältesten) Wert aus der Arbeitsliste. Das Saatgut (d. h. der Anfangswert für die Akkumulation) wird aufgebaut, indem die ersten Perioden-1-Elemente in die Arbeits-und Initialisierungsergebnis zu einer leeren Liste gebracht werden. Folglich beginnt die Aggregation mit der Elementperiode (durch Überspringen (Perioden-1) - Elemente am Anfang). In der Funktionsprogrammierung ist dies ein typisches Verwendungsmuster für die Aggregat - (oder Falz-) Funktion, btw. Die Lösung ist nicht funktional sauber, da die gleichen Listenobjekte (Arbeit und Ergebnis) in jedem Schritt wiederverwendet werden. Im nicht sicher, wenn das Probleme verursachen könnte, wenn einige zukünftige Übersetzer versuchen, die Aggregate-Funktion automatisch zu parallellisieren (auf der anderen Seite Im auch nicht sicher, wenn das möglich ist, nachdem alle.). Eine rein funktionale Lösung sollte bei jedem Schritt neue Listen anlegen. Beachten Sie außerdem, dass C keine leistungsfähigen Listenausdrücke aufweist. In einigen hypothetischen Python-C-gemischten Pseudocode könnte man die Aggregationsfunktion schreiben, die in meiner bescheidenen Meinung ein wenig eleganter wäre :) Beachte die Laufzeit von O (n2). Da Sie bei jedem Schritt immer mehr Elemente überspringen müssen (und afaik Skip (i) I mal IEnumerator. MoveNext aufrufen muss). Siehe meine Antwort für eine Lösung in O (n) Zeit. (Ich habe gerade bemerkt, die OP-Kommentar unten, dass heshe wird möglicherweise die Werte aus einer SQL-DB in der Zukunft. NDash MartinStettner Mar 3 11 at 0:53 Für die effizienteste Art und Weise möglich Um einen Moving Average mit LINQ zu berechnen, sollten Sie LINQ nicht verwenden Ich schlage vor, eine Helper-Klasse zu erstellen, die einen gleitenden Durchschnitt auf eine möglichst effiziente Weise berechnet (mit einem kreisförmigen Puffer und einem kausalen gleitenden Durchschnittsfilter) und dann eine Erweiterungsmethode Zu LINQ. First up, der gleitende Durchschnitt Diese Klasse bietet eine sehr schnelle und leichte Implementierung eines MovingAverage-Filters. Es erzeugt einen kreisförmigen Puffer der Länge N und berechnet eine Addition, eine Subtraktion und eine Multiplikation pro angehängten Datenpunkt, im Gegensatz zu den N Multiplikations-Adds pro Punkt für die Brute-Force-Implementierung. Die oben genannten Erweiterungsmethoden wickeln die MovingAverage-Klasse und ermöglichen die Einfügung in einen IEnumerable-Stream. Um dies in einer funktionalen Weise zu tun, benötigen Sie eine Scan-Methode, die in Rx, aber nicht in LINQ. Lets schauen, wie es aussehen würde, wenn wed haben eine Scan-Methode Und heres die Scan-Methode, genommen und angepasst von hier: Dies sollte eine bessere Leistung als die Brute-Force-Methode haben, da wir eine laufende Summe verwenden, um die SMA berechnen. Um zu beginnen, müssen wir die erste Periode berechnen, die wir hier Samen nennen. Dann wird jeder nachfolgende Wert aus dem akkumulierten Samenwert berechnet. Dazu benötigen wir den alten Wert (das ist t-delta) und der neueste Wert, für den wir die Serie reihen, einmal von Anfang an und einmal durch das Delta verschoben. Am Ende führen wir einige Bereinigung durch Hinzufügen von Nullen für die Länge der ersten Periode und das Hinzufügen der anfänglichen Seed-Wert. 22 beantwortet 19 13 Jun: 58I haben eine 4000 Menge Daten von Lager und Tring den gleitenden Durchschnitt für alle Datenwerte zu berechnen, aber da der gleitende Durchschnitt auf früheren Daten basiert und ich die 15-Tage-SMA nicht berechnen kann, zum ersten 14 Tage, überspringen Sie die ersten 14 Tage und berechnen die SMA auf den Rest der Daten. Und es ist zu LINQ verwenden, um zu erreichen. Kann jemand eine Probe geben oder Hinweis, wie man mit LINQ zu berechnen gleitenden Durchschnitt Die Ausgabe für die durchschnittlichen Werte sind alle um 500s Ich wirklich nicht verstehen, wie ist, dass möglich, dass hohe Wert zu bekommen. Verschieben Mittelwertbildner mit Summen-Array: 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 06.282.012 576,7 569,05 06.292.012 576,95 584,00 578,37 592,52 07.022.012 07.032.012 579,92 599,41 581,74 599,41 07.032.012 Herausgegeben von Leemx Freitag, 16. November 2012 02.59 Gerührt von Lisa Zhu Microsoft Kontingent Personal Montag, 19. November 2012 07.38 Linq (von : Visual C General) Um einen gleitenden Durchschnitt zu erstellen, würde ich zunächst einen Bereich von 0 bis (Länge der Datenliste - Länge der bewegten Periode) und dann für jeden Wert im Bereich erstellen Elemente x bis x 43 Länge der Bewegungsperiode auswählen und den Mittelwert berechnen. in einer schönen LINQ-Anweisung All: Beachten Sie, dass dies nicht sehr effizient ist, da man im Grunde über die Datenliste iterieren für jeden Wert im Bereich .. Hey, schauen Dieses System ermöglicht Unterschriften von mehr als 60 cha Herausgegeben von Arno Brouwer Freitag November 23, 2012 4:42 PM Als Antwort markiert von Alexander Sun Friday, December 07, 2012 4:41 PM Alle Antworten Eine Probe Ihrer LINQ-Anweisung würde helfen. quotPremature Optimierung ist die Wurzel allen evil. quot - Knuth einen gleitenden Durchschnitt zu erstellen, würde ich beginnen mit einem Bereich von 0 bis zu schaffen (Länge der Datenliste - Länge bewegter Zeit), dann für jeden Wert im Bereich von Auswahlelementen x Bis x 43 Länge der Bewegungsperiode und berechnen den Durchschnitt. in einer schönen LINQ-Anweisung All: Beachten Sie, dass dies nicht sehr effizient ist, da man im Grunde über die Datenliste iterieren für jeden Wert im Bereich .. Hey, schauen Dieses System ermöglicht Unterschriften von mehr als 60 cha Herausgegeben von Arno Brouwer Freitag November 23, 2012 4:42 PM Als Antwort markiert von Alexander Sun Freitag, den 07. Dezember 2012 um 04:41 Uhr Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen Helfen Sie uns, MSDN zu verbessern. Besuchen Sie unsere UserVoice Seite, um auf Ideen Dev Centers Lernressourcen vorzulegen und abzustimmen


No comments:

Post a Comment