Weighted Moving Average Algorithmus
Ich habe eine Zeitreihe von Aktienkursen und möchte den gleitenden Durchschnitt über ein zehnminütiges Fenster berechnen (siehe Grafik unten). Da Preis-Ticks sporadisch auftreten (d. H. Sie sind nicht periodisch), scheint es am schönsten, einen zeitlich gewichteten gleitenden Durchschnitt zu berechnen. In dem Diagramm gibt es vier Preisänderungen: A, B, C und D, wobei die letzteren drei innerhalb des Fensters auftreten. Beachten Sie, dass, weil B nur einige Zeit in das Fenster (z. B. 3 Minuten) auftritt, der Wert von A noch zur Berechnung beiträgt. In der Tat, so weit ich sagen kann, sollte die Berechnung ausschließlich auf den Werten von A, B und C (nicht D) und den Zeitdauern zwischen ihnen und dem nächsten Punkt (oder im Falle von A: die Dauer zwischen dem Start Des Zeitfensters und B). Anfänglich wird D keine Wirkung haben, da seine Zeitwichtung Null ist. Ist das korrekt? Angenommen, das ist richtig, meine Sorge ist, dass der gleitende Durchschnitt mehr als die nicht gewichtete Berechnung (die für den Wert von D sofort Rechnung) lag, aber die nicht gewichtete Berechnung hat seine eigenen Nachteile: A würde Haben so viel Wirkung auf das Ergebnis wie die anderen Preise, obwohl sie außerhalb des Zeitfensters. Eine plötzliche Aufregung von schnellen Preis-Ticks würde stark beeinträchtigen den gleitenden Durchschnitt (obwohl dies vielleicht wünschenswert ist) Kann jeder bieten einen Rat, über welche Ansatz scheint am besten, oder ob theres eine alternative (oder Hybrid-) Ansatz lohnt Überlegung gefragt Apr 14 12 at 21: 35 Ihre Argumentation ist richtig. Was möchten Sie den Durchschnitt verwenden, obwohl ohne zu wissen, dass seine schwer, irgendeinen Rat geben. Möglicherweise wäre eine Alternative, Ihren laufenden Durchschnitt A zu betrachten, und wenn ein neuer Wert V hereinkommt, berechnen Sie den neuen Durchschnitt A, um (1-c) AcV zu sein, wobei c zwischen 0 und 1 ist. Auf diese Weise haben die neueren Zecken Ein stärkerer Einfluss, und die Wirkung der alten Zecken im Laufe der Zeit zerstreut. Man könnte sogar c abhängen von der Zeit seit den vorherigen Zecken (c immer kleiner als die Zecken näher kommen). In dem ersten Modell (Gewichtung) würde der Durchschnitt jede Sekunde unterschiedlich sein (da alte Ablesungen ein geringeres Gewicht und neue Ablesungen höher erhalten), so daß sie sich stets ändern, was nicht wünschenswert sein kann. Mit dem zweiten Ansatz, die Preise machen plötzliche Sprünge, wie neue Preise eingeführt werden und alte verschwinden aus Fenster. Die beiden Vorschläge kommen aus der diskreten Welt, aber Sie könnten eine Inspiration für Ihren speziellen Fall zu finden. Werfen Sie einen Blick auf exponentielle Glättung. In diesem Ansatz stellen Sie den Glättungsfaktor (01) ein, mit dem Sie den Einfluss der letzten Elemente auf den Prognosewert ändern können (ältere Elemente werden exponentiell abnehmende Gewichte zugewiesen): Ich habe eine einfache Animation erstellt, wie die exponentielle Glättung den Verlauf verfolgen würde Eine einheitliche Zeitreihe x1 1 1 1 3 3 2 2 2 1 mit drei verschiedenen: Schauen Sie sich auch einige der Verstärkungstechniken an (siehe die verschiedenen Diskontierungsmethoden) zum Beispiel TD-Learning und Q-Learning. Ja, der gleitende Durchschnitt wird natürlich verzögern. Dies liegt daran, seinen Wert historische Informationen: es fasst Proben des Preises in den letzten 10 Minuten. Diese Art von Durchschnitt ist inhärent laggy. Es hat eine eingebaute in fünf Minuten Versatz (weil eine Box Durchschnitt ohne Offset auf - 5 Minuten basieren würde, auf die Probe zentriert). Wenn der Preis längere Zeit bei A liegt und sich dann einmal um B ändert, dauert es 5 Minuten, bis der Durchschnitt (AB) 2 erreicht ist. Wenn Sie eine Funktion ohne eine Verschiebung in der Domäne durchführen möchten, hat das Gewicht Um gleichmäßig um den Probenpunkt verteilt zu sein. Aber das ist unmöglich, für die Preise in Echtzeit auftreten, da künftige Daten nicht verfügbar ist. Wenn Sie möchten, dass eine neue Änderung, wie D, einen größeren Einfluss haben, verwenden Sie einen Durchschnitt, der ein größeres Gewicht auf die jüngsten Daten oder einen kürzeren Zeitraum oder beides gibt. Eine Möglichkeit, Daten zu glätten, besteht einfach darin, einen einzigen Akkumulator (den geglätteten Schätzer) E zu verwenden und periodische Abtastwerte der Daten S E zu nehmen. E wird wie folgt aktualisiert: Ie. Wird ein Bruchteil K (zwischen 0 und 1) der Differenz zwischen dem aktuellen Preissample S und dem Schätzer E zu E addiert. Angenommen, der Preis sei bei A für eine lange Zeit gewesen, so daß E bei A liegt und sich dann plötzlich ändert Zu B. Der Schätzer beginnt sich in exponentieller Weise zu B zu bewegen (wie Heizkühlung, Ladeentladung eines Kondensators usw.). Am Anfang wird es einen großen Sprung, und dann kleinere und kleinere Schritten. Wie schnell es sich bewegt, hängt von K. Wenn K 0 ist, bewegt sich der Schätzer überhaupt nicht, und wenn K 1 ist, bewegt er sich sofort. Mit K können Sie einstellen, wie viel Gewicht Sie dem Schätzer gegenüber der neuen Probe geben. Mehr Gewicht wird auf neuere Beispiele implizit gegeben, und das Musterfenster erstreckt sich grundsätzlich auf unendlich: E basiert auf jeder Wertprobe, die jemals aufgetreten ist. Obwohl natürlich sehr alte haben keinen Einfluss auf den aktuellen Wert. Eine sehr einfache, schöne Methode. Dies ist die gleiche wie Tom39s Antwort. Seine Formel für den neuen Wert des Schätzers ist (1 - K) E KS. Die algebraisch gleich E K (S - E) ist. Es ist eine quotlineare Blendingfunktion quot zwischen dem aktuellen Schätzer E und dem neuen Abtastwert S, wobei der Wert von K 0, 1 die Mischung steuert. Schreibe es so ist schön und nützlich. Wenn K 0.7 ist, nehmen wir 70 von S und 30 von E, die die gleiche wie die Addition 70 der Differenz zwischen E und S ist zurück zu E. ndash Kaz Apr 14 12 um 22:15 Bei der Expansion Toms Antwort, die Formel (Tt - t n - 1) T, dh a ist ein Verhältnis von Delta der Ankunftszeit über dem Mittelungsintervall v 1 (vorherige Verwendung verwenden), um den Abstand zwischen den Zecken zu formalisieren (enge Zecken haben eine proportional geringere Gewichtung) Punkt) oder v (1 - u) a (lineare Interpolation oder vu (nächster Punkt) Weitere Informationen finden Sie auf Seite 59 des Buches Eine Einführung in die Hochfrequenzfinanzierung. Gewichteter gleitender Durchschnitt Der gewichtete gleitende Mittelalgorithmus glättet die Zeitreihendaten Gewichteter gleitender Durchschnitt (rollierende 3 Perioden) Berechnung Wie bei dem einfachen gleitenden Durchschnittsalgorithmus, gewichtete gleitende Durchschnittanalyse Zeitreihen Daten durch die Schaffung einer Reihe von Mittelwerten für verschiedene Teilmengen von Werten, die in verschiedenen Teilmengen von Perioden gemessen werden. Jedoch werden in diesem Fall die Mittelwerte für die Teilmengen berechnet, indem die Kennzahlenwerte mit vordefinierten Gewichten multipliziert werden und die Summe dieser multiplizierten Werte durch die Summe der Gewichte dividiert wird. Somit wird ein gewichteter Durchschnitt als Ex-post-Prognose für eine feste Anzahl von Perioden berechnet. Als nächsten Schritt verschiebt der Algorithmus die Berechnung eine Periode in die Zukunft, wobei noch m Perioden für die Berechnung berücksichtigt werden. Der gewichtete Durchschnitt der letzten m historischen Perioden wird die Prognose für die erste künftige Periode sein. Jeder historische Wert wird mit dem jeweiligen Gewicht dieser Periode gewichtet. Die resultierende Prognose ist eine konstante Zahl, zu der einige Teilmengen der Zeitreihendaten mehr beitragen als andere. Die Ex-post-Prognose wird daher wie folgt berechnet: Berechnung der verwendeten Ex-post Prognosevariablen: X1, X2. Xn Zeitreihenwerte m die Größe der Teilmenge W1, W2. Wn Gewichte i m. N und 0 lt m n Die Prognose berechnet sich wie folgt: Berechnung der prognostizierten Variablen: X1, X2. Xn Zeitreihenwerte m die Größe der Teilmenge W1, W2. Wn Gewichte i m. N und 0 lt mn Abgesehen von der Spezifizierung der Kennzahlen für die Prognose und die Ex-post-Prognose müssen Sie folgende Einstellungen vornehmen, wenn Sie den gewichteten gleitenden Durchschnittsalgorithmus in Ihrem Modell verwenden möchten: Quelle der Gewichte Die Kennzahl, die verwendet wird Speichern der Gewichtungen, mit denen das System die Zeitreihendaten multiplizieren soll Anzahl der Perioden Die Länge der Teilmengen in der Zeitreihe, für die der gleitende Durchschnitt berechnet wird. Wenn Sie z. B. 3 für diese Einstellung auswählen und die Periodizität auf Monat einstellen, berechnet der Algorithmus den Durchschnitt für die Monate 1, 2 und 3, dann für die Monate 2, 3 und 4 und so weiter innerhalb der Historie Horizont. Berechnung auf zukünftige Perioden verlängern Wenn Sie diese Option auswählen, wird die gewichtete gleitende Durchschnittslogik von den letzten Perioden in der Vergangenheit auf die zukünftigen Perioden übertragen. Weitere Informationen finden Sie in der Beschreibung der gleichen Einstellung in Simple Moving Average. Dieses Repo bietet Exponential Weighted Moving Average-Algorithmen oder EWMAs kurz, basierend auf unserem Quantifying Abnormal Behavior talk. Exponentiell gewichteter gleitender Durchschnitt Ein exponentiell gewichteter gleitender Durchschnitt ist ein Weg, um kontinuierlich einen Durchschnittswert für eine Reihe von Zahlen zu berechnen, wenn die Zahlen ankommen. Nachdem ein Wert in der Reihe dem Durchschnitt hinzugefügt worden ist, nimmt sein Gewicht im Durchschnitt exponentiell über die Zeit ab. Dies verzögert den Durchschnitt auf jüngere Daten. EWMAs sind aus mehreren Gründen von Nutzen, vor allem von ihren kostengünstigen Rechen - und Speicherkosten, sowie der Tatsache, dass sie die jüngste zentrale Tendenz der Wertereihe darstellen. Der EWMA-Algorithmus erfordert einen Abklingfaktor, alpha. Je größer die Alpha, desto mehr ist der Durchschnitt in Richtung der jüngsten Geschichte voreingenommen. Das Alpha muß zwischen 0 und 1 liegen und ist typischerweise eine ziemlich kleine Zahl, wie 0,04. Wir diskutieren die Wahl von alpha später. Der Algorithmus arbeitet also im Pseudocode: Multiplizieren Sie die nächste Zahl in der Reihe mit alpha. Multiplizieren Sie den aktuellen Wert des Durchschnitts um 1 minus alpha. Fügen Sie das Ergebnis der Schritte 1 und 2 hinzu, und speichern Sie es als neuen aktuellen Wert des Durchschnitts. Wiederholen Sie für jede Zahl in der Reihe. Es gibt spezielle Verhaltensweisen für das Initialisieren des aktuellen Wertes, und diese variieren zwischen den Implementierungen. Eine Annäherung ist, mit dem ersten Wert in der Reihe zu beginnen, ist, die ersten 10 oder so Werte in der Reihe unter Verwendung eines arithmetischen Mittelwertes zu messen und dann die inkrementale Aktualisierung des Durchschnittes zu beginnen. Jede Methode hat Vor-und Nachteile. Es kann helfen, ihn bildhaft zu betrachten. Angenommen, die Serie hat fünf Zahlen, und wir wählen alpha 0,50 für die Einfachheit. Heres die Serie, mit Zahlen in der Nähe von 300. Jetzt können wir den gleitenden Durchschnitt dieser Zahlen. Zuerst setzen wir den Mittelwert auf den Wert der ersten Zahl. Als nächstes multiplizieren wir die nächste Zahl mit alpha, multiplizieren den aktuellen Wert mit 1-alpha und addieren sie, um einen neuen Wert zu erzeugen. Das geht weiter, bis wir fertig sind. Beachten Sie, dass jeder der Werte in der Serie jedes Mal um die Hälfte abfällt, wenn ein neuer Wert hinzugefügt wird und der obere Teil der Balken im unteren Teil des Bildes die Größe des gleitenden Durchschnitts darstellt. Es ist ein geglättetes oder Tiefpass-Mittel der ursprünglichen Serie. Man betrachte einen gleitenden gleitenden Durchschnitt mit fester Grße (nicht einen exponentiell gewichteten gleitenden Durchschnitt), der durchschnittlich über den vorherigen N Abtastwerten liegt. Was ist das Durchschnittsalter der einzelnen Proben Es ist N2. Nehmen wir nun an, Sie möchten eine EWMA konstruieren, deren Muster das gleiche Durchschnittsalter haben. Die Formel für die Berechnung des hierfür erforderlichen Alphas lautet: alpha 2 (N1). Beweis ist in dem Buch Production and Operations Analysis von Steven Nahmias. Wenn Sie z. B. eine Zeitreihe mit Samples pro Sekunde haben und den gleitenden Durchschnitt über die vorhergehende Minute erhalten möchten, sollten Sie ein Alpha von .032786885 verwenden. Dies ist übrigens die konstante Alpha für diese Repositories SimpleEWMA verwendet. Dieses Repository enthält zwei Implementierungen des EWMA-Algorithmus mit unterschiedlichen Eigenschaften. Die Implementierungen entsprechen alle der MovingAverage-Schnittstelle und der Konstruktor gibt diesen Typ zurück. Aktuelle Implementierungen gehen von einem impliziten Zeitintervall von 1,0 zwischen jeder hinzugefügten Probe aus. Das heißt, der Ablauf der Zeit wird so behandelt, als sei er der gleiche wie der Eintritt der Proben. Wenn Sie einen zeitbasierten Zerfall benötigen, wenn Proben nicht genau in festgelegten Intervallen ankommen, wird dieses Paket Ihre derzeitigen Bedürfnisse nicht unterstützen. Ein SimpleEWMA ist für geringen CPU - und Speicherverbrauch ausgelegt. Es wird aus verschiedenen Gründen ein anderes Verhalten als das VariableEWMA haben. Es hat keine Aufwärmphase und verwendet einen konstanten Zerfall. Diese Eigenschaften lassen es weniger Speicher. Es wird sich auch anders verhalten, wenn es gleich Null ist, was als uninitialisiert angenommen wird. Wenn also ein Wert wahrscheinlich im Laufe der Zeit tatsächlich Null wird, dann wird ein ungleicher Wert einen scharfen Sprung statt einer kleinen Änderung bewirken. Im Gegensatz zu SimpleEWMA unterstützt dies ein benutzerdefiniertes Alter, das gespeichert werden muss und somit mehr Speicher benötigt. Es hat auch eine Aufwärmzeit, wenn Sie mit dem Hinzufügen von Werten beginnen. Es wird einen Wert von 0,0 melden, bis Sie die erforderliche Anzahl von Samples hinzugefügt haben. Er speichert die Anzahl der hinzugefügten Samples. Infolgedessen verwendet es ein wenig mehr als das Doppelte der Erinnerung an SimpleEWMA. Die GoDoc-generierte Dokumentation finden Sie hier. Wir akzeptieren nur Pull-Anfragen für kleinere Korrekturen oder Verbesserungen. Dies beinhaltet: Kleine Fehlerbehebungen Typos Dokumentation oder Kommentare Bitte öffnen Sie Probleme, um neue Funktionen zu besprechen. Anfragen für neue Features werden abgelehnt, daher empfehlen wir, das Repository zu forkeln und Änderungen an Ihrer Gabel für Ihren Anwendungsfall vorzunehmen. Dieses Repository ist Copyright (c) 2013 VividCortex, Inc. Alle Rechte vorbehalten. Es ist lizenziert unter der MIT-Lizenz. Die Lizenzbedingungen finden Sie in der LIZENZ-Datei.
Comments
Post a Comment