Tuesday, November 22, 2016

Moving Average Rekursiv

Der Hauptfehler in Ihrem Programm ist, dass die rekursive Berechnung falsch ist. Um den Durchschnitt zu berechnen, müssen Sie die Summe aus dem aktuellen Wert und den verbleibenden Werten erhalten. Dann teilen Sie diese Summe durch die Anzahl der Werte. Die Anzahl der Werte ist num. Der aktuelle Wert ist, was calculatenumber () zurückgibt. Die Summe der verbleibenden Werte ist num-1 multipliziert mit dem Mittelwert der verbleibenden Werte. Der Mittelwert der verbleibenden Werte wird durch einen rekursiven Aufruf von average () berechnet. So schreiben wir folgendes: Ein komplettes Programm, das diese Funktion verwendet, könnte so aussehen: Beachten Sie, dass dies kein sehr guter Weg ist, um den Durchschnitt zu berechnen, da Sie die Genauigkeit jedes Mal verlieren, wenn Sie die aktuelle Summe durch num teilen. Wenn dieser Durchschnitt wieder multipliziert wird, wenn der rekursive Aufruf zurückkehrt, werden die signifikanten Stellen, die Sie in der Abteilung verloren haben, nicht wiederhergestellt. Sie zerstören Informationen, indem Sie die Summe dividieren und dann multiplizieren. Für mehr Präzision, würden Sie wollen, um die Summe zu halten, wie Sie durch die Elemente gehen, dann teilen sich am Ende. Ein weiterer Punkt zu betrachten ist, was durch einen gleitenden Durchschnitt gemeint ist. Was wir oben implementiert haben, ist kein gleitender Durchschnitt, sondern ein fester Durchschnitt. Es ist der Durchschnitt eines festen Fensters von Elementen. Wenn Sie das Fenster um eine Position verschieben, müssen Sie alles von vorne beginnen und die Summe erneut berechnen. Der richtige Weg, um ein bewegliches Fenster zu implementieren ist, alle Elemente im Fenster zu verfolgen. Wenn Sie das Fenster um eine Position nach rechts verschieben, entfernen Sie das am weitesten links liegende Element aus dem Fenster und subtrahieren dessen Wert aus der Summe, fügen dann das neue Element am rechten Rand dem Fenster hinzu und addieren dessen Wert zur Summe. Das macht es eine bewegliche Summe. Das Teilen der beweglichen Summe durch die Anzahl der Elemente gibt Ihnen den gleitenden Durchschnitt. Die natürliche Weise, ein sich bewegendes Fenster zu implementieren, ist mit einer Warteschlange, weil Sie dem Kopf neue Elemente hinzufügen und alte Elemente aus dem Schwanz entfernen können. Beantwortet die richtige Weise, ein bewegliches Fenster zu implementieren ist, um alle Elemente im Fenster zu verfolgen. Wenn Sie das Fenster eine Position nach rechts verschieben, entfernen Sie das am weitesten links liegende Element aus dem Fenster und subtrahieren Sie seinen Wert aus dem Sumquot als wäre dies interessiert mich viel und viele Dank ndash cheroky Ihre Antwort 2016 Stack Exchange , Inc Der Wissenschaftler und Ingenieure Leitfaden für digitale Signalverarbeitung Von Steven W. Smith, Ph. D. Ein enormer Vorteil des gleitenden Mittelfilters besteht darin, dass er mit einem sehr schnellen Algorithmus implementiert werden kann. Um diesen Algorithmus zu verstehen, stellen Sie sich vor, ein Eingangssignal, x, durch ein siebenpunktiges gleitendes Durchschnittsfilter zu führen, um ein Ausgangssignal y zu bilden. Nun wird untersucht, wie zwei benachbarte Ausgangspunkte y 50 und y 51 berechnet werden: Es sind fast dieselben Berechnungspunkte x 48 bis x 53 für y 50 und für y 51 zu addieren. Wenn y 50 bereits berechnet wurde Ist der effizienteste Weg zum Berechnen von y 51: Nachdem y 51 unter Verwendung von y 50 gefunden worden ist, kann y 52 aus der Probe y 51 und so weiter berechnet werden. Nachdem der erste Punkt in y berechnet ist, können alle anderen Punkte mit nur einer Addition und Subtraktion pro Punkt gefunden werden. Dies kann in der Gleichung ausgedrückt werden: Beachten Sie, dass diese Gleichung zwei Datenquellen verwendet, um jeden Punkt in der Ausgabe zu berechnen: Punkte von der Eingabe und vorher berechnete Punkte von der Ausgabe. Dies wird als rekursive Gleichung bezeichnet, dh das Ergebnis einer Berechnung wird in zukünftigen Berechnungen verwendet. (Der Begriff rekursive hat auch andere Bedeutungen, vor allem in der Informatik). Kapitel 19 behandelt eine Vielzahl von rekursiven Filtern genauer. Beachten Sie, dass sich das gleitende, durchschnittliche rekursive Filter sehr von den typischen rekursiven Filtern unterscheidet. Insbesondere haben die meisten rekursiven Filter eine unendlich lange Impulsantwort (IIR), bestehend aus Sinusoiden und Exponentialen. Die Impulsantwort des gleitenden Mittelwertes ist ein Rechteckimpuls (endliche Impulsantwort oder FIR). Dieser Algorithmus ist aus mehreren Gründen schneller als andere digitale Filter. Erstens gibt es nur zwei Berechnungen pro Punkt, unabhängig von der Länge des Filterkerns. Zweitens sind Addition und Subtraktion die einzigen mathematischen Operationen, während die meisten digitalen Filter eine zeitaufwändige Multiplikation erfordern. Drittens ist das Indexierungsschema sehr einfach. Jeder Index in Gl. 15-3 durch Addieren oder Subtrahieren von ganzzahligen Konstanten gefunden, die berechnet werden können, bevor die Filterung beginnt (d. h. p und q). Weiter kann der gesamte Algorithmus mit Ganzzahldarstellung durchgeführt werden. Abhängig von der verwendeten Hardware können ganze Zahlen mehr als eine Größenordnung schneller als der Gleitpunkt sein. Überraschenderweise arbeitet die Ganzzahldarstellung besser als der Gleitkommawert mit diesem Algorithmus, zusätzlich zu dem, was schneller ist. Der Rundungsfehler der Gleitpunktarithmetik kann zu unerwarteten Ergebnissen führen, wenn Sie nicht vorsichtig sind. Stellen Sie sich zum Beispiel ein 10.000 Probensignal vor, das mit diesem Verfahren gefiltert wird. Der letzte Abtastwert im gefilterten Signal enthält den akkumulierten Fehler von 10.000 Additionen und 10.000 Subtraktionen. Dies erscheint im Ausgangssignal als Driftversatz. Integers dont haben dieses Problem, weil es keine Round-off-Fehler in der Arithmetik. Wenn Sie mit diesem Algorithmus Fließkommazahlen verwenden müssen, zeigt das Programm in Tabelle 15-2, wie ein doppelter Präzisionsakkumulator verwendet wird, um diese Drift zu eliminieren. Der Wissenschaftler und Ingenieure Leitfaden zur digitalen Signalverarbeitung Von Steven W. Smith, Ph. D. Kapitel 21: Filtervergleich Match 3: Moving Average vs Single Pole Unser dritter Wettbewerb wird ein Kampf der Zeit-Domain-Filter sein. Der erste Kämpfer wird ein durchschnittlicher Filter mit neun Punkten sein. Sein Gegner für die heutige Übereinstimmung wird ein einpoliger rekursiver Filter sein, der die bidirektionale Technik verwendet. Um einen vergleichbaren Frequenzgang zu erreichen, verwendet das Einpolfilter einen Abtastabfall von x 0,70. Die Schlacht beginnt in Abb. 21-6, wobei der Frequenzgang jedes Filters gezeigt ist. Keiner ist sehr beeindruckend, aber natürlich, Frequenztrennung ist nicht das, was diese Filter verwendet werden. Keine Punkte für beide Seiten. Abbildung 21-7 zeigt die Sprungantwort der Filter. In (a) ist die gleitende mittlere Sprungantwort eine gerade Linie, die schnellste Art, sich von einer Ebene zur nächsten zu bewegen. In (b) ist die Sprungantwort des rekursiven Filters glatter, was für einige Anwendungen besser sein kann. Ein Punkt für jede Seite. Diese Filter sind in gleicher Weise auf Leistung abgestimmt und oft wird die Wahl zwischen den beiden auf persönliche Präferenz gemacht. Es gibt jedoch zwei Fälle, in denen ein Filter eine leichte Kante über dem anderen hat. Diese basieren auf dem Kompromiss zwischen Entwicklungszeit und Ausführungszeit. In erster Linie wollen Sie die Entwicklungszeit zu reduzieren und sind bereit, einen langsameren Filter zu akzeptieren. Zum Beispiel könnten Sie eine einmalige Notwendigkeit, ein paar tausend Punkte zu filtern. Da das gesamte Programm in nur wenigen Sekunden läuft, ist es sinnlos, die Optimierung des Algorithmus zu verbringen. Gleitpunkt wird fast sicher verwendet werden. Die Wahl besteht darin, den durch Faltung durchgeführten gleitenden mittleren Filter oder einen einpoligen rekursiven Filter zu verwenden. Der Gewinner ist hier der rekursive Filter. Es wird etwas einfacher zu programmieren und zu ändern, und wird viel schneller ausführen. Der zweite Fall ist genau das Gegenteil Ihr Filter muss so schnell wie möglich arbeiten und Sie sind bereit, die zusätzliche Entwicklungszeit zu verbringen, um es zu bekommen. Beispielsweise könnte dieser Filter ein Teil eines kommerziellen Produkts sein, wobei das Potenzial, millionenfach ausgeführt zu werden, besteht. Wahrscheinlich verwenden Sie ganze Zahlen für die höchstmögliche Geschwindigkeit. Ihre Wahl der Filter wird der gleitende Durchschnitt durch Rekursion durchgeführt werden. Oder das einpolige rekursive Filter, das mit Nachschlagetabellen oder ganzzahliger Mathematik implementiert ist. Der Sieger ist der gleitende Durchschnittsfilter. Es wird schneller und nicht anfällig für die Entwicklung und Ausführung Probleme der Integer-Arithmetik. In den Statistiken ein einfacher gleitender Durchschnitt ist ein Algorithmus, der die ungewichtete Mittel der letzten n Proben berechnet. Der Parameter n wird oft als Fenstergröße bezeichnet, da der Algorithmus als Fenster betrachtet werden kann, das über die Datenpunkte gleitet. Unter Verwendung einer rekursiven Formulierung des Algorithmus wird die Anzahl der Operationen, die pro Probe erforderlich sind, auf eine Addition, eine Subtraktion und eine Division reduziert. Da die Formulierung unabhängig von der Fenstergröße n ist. Die Laufzeitkomplexität ist O (1). D. h. Die rekursive Formel des ungewichteten gleitenden Mittelwertes ist, wobei avg der rollende Mittelwert und x ein Datenpunkt ist. Wenn also das Fenster nach rechts verschoben wird, fällt ein Datenpunkt, der Schwanz, aus und ein Datenpunkt, der Kopf, bewegt sich hinein. Implementierung Eine Implementierung des einfachen gleitenden Durchschnitts muss folgendes berücksichtigen Algorithmusinitialisierung Solange Das Fenster nicht vollständig mit Werten belegt wird, schlägt die rekursive Formel fehl. Lagerung Der Zugriff auf das Heizelement ist erforderlich, was je nach Implementierung eine Speicherung von n Elementen erfordert. Meine Implementierung verwendet die vorgestellte Formel, wenn das Fenster vollständig mit Werten gefüllt wird, und wechselt andererseits auf die Formel, die den Mittelwert aktualisiert, indem die Summe der vorherigen Elemente neu berechnet wird. Beachten Sie, dass dies aufgrund der Gleitpunktarithmetik zu numerischen Instabilitäten führen kann. Was den Speicherverbrauch angeht, verwendet die Implementierung Iteratoren zum Verfolgen von Kopf - und Schwanz-Elementen. Dies führt zu einer Implementierung mit konstantem Speicherbedarf unabhängig von der Fenstergröße. Hier ist die Aktualisierungsprozedur, die das Fenster nach rechts verschiebt. In den meisten Sammlungen werden ihre Enumeratoren ungültig, wenn die zugrundeliegende Sammlung geändert wird. Die Implementierung setzt jedoch auf gültige Enumeratoren. Insbesondere bei streamingbasierten Anwendungen muss die zugrundeliegende Sammlung geändert werden, wenn ein neues Element eintrifft. Eine Möglichkeit, dies zu bewältigen, besteht darin, eine einfache kreisförmige Sammlung von fester Größe der Größe n1 zu erstellen, die ihre Iteratoren niemals ungültig macht und alternativ ein Element hinzufügt und die Verschiebung aufruft. Ich wünschte, ich könnte herausfinden, wie man tatsächlich implementieren, da die Test-Funktion ist sehr verwirrend, me8230 Muss ich Daten in Array konvertieren, dann SMA SMA SMA (20, Array) für eine 20-Periode SMA laufen Wie behandle ich Shift () - Funktion Ist es notwendig, Konstruktoren zu implementieren. (Entschuldigen Sie das Durcheinander). Nein Sie don8217t müssen Ihre Daten in ein Array zu konvertieren, solange Ihre Daten implementiert IEnumerable1 und die Aufzählung Typ ist doppelt. Soweit Ihr privates Messaging betroffen ist, müssen Sie das DataRow zu etwas umwandeln, das von den doppelten Werten aufzählbar ist. Ihr Ansatz funktioniert. Shift, verschiebt das Fenster um eine Position nach links. Für einen Datensatz von etwa 40 Werten und eine 20-stündige SMA haben Sie 21 Positionen das Fenster passt in (40 8211 20 1). Jedes Mal, wenn Sie Shift () aufrufen, wird das Fenster um eine Position nach links verschoben, und Average () gibt die SMA für die aktuelle Fensterposition zurück. Das heißt, der ungewichtete Durchschnitt aller Werte innerhalb des Fensters. Darüber hinaus ermöglicht meine Implementierung, die SMA zu berechnen, auch wenn das Fenster nicht vollständig am Anfang gefüllt ist. Also im Wesentlichen Hope dies hilft. Alle weiteren Fragen COPYRIGHT NOTICE Christoph Heindl und cheind. wordpress, 2009-2012. Unerlaubte Verwendung und / oder Vervielfältigung dieses Materials ohne ausdrückliche und schriftliche Genehmigung von diesem Blog-Autor und / oder Inhaber ist streng verboten. Auszüge und Links können verwendet werden, sofern Christoph Heindl und cheind. wordpress mit entsprechender und konkreter Orientierung zum Originalinhalt volle und klare Gutschrift erteilt werden. Aktuelle Beiträge ArchiveChasing Trends: rekursive gleitende durchschnittliche Handelsregeln und Internet-Aktien Zusammenfassung Die jüngsten Anstieg und Rückgang der Internet-Aktienkurse hat zu populären Eindrücken einer spekulativen Blase im Internet-Sektor geführt. Wir untersuchen, ob Anleger die Dynamik der Internetaktien unter Verwendung einfacher handelsüblicher Handelsregeln ausgenutzt haben. Wir simulieren den technischen Handel mit einer rekursiven Handelsstrategie, die auf über 800 gleitende Durchschnittsregeln angewendet wird. Statistische Inferenz berücksichtigt bedingte Heterosedastizität und gemeinsame Abhängigkeiten. Es wurden keine signifikanten Handelsgewinne gefunden. Die meisten Internet-Aktien verhalten sich wie zufällige Wanderungen, kombiniert mit hoher Volatilität, kann der Grund für die düstere Leistung der gleitenden Durchschnittsregeln sein. Keywords Internet-Bestände Gleitende Durchschnittsregeln Rekursive Strategie Bootstrap JEL-Klassifikation Entsprechender Autor. Tel. 65-6874-6693 Fax: 65-6779-2083. Copyright copyright 2004 Elsevier B. V. Alle Rechte vorbehalten. Cookies werden von dieser Website verwendet. Weitere Informationen finden Sie auf der Cookieseite. Copyright 2016 Elsevier B. V. oder seine Lizenzgeber oder Mitwirkenden. ScienceDirect ist ein eingetragenes Warenzeichen von Elsevier B. V.


No comments:

Post a Comment