Saturday 25 November 2017

Exponentiell Gewichtet Gleitender Durchschnitt Algorithmus


Ich möchte einen iterativen Algorithmus implementieren, der den gewichteten Durchschnitt berechnet. Das spezifische Gewicht Gesetz spielt keine Rolle, aber es sollte in der Nähe von 1 für die neuesten Werte und in der Nähe von 0 zu den ältesten. Der Algorithmus sollte iterativ sein. D. h. es sollte sich nicht an alle vorherigen Werte erinnern. Es sollte nur einen neuesten Wert und irgendwelche aggregative Informationen über Vergangenheit, wie vorherige Werte des Durchschnitts, Summen, Zählungen etc. wissen. Zum Beispiel kann der folgende Algorithmus sein: Es wird exponentiell abnehmende Gewicht geben, was nicht gut sein kann. Ist es möglich, Schritt abnehmende Gewicht oder etwas zu haben Die Voraussetzungen für das Wiegen des Gesetzes sind: 1) Das Gewicht verringert sich in die Vergangenheit 2) Ich habe eine mittlere oder charakteristische Dauer, so dass Werte älter diese Dauer ist viel weniger als neuere 3) I Sollte in der Lage sein, diese Dauer zu setzen, brauche ich folgendes. Angenommen, vi sind Werte, wobei v1 die erste ist. Angenommen, wi sind Gewichte. Aber wO ist das LETZTE. Also, nach dem ersten Wert kam ich den ersten Durchschnitt Nachdem der zweite Wert v2 kam, hätte ich durchschnittlich Mit dem nächsten Wert sollte ich beachten, dass das Gewichtsprofil sich mit mir bewegt, während ich die Wertfolge verschiebe. I. e. Jeder Wert hat nicht sein eigenes Gewicht die ganze Zeit. Mein Ziel ist es, dieses Gewicht zu senken, während es vorbei geht. Gt Aber meine Aufgabe ist es, den Durchschnitt neu berechnet zu haben, jedes Mal, wenn neuer Wert mit alten Werten wieder aufgenommen wird. OP Ihre Aufgabe ist fast immer unmöglich, auch mit außergewöhnlich einfachen Gewichtungsschemata. Sie bitten, mit O (1) Speicher, Ertragsdurchschnitte mit einem sich ändernden Gewichtungsschema. Zum Beispiel, da neue Werte eingegangen werden, für einige fast willkürlich ändernde Gewichtsfolge. Dies ist aufgrund der Injektivität unmöglich. Sobald Sie die Zahlen zusammen verschmelzen, verlieren Sie eine riesige Menge an Informationen. Zum Beispiel, auch wenn Sie das Gewicht Vektor hatte. Sie konnten den ursprünglichen Wertvektor nicht wiederherstellen, oder umgekehrt. Es gibt nur zwei Fälle, an die ich denken kann, wo man damit weitermachen könnte: Konstante Gewichte wie 2,2,2. 2: Dies entspricht einem Online-Mittelungsalgorithmus, den Sie nicht wollen, weil die alten Werte nicht neu aufgezeichnet werden. Die relativen Gewichte der vorherigen Antworten ändern sich nicht. Zum Beispiel könnten Sie Gewichte von 8,4,2,1 machen. Und füge ein neues Element mit beliebigem Gewicht hinzu. 1. aber du musst alle vorherigen durch den gleichen multiplikativen Faktor wie 16,8,4,21 erhöhen. So fügen Sie bei jedem Schritt ein neues willkürliches Gewicht hinzu und eine neue willkürliche Reskalierung der Vergangenheit, so dass Sie 2 Freiheitsgrade haben (nur 1, wenn Sie Ihr Punktprodukt normalisieren müssen). Die Gewicht-Vektoren, die du bekommst, würden so aussehen: So kann jedes Gewichtungsschema, das du so aussehen möchtest, das funktionieren (es sei denn, du musst das Ding durch die Summe der Gewichte normalisieren, in diesem Fall musst du dann den neuen Durchschnitt durch das neue teilen Summe, die man berechnen kann, indem man nur O (1) Speicher hält). Lediglich den vorherigen Durchschnitt durch die neuen s (die implizit über das Dot-Produkt in die Gewichte verteilen) vervielfachen und den neuen wnewValue anhängen. Antwortete Mar 29 12 at 21:27 Hier vermutlich ich will, dass die Gewichte auf 1 summieren. Solange man ein relatives Gewicht generieren kann, ohne dass es sich in der Zukunft ändert, können Sie am Ende mit einer Lösung, die dieses Verhalten nachahmt. Das heißt, nehmen Sie an, dass Sie Ihre Gewichte als Sequenz definiert und die Eingabe als Sequenz definiert haben. Betrachten wir die Form: sum (s0i0 s1i1 s2i2. Snin) sum (s0 s1 s2. Sn). Beachten Sie, dass es trivial möglich ist, dies inkrementell mit ein paar Aggregationszählern zu berechnen: Natürlich berechnenWeightFromCounter () in diesem Fall sollte keine Gewichte erzeugen, die zu einem Summen - der Trick hier ist, dass wir durchschnittlich durch Division durch die Summe der Gewichte So dass am Ende die Gewichte praktisch zu einem zu summieren. Der eigentliche Trick ist, wie Sie berechnenWeightFromCounter (). Sie könnten einfach den Zähler selbst zurückgeben, zum Beispiel, aber beachten Sie, dass die letzte gewichtete Zahl wäre nicht in der Nähe der Summe der Zähler unbedingt, so können Sie nicht am Ende mit den genauen Eigenschaften, die Sie wollen. (Es ist schwer zu sagen, da, wie erwähnt, du hast ein ziemlich offenes Problem hinterlassen.) Antwortete Mar 28 12 um 21:45 Das Problem ist, dass sich die Gewichte mit jedem neuen Wert ändern. In deinem Fall sind sie nicht. Ndash Suzan Cioc Mar 29 12 um 14:43 Die tatsächlichen Gebrauchsgewichte ändern sich mit jedem neuen Wert - die Ziffern werden durch eine sukzessiv größere Zahl geteilt, wodurch erzwingt, dass die tatsächlichen verwendeten Gewichte immer auf 1. ndash Kaganar Mar 29 12 summieren Um 14:45 Dies ist zu lang, um in einem Kommentar zu posten, aber es kann nützlich sein, zu wissen. Angenommen, Sie haben: w0vn. Wnv0 (gut nennen diese w0..nvn..0 kurz) Dann ist der nächste Schritt: w0vn1. Wn1v0 (und das ist w0..n1vn1..0 kurz) Das heißt, wir brauchen einen Weg, um w1..n1vn..0 aus w0..nvn..0 zu berechnen. Es ist sicher möglich, dass vn..0 0. 0, z, 0. 0 ist, wobei z an irgendeiner Stelle x ist. Wenn wir keine zusätzliche Speicherung haben, dann ist f (zw (x)) zw (x 1) wobei w (x) das Gewicht für die Stelle x ist. Umreißen der Gleichung, w (x 1) f (zw (x)) z. Nun ist w (x 1) besser für eine Konstante x konstant, also f (zw (x)) z besser konstant sein Daher muß f sich ausbreiten - das heißt f (zw (x)) zf (w (x)). Aber auch hier haben wir ein Problem. Beachten Sie, dass, wenn z (die eine beliebige Zahl sein könnte) durch f ausbreiten kann. Dann kann w (x) sicherlich. Also ist f (zw (x)) w (x) f (z). Somit ist f (w (x)) w (x) f (z). Aber für eine konstante x. W (x) ist konstant, und so ist f (w (x)) besser auch konstant. W (x) ist konstant, also ist f (z) besser konstant, so dass w (x) f (z) konstant ist. Somit ist f (w (x)) w (x) c, wobei c eine Konstante ist. Also, f (x) cx wobei c eine Konstante ist, wenn x ein Gewichtswert ist. Das heißt, jedes Gewicht ist ein Vielfaches des vorherigen. So nehmen die Gewichte die Form w (x) mbx an. Beachten Sie, dass dies die einzige Information f hat, ist der letzte aggregierte Wert. Beachten Sie, dass Sie irgendwann auf diesen Fall reduziert werden, es sei denn, Sie sind bereit, eine nicht konstante Menge an Daten zu speichern, die Ihre Eingabe repräsentieren. Sie können nicht einen unendlichen Längenvektor von reellen Zahlen mit einer reellen Zahl darstellen, aber Sie können sie irgendwie in einer konstanten, endlichen Menge an Speicherung annähern. Aber das wäre nur eine Annäherung. Obwohl ich es nicht bewiesen habe, ist es meine Schlussfolgerung, dass das, was Sie wollen, unmöglich ist, mit einem hohen Maß an Präzision zu tun, aber Sie können in der Lage sein, log (n) Raum (das kann auch O (1) für viele sein Praktische Anwendungen), um eine Qualitätsnäherung zu erzeugen. Sie können noch weniger nutzen. Antwortete Mar 29 12 um 23:01 Ich habe versucht, praktisch etwas zu schreiben (in Java). Wie gesagt, Ihr Ziel ist nicht erreichbar. Sie können nur durchschnittlich von einer Anzahl von zuletzt gespeicherten Werten zählen. Wenn Sie nicht genau sein müssen, können Sie die älteren Werte approximieren. Ich habe versucht, es zu tun, indem ich die letzten 5 Werte genau und ältere Werte nur von 5 Werten, erinnert an die letzten 5 SUMs. Dann ist die Komplexität O (2n) für die Erinnerung an die letzten nnn-Werte. Das ist eine sehr grobe Annäherung. Sie können die Arraygrößen lastValues ​​und lasAggregatedSums ändern, wie Sie möchten. Sehen Sie sich dieses ascii-artiges Bild an, das versucht, ein Diagramm der letzten Werte anzuzeigen, und zeigt an, dass die ersten Spalten (ältere Daten) als aggregierter Wert (nicht einzeln) gespeichert werden und nur die frühesten 5 Werte einzeln gespeichert werden. Herausforderung 1. Mein Beispiel zählt keine Gewichte, aber ich denke, es sollte nicht ein Problem für Sie sein, um Gewichte für die lastAggregatedSums entsprechend hinzuzufügen - das einzige Problem ist, dass wenn Sie niedrigere Gewichte für ältere Werte wünschen, wäre es schwieriger, weil das Array sich dreht Es ist nicht einfach zu wissen, welches Gewicht für welches Array-Mitglied. Vielleicht kannst du den Algorithmus ändern, um immer Werte im Array zu verschieben, anstatt zu drehen. Dann ist das Hinzufügen von Gewichten kein Problem. Herausforderung 2. Die Arrays werden mit 0 Werten initialisiert, und diese Werte zählen von Anfang an auf den Durchschnitt, auch wenn wir nicht genug Werte erhalten. Wenn Sie den Algorithmus für lange Zeit laufen, werden Sie wahrscheinlich nicht stören, dass es für einige Zeit am Anfang zu lernen. Wenn Sie dies tun, können Sie eine Änderung hinterlassen -) beantwortet Jan 21 14 um 15:59 Ihre Antwort 2017 Stack Exchange, IncThis Repo bietet exponentiell gewichtete Moving Average Algorithmen oder EWMAs kurz, basierend auf unserem Quantifying Abnormal Behavior Talk. Exponentiell gewichteter bewegter Durchschnitt Ein exponentiell gewichteter gleitender Durchschnitt ist ein Weg, um kontinuierlich eine Art von Durchschnitt für eine Reihe von Zahlen zu berechnen, da die Zahlen ankommen. Nachdem ein Wert in der Reihe dem Durchschnitt hinzugefügt wird, nimmt sein Gewicht im Durchschnitt exponentiell über die Zeit ab. Dies beeinträchtigt den Durchschnitt zu neueren Daten. EWMAs sind aus mehreren Gründen nützlich, vor allem ihre kostengünstigen Rechen - und Speicherkosten sowie die Tatsache, dass sie die jüngste zentrale Tendenz der Wertereihe darstellen. Der EWMA-Algorithmus erfordert einen Zerfallsfaktor, alpha. Je größer das Alpha, desto mehr ist der Durchschnitt in der jüngsten Geschichte voreingenommen. Das Alpha muss zwischen 0 und 1 liegen und ist typischerweise eine ziemlich kleine Zahl, wie z. B. 0,04. Wir werden die Wahl von Alpha später besprechen. Der Algorithmus arbeitet also im Pseudocode: Multiplizieren Sie die nächste Zahl in der Reihe mit alpha. Multiplizieren Sie den aktuellen Wert des Durchschnitts mit 1 minus alpha. Fügen Sie das Ergebnis der Schritte 1 und 2 hinzu und speichern Sie es als den neuen aktuellen Wert des Durchschnitts. Wiederholen Sie für jede Nummer in der Serie. Es gibt spezielle Fallverhalten für die Initialisierung des aktuellen Wertes, und diese variieren zwischen den Implementierungen. Ein Ansatz ist, mit dem ersten Wert in der Reihe zu beginnen, ein anderer ist, die ersten 10 oder so Werte in der Reihe mit einem arithmetischen Mittelwert zu bewerten und dann die inkrementelle Aktualisierung des Durchschnitts zu beginnen. Jede Methode hat Vor-und Nachteile. Es kann helfen, es bildhaft zu betrachten. Angenommen, die Serie hat fünf Zahlen, und wir wählen Alpha, um 0,50 für die Einfachheit zu sein. Heres die Serie, mit Zahlen in der Nachbarschaft von 300. Jetzt können wir den gleitenden Durchschnitt dieser Zahlen nehmen. Zuerst setzen wir den Mittelwert auf den Wert der ersten Zahl. Als nächstes multiplizieren wir die nächste Zahl mit alpha, multiplizieren Sie den aktuellen Wert mit 1-alpha und fügen Sie hinzu, um einen neuen Wert zu erzeugen. Das geht weiter, bis wir fertig sind. Beachten Sie, wie jeder der Werte in der Serie um die Hälfte jedes Mal, wenn ein neuer Wert hinzugefügt wird, und die Oberseite der Balken im unteren Teil des Bildes die Größe des gleitenden Durchschnitts darstellt. Es ist ein geglättetes oder Tiefpass, Durchschnitt der Originalreihe. Betrachten Sie eine feste Größe gleitenden Fenster gleitenden Durchschnitt (nicht ein exponentiell gewichtet gleitenden Durchschnitt), die durchschnittlich über die vorherigen N Proben. Was ist das Durchschnittsalter jeder Probe Es ist N2. Nehmen wir nun an, dass Sie eine EWMA konstruieren möchten, deren Proben das gleiche Durchschnittsalter haben. Die Formel zur Berechnung des dazu benötigten Alphas lautet: alpha 2 (N1). Beweis ist im Buch Produktions - und Betriebsanalyse von Steven Nahmias. So, zum Beispiel, wenn Sie eine Zeitreihe mit Samples einmal pro Sekunde haben, und Sie wollen den gleitenden Durchschnitt über die vorherige Minute erhalten, sollten Sie ein Alpha von .032786885 verwenden. Dies ist übrigens die Konstante Alpha für diese Repositorys 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. Die gegenwärtigen Implementierungen nehmen ein implizites Zeitintervall von 1,0 zwischen jeder hinzugefügten Probe an. Das heißt, der Ablauf der Zeit wird behandelt, als ob es das gleiche wie die Ankunft der Proben ist. Wenn Sie zeitbasierten Zerfall benötigen, wenn die Proben nicht genau in festgelegten Intervallen ankommen, dann wird dieses Paket derzeit nicht Ihre Bedürfnisse unterstützen. Ein SimpleEWMA ist für niedrigen CPU - und Speicherverbrauch ausgelegt. Es wird ein anderes Verhalten als das VariableEWMA aus mehreren Gründen haben. Es hat keine Aufwärmphase und es benutzt einen konstanten Verfall. Diese Eigenschaften lassen es weniger Speicher benötigen. Es wird sich auch anders verhalten, wenn es gleich Null ist, was als uninitialisiert angenommen wird. Wenn also ein Wert wahrscheinlich über die Zeit null wird, dann wird jeder Wert ungleich Null zu einem scharfen Sprung statt einer kleinen Änderung führen. 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 du anfängst, Werte hinzuzufügen. Es wird einen Wert von 0,0 berichten, bis Sie die erforderliche Anzahl von Proben hinzugefügt haben. Es verwendet etwas Speicher, um die Anzahl der hinzugefügten Samples zu speichern. Infolgedessen nutzt es etwas mehr als zweimal das Gedächtnis von SimpleEWMA. Sehen Sie sich die hier angebotene GoDoc-Dokumentation an. Wir akzeptieren nur Pull-Anfragen für kleinere Korrekturen oder Verbesserungen. Dies beinhaltet: Kleine Bugfixes Typos Dokumentation oder Kommentare Bitte öffnen Sie Fragen, um neue Funktionen zu besprechen. Pull-Anfragen für neue Features werden abgelehnt, daher empfehlen wir, das Repository zu forcieren und Änderungen an Ihrer Gabel für Ihren Anwendungsfall vorzunehmen. Dieses Repository ist Copyright (c) 2013 VividCortex, Inc. Alle Rechte vorbehalten. Es ist unter der MIT-Lizenz lizenziert. Bitte beachten Sie die LICENSE-Datei für gültige Lizenzbedingungen. Exploring Die exponentiell gewichtete Moving Average Volatilität ist die häufigste Maßnahme des Risikos, aber es kommt in mehreren Geschmacksrichtungen. In einem früheren Artikel haben wir gezeigt, wie man einfache historische Volatilität berechnet. (Um diesen Artikel zu lesen, siehe Volatilität verwenden, um zukünftiges Risiko zu beurteilen.) Wir haben Googles aktuelle Aktienkursdaten verwendet, um die tägliche Volatilität auf der Grundlage von 30 Tagen Lagerbestand zu berechnen. In diesem Artikel werden wir die einfache Volatilität verbessern und den exponentiell gewichteten gleitenden Durchschnitt (EWMA) diskutieren. Historische Vs. Implizite Volatilität Zuerst können wir diese Metrik in ein bisschen Perspektive bringen. Es gibt zwei breite Ansätze: historische und implizite (oder implizite) Volatilität. Der historische Ansatz geht davon aus, dass Vergangenheit Prolog ist, messen wir die Geschichte in der Hoffnung, dass es prädiktiv ist. Implizite Volatilität hingegen ignoriert die Geschichte, die sie für die Volatilität der Marktpreise löst. Es hofft, dass der Markt am besten weiß und dass der Marktpreis, auch wenn implizit, eine Konsensschätzung der Volatilität enthält. (Für verwandte Lesung siehe die Verwendungen und Grenzen der Volatilität.) Wenn wir uns nur auf die drei historischen Ansätze konzentrieren (links oben), haben sie zwei Schritte gemeinsam: Berechnen Sie die Reihe der periodischen Renditen Bewerben Sie ein Gewichtungsschema Zuerst haben wir Berechnen Sie die periodische Rückkehr. Das ist in der Regel eine Reihe von täglichen Renditen, bei denen jede Rendite in kontinuierlich zusammengesetzten Begriffen ausgedrückt wird. Für jeden Tag nehmen wir das natürliche Protokoll des Verhältnisses der Aktienkurse (d. h. der Preis heute geteilt durch den Preis gestern und so weiter). Dies führt zu einer Reihe von täglichen Renditen, von u i zu u i-m. Je nachdem wie viele Tage (m Tage) wir messen. Das bringt uns zum zweiten Schritt: Hier unterscheiden sich die drei Ansätze. In dem vorherigen Artikel (mit Volatility To Gauge Future Risk), haben wir gezeigt, dass unter ein paar akzeptablen Vereinfachungen, die einfache Varianz ist der Durchschnitt der quadrierten Renditen: Beachten Sie, dass dies summiert jede der periodischen Renditen, dann teilt diese Summe durch die Anzahl der Tage oder Beobachtungen (m). Also, es ist wirklich nur ein Durchschnitt der quadratischen periodischen Rückkehr. Setzen Sie einen anderen Weg, jede quadratische Rückkehr wird ein gleiches Gewicht gegeben. Wenn also Alpha (a) ein Gewichtungsfaktor ist (speziell 1 m), dann sieht eine einfache Varianz so aus: Die EWMA verbessert sich auf einfache Abweichung Die Schwäche dieses Ansatzes ist, dass alle Renditen das gleiche Gewicht verdienen. Gestern (sehr neuere) Rückkehr hat keinen Einfluss mehr auf die Varianz als die letzten Monate zurück. Dieses Problem wird durch die Verwendung des exponentiell gewichteten gleitenden Durchschnitts (EWMA) behoben, bei dem neuere Renditen ein größeres Gewicht auf die Varianz haben. Der exponentiell gewichtete gleitende Durchschnitt (EWMA) führt Lambda ein. Der als Glättungsparameter bezeichnet wird. Lambda muss kleiner als eins sein. Unter dieser Bedingung wird anstelle von gleichen Gewichten jede quadrierte Rendite mit einem Multiplikator wie folgt gewichtet: Zum Beispiel neigt RiskMetrics TM, ein Finanzrisikomanagement-Unternehmen, dazu, ein Lambda von 0,94 oder 94 zu verwenden. In diesem Fall ist das erste ( (1 - 0,94) (94) 0 6. Die nächste quadratische Rückkehr ist einfach ein Lambda-Vielfaches des vorherigen Gewichts in diesem Fall 6 multipliziert mit 94 5,64. Und das dritte vorherige Tagegewicht ist gleich (1-0,94) (0,94) 2 5,30. Das ist die Bedeutung von Exponential in EWMA: jedes Gewicht ist ein konstanter Multiplikator (d. h. Lambda, der kleiner als eins sein muss) des vorherigen Tagegewichts. Dies stellt eine Varianz sicher, die gewichtet oder voreingenommen auf neuere Daten ist. (Um mehr zu erfahren, schau dir das Excel-Arbeitsblatt für Googles-Volatilität an.) Der Unterschied zwischen einfacher Volatilität und EWMA für Google ist unten dargestellt. Die einfache Volatilität wirkt effektiv jede periodische Rendite um 0,196, wie in Spalte O gezeigt (wir hatten zwei Jahre täglich Kursdaten, das sind 509 tägliche Renditen und 1509 0,196). Aber beachten Sie, dass Spalte P ein Gewicht von 6, dann 5.64, dann 5.3 und so weiter zuteilt. Das ist der einzige Unterschied zwischen einfacher Varianz und EWMA. Denken Sie daran: Nachdem wir die ganze Serie (in Spalte Q) zusammengefasst haben, haben wir die Varianz, die das Quadrat der Standardabweichung ist. Wenn wir Volatilität wollen, müssen wir uns daran erinnern, die Quadratwurzel dieser Varianz zu nehmen. Was ist der Unterschied in der täglichen Volatilität zwischen der Varianz und EWMA im Googles-Fall Sein signifikant: Die einfache Varianz gab uns eine tägliche Volatilität von 2,4, aber die EWMA gab eine tägliche Volatilität von nur 1,4 (siehe die Kalkulationstabelle für Details). Anscheinend hat sich die Googles-Volatilität in jüngster Zeit niedergelassen, eine einfache Varianz könnte künstlich hoch sein. Heutige Varianz ist eine Funktion von Pior Days Variance Youll bemerken wir brauchten, um eine lange Reihe von exponentiell abnehmenden Gewichten zu berechnen. Wir werden die Mathematik hier nicht machen, aber eines der besten Features der EWMA ist, dass die ganze Serie bequem auf eine rekursive Formel reduziert: Rekursive bedeutet, dass heutige Varianzreferenzen (d. h. eine Funktion der vorherigen Tagesabweichung) ist. Sie finden diese Formel auch in der Kalkulationstabelle, und sie erzeugt genau das gleiche Ergebnis wie die Langzeitberechnung Es heißt: Die heutige Varianz (unter EWMA) ist gleichbedeutend mit der vulkanischen Varianz (gewichtet durch Lambda) plus gestern quadrierte Rückkehr (gewogen von einem Minus Lambda). Beachten Sie, wie wir nur zwei Begriffe zusammenfügen: gestern gewichtete Varianz und gestern gewichtet, quadratische Rückkehr. Dennoch ist Lambda unser Glättungsparameter. Ein höheres Lambda (z. B. RiskMetrics 94) zeigt einen langsamen Abfall in der Serie an - in relativer Hinsicht werden wir mehr Datenpunkte in der Serie haben und sie werden langsamer abfallen. Auf der anderen Seite, wenn wir das Lambda reduzieren, zeigen wir einen höheren Zerfall an: die Gewichte fallen schneller ab, und als direkte Folge des schnellen Zerfalls werden weniger Datenpunkte verwendet. (In der Kalkulationstabelle ist Lambda ein Eingang, also kannst du mit seiner Empfindlichkeit experimentieren). Zusammenfassung Volatilität ist die momentane Standardabweichung eines Bestandes und die häufigste Risikometrität. Es ist auch die Quadratwurzel der Varianz. Wir können die Abweichung historisch oder implizit (implizite Volatilität) messen. Wenn man historisch misst, ist die einfachste Methode eine einfache Varianz. Aber die Schwäche mit einfacher Abweichung ist, dass alle Renditen das gleiche Gewicht bekommen. So stehen wir vor einem klassischen Kompromiss: Wir wollen immer mehr Daten, aber je mehr Daten wir haben, desto mehr wird unsere Berechnung durch entfernte (weniger relevante) Daten verdünnt. Der exponentiell gewichtete gleitende Durchschnitt (EWMA) verbessert die einfache Varianz durch die Zuordnung von Gewichten zu den periodischen Renditen. Auf diese Weise können wir beide eine große Stichprobengröße verwenden, aber auch ein größeres Gewicht auf neuere Renditen geben. (Um ein Film-Tutorial zu diesem Thema zu sehen, besuchen Sie die Bionische Schildkröte.) Beta ist ein Maß für die Volatilität oder das systematische Risiko eines Wertpapiers oder eines Portfolios im Vergleich zum Markt als Ganzes. Eine Art von Steuern, die auf Kapitalgewinne von Einzelpersonen und Kapitalgesellschaften angefallen sind. Kapitalgewinne sind die Gewinne, die ein Investor ist. Ein Auftrag, eine Sicherheit bei oder unter einem bestimmten Preis zu erwerben. Ein Kauflimitauftrag erlaubt es Händlern und Anlegern zu spezifizieren. Eine IRS-Regel (Internal Revenue Service), die strafrechtliche Abhebungen von einem IRA-Konto ermöglicht. Die Regel verlangt das. Der erste Verkauf von Aktien von einem privaten Unternehmen an die Öffentlichkeit. IPOs werden oft von kleineren, jüngeren Unternehmen ausgesucht. DebtEquity Ratio ist Schuldenquote verwendet, um ein Unternehmen039s finanzielle Hebelwirkung oder eine Schuldenquote zu messen, um eine Person zu messen. Dieses Repo liefert exponentiell gewichtete Moving Average Algorithmen oder EWMAs kurz, basierend auf unserem Quantifying Abnormal Behavior Talk. Ein Bild von einer Katze: Exponentiell gewichtetes bewegendes Mittel Ein exponentiell gewichteter gleitender Durchschnitt ist ein Weg, um eine Art von Durchschnitt für eine Reihe von Zahlen kontinuierlich zu berechnen, da die Zahlen ankommen. Nachdem ein Wert in der Reihe dem Durchschnitt hinzugefügt wird, nimmt sein Gewicht im Durchschnitt exponentiell über die Zeit ab. Dies beeinträchtigt den Durchschnitt zu neueren Daten. EWMAs sind aus mehreren Gründen nützlich, vor allem ihre kostengünstigen Rechen - und Speicherkosten sowie die Tatsache, dass sie die jüngste zentrale Tendenz der Wertereihe darstellen. Der EWMA-Algorithmus erfordert einen Zerfallsfaktor, alpha. Je größer das Alpha, desto mehr ist der Durchschnitt in der jüngsten Geschichte voreingenommen. Das Alpha muss zwischen 0 und 1 liegen und ist typischerweise eine ziemlich kleine Zahl, wie z. B. 0,04. Wir werden die Wahl von Alpha später besprechen. Der Algorithmus arbeitet also im Pseudocode: Multiplizieren Sie die nächste Zahl in der Reihe mit alpha. Multiplizieren Sie den aktuellen Wert des Durchschnitts mit 1 minus alpha. Fügen Sie das Ergebnis der Schritte 1 und 2 hinzu und speichern Sie es als den neuen aktuellen Wert des Durchschnitts. Wiederholen Sie für jede Nummer in der Serie. Es gibt spezielle Fallverhalten für die Initialisierung des aktuellen Wertes, und diese variieren zwischen den Implementierungen. Ein Ansatz ist, mit dem ersten Wert in der Reihe zu beginnen, ein anderer ist, die ersten 10 oder so Werte in der Reihe mit einem arithmetischen Mittelwert zu bewerten und dann die inkrementelle Aktualisierung des Durchschnitts zu beginnen. Jede Methode hat Vor-und Nachteile. Es kann helfen, es bildhaft zu betrachten. Angenommen, die Serie hat fünf Zahlen, und wir wählen Alpha, um 0,50 für die Einfachheit zu sein. Heres die Serie, mit Zahlen in der Nachbarschaft von 300. Jetzt können wir den gleitenden Durchschnitt dieser Zahlen nehmen. Zuerst setzen wir den Mittelwert auf den Wert der ersten Zahl. Als nächstes multiplizieren wir die nächste Zahl mit alpha, multiplizieren Sie den aktuellen Wert mit 1-alpha und fügen Sie hinzu, um einen neuen Wert zu erzeugen. Das geht weiter, bis wir fertig sind. Beachten Sie, wie jeder der Werte in der Serie um die Hälfte jedes Mal, wenn ein neuer Wert hinzugefügt wird, und die Oberseite der Balken im unteren Teil des Bildes die Größe des gleitenden Durchschnitts darstellt. Es ist ein geglättetes oder Tiefpass, Durchschnitt der Originalreihe. Betrachten Sie eine feste Größe gleitenden Fenster gleitenden Durchschnitt (nicht ein exponentiell gewichtet gleitenden Durchschnitt), die durchschnittlich über die vorherigen N Proben. Was ist das Durchschnittsalter jeder Probe Es ist N2. Nehmen wir nun an, dass Sie eine EWMA konstruieren möchten, deren Proben das gleiche Durchschnittsalter haben. Die Formel zur Berechnung des dazu benötigten Alphas ist: alpha 2 (N1). Beweis ist im Buch Produktions - und Betriebsanalyse von Steven Nahmias. So, zum Beispiel, wenn Sie eine Zeitreihe mit Samples einmal pro Sekunde haben, und Sie wollen den gleitenden Durchschnitt über die vorherige Minute erhalten, sollten Sie ein Alpha von .032786885 verwenden. Dies ist übrigens die Konstante Alpha für diese Repositorys 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. Die gegenwärtigen Implementierungen nehmen ein implizites Zeitintervall von 1,0 zwischen jeder hinzugefügten Probe an. Das heißt, der Ablauf der Zeit wird behandelt, als ob es das gleiche wie die Ankunft der Proben ist. Wenn Sie zeitbasierten Zerfall benötigen, wenn die Proben nicht genau in festgelegten Intervallen ankommen, dann wird dieses Paket derzeit nicht Ihre Bedürfnisse unterstützen. Ein SimpleEWMA ist für niedrigen CPU - und Speicherverbrauch ausgelegt. Es wird ein anderes Verhalten als das VariableEWMA aus mehreren Gründen haben. Es hat keine Aufwärmphase und es benutzt einen konstanten Verfall. Diese Eigenschaften lassen es weniger Speicher benötigen. Es wird sich auch anders verhalten, wenn es gleich Null ist, was als uninitialisiert angenommen wird. Wenn also ein Wert wahrscheinlich über die Zeit null wird, dann wird jeder Wert ungleich Null zu einem scharfen Sprung statt einer kleinen Änderung führen. 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 du anfängst, Werte hinzuzufügen. Es wird einen Wert von 0,0 berichten, bis Sie die erforderliche Anzahl von Proben hinzugefügt haben. Es verwendet etwas Speicher, um die Anzahl der hinzugefügten Samples zu speichern. Als Ergebnis verwendet es ein bisschen mehr als zweimal die Erinnerung an SimpleEWMA. Sehen Sie sich die hier angebotene GoDoc-Dokumentation an.

No comments:

Post a Comment