Skip to main content

Weighted Moving Average C


Die unheimliche Art und Weise, wie ein gleitender Durchschnitt den Trend von einer Masse von verwirrenden Messungen freisetzt, lässt sich sehen, indem man den 10 Tage gleitenden Durchschnitt zusammen mit den ursprünglichen täglichen Gewichten, die als kleine Diamanten gezeigt werden, darstellt. Die bisherigen gleitenden Mittelwerte haben für alle Tage im Mittel gleichwertige Bedeutung. Das muss nicht so sein. Wenn Sie darüber nachdenken, macht es nicht viel Sinn, vor allem, wenn youre daran interessiert, mit einem längerfristigen gleitenden Durchschnitt zu glätten zufällige Beulen in den Trend. Angenommen, youre mit einem 20 Tage gleitenden Durchschnitt. Warum sollte Ihr Gewicht vor fast drei Wochen gleichermaßen relevant sein, um den aktuellen Trend als Ihr Gewicht an diesem Morgen Verschiedene Formen der gewichteten gleitenden Durchschnitte wurden entwickelt, um diesen Einwand zu lösen. Anstatt nur die Messungen für eine Folge von Tagen aufzuaddieren und durch die Anzahl der Tage zu teilen, wird in einem gewichteten gleitenden Durchschnitt jede Messung zunächst mit einem Gewichtungsfaktor multipliziert, der sich von Tag zu Tag unterscheidet. Die endgültige Summe wird nicht durch die Anzahl der Tage geteilt, sondern durch die Summe aller Gewichtungsfaktoren. Wenn größere Gewichtungsfaktoren für neuere Tage und kleinere Faktoren für Messungen weiter zurück in der Zeit verwendet werden, wird der Trend mehr auf neue Änderungen ansprechen, ohne die Glättung eines gleitenden Durchschnitts zu opfern. Ein ungewichteter gleitender Durchschnitt ist einfach ein gewichteter gleitender Durchschnitt mit allen Gewichtsfaktoren gleich 1. Sie können beliebige Gewichtsfaktoren verwenden, die Sie mögen, aber ein bestimmter Satz mit dem jawbreaking monicker Exponential Smoothed Moving Average hat sich in Anwendungen von Luftverteidigungsradar als nützlich erwiesen Zum Handel der Chicago Schweinebauchmarkt. Wir können es auch an unseren Bäuchen arbeiten. Dieser Graph vergleicht die Gewichtungsfaktoren für einen exponentiell geglätteten 20 Tage gleitenden Durchschnitt mit einem einfachen gleitenden Durchschnitt, der jeden Tag gleichmäßig gewichtet. Exponentielle Glättung gibt die heutige Messung zweimal die Bedeutung, die der einfache Durchschnitt würde es zuweisen, gestern Messung ein wenig weniger als das, und jeden aufeinander folgenden Tag weniger als sein Vorgänger mit Tag 20 trägt nur 20 so viel zum Ergebnis wie mit einem einfachen gleitenden Durchschnitt. Die Gewichtungsfaktoren in einem exponentiell geglätteten gleitenden Durchschnitt sind aufeinanderfolgende Potenzen einer Zahl, die Glättungskonstante genannt wird. Ein exponentiell geglättetes gleitendes Mittel mit einer Glättungskonstanten von 1 ist identisch mit einem einfachen gleitenden Durchschnitt, da 1 bis zu einer beliebigen Leistung 1 ist. Glättungskonstanten kleiner 1 gewichten jüngere Daten stärker, wobei die Vorspannung zu den jüngsten Messungen als Glättung ansteigt Konstant auf Null ab. Wenn die Glättungskonstante 1 übersteigt, werden ältere Daten stärker gewichtet als die jüngsten Messungen. Dieses Diagramm zeigt die Gewichtungsfaktoren, die sich aus unterschiedlichen Werten der Glättungskonstante ergeben. Man beachte, wie die Gewichtungsfaktoren alle 1 sind, wenn die Glättungskonstante gleich 1 ist. Wenn die Glättungskonstante zwischen 0,5 und 0,9 liegt, fällt das Gewicht, das an alte Daten gegeben wird, so schnell weg, verglichen mit neueren Messungen, dass es keine Notwendigkeit gibt, den gleitenden Durchschnitt zu beschränken Eine bestimmte Anzahl von Tagen können wir alle Daten, die wir haben, direkt zurück an den Anfang, und lassen Sie die Gewicht Faktoren aus der Glättung konstant berechnet automatisch verwerfen die alten Daten, da es irrelevant für die aktuelle trend. Ich versuche zu berechnen Der gleitende Durchschnitt eines Signals. Der Signalwert (ein Doppel) wird zu beliebigen Zeiten aktualisiert. Ich bin auf der Suche nach einem effizienten Weg, um seine Zeit gewichteten Durchschnitt über ein Zeitfenster, in Echtzeit zu berechnen. Ich könnte es selbst tun, aber es ist schwieriger als ich dachte. Die meisten der Ressourcen, die ich über dem Internet gefunden habe, berechnen den gleitenden Durchschnitt des periodischen Signals, aber die Mine-Updates zur zufälligen Zeit. Kennt jemand gute Ressourcen für die Der Trick ist die folgende: Sie erhalten Updates zu beliebigen Zeiten über void update (int Zeit, float-Wert). Allerdings müssen Sie auch nachverfolgen, wenn ein Update fällt aus dem Zeitfenster, so dass Sie einen Alarm, der bei der Zeit N, die die vorherige Aktualisierung entfernt wird immer wieder in der Berechnung berücksichtigt. Wenn dies in Echtzeit geschieht, können Sie das Betriebssystem anfordern, einen Aufruf einer Methode void dropoffoldestupdate (int time) aufzurufen, die zum Zeitpunkt N aufgerufen werden soll. Wenn es sich um eine Simulation handelt, können Sie keine Hilfe vom Betriebssystem bekommen und müssen dies tun Tun Sie es manuell. In einer Simulation würden Sie Methoden mit der angegebenen Zeit als Argument aufrufen (was nicht mit der Echtzeit korreliert). Eine vernünftige Annahme ist jedoch, dass die Anrufe so gewartet werden, dass die Zeitargumente zunehmen. In diesem Fall müssen Sie eine sortierte Liste der Alarmzeitwerte pflegen und bei jedem Aktualisierungs - und Leseaufruf überprüfen, ob das Zeitargument größer ist als der Kopf der Alarmliste. Während es größer ist, tun Sie die alarmbezogene Verarbeitung (Drop off der ältesten Aktualisierung), entfernen Sie den Kopf und überprüfen Sie erneut, bis alle Alarme vor der angegebenen Zeit verarbeitet werden. Anschließend den Update-Aufruf durchführen. Ich habe bis jetzt angenommen, dass es offensichtlich ist, was Sie für die tatsächliche Berechnung tun würden, aber ich erarbeiten gerade für den Fall. Ich nehme an, Sie haben eine Methode float read (int Zeit), die Sie verwenden, um die Werte zu lesen. Das Ziel ist, diesen Anruf so effizient wie möglich zu machen. So berechnen Sie den gleitenden Durchschnitt nicht jedes Mal, wenn die Lesemethode aufgerufen wird. Stattdessen müssen Sie den Wert der letzten Aktualisierung oder des letzten Alarms vorberechnen und diesen Wert durch ein paar Gleitkommaoperationen anpassen, um die Zeit seit der letzten Aktualisierung zu berücksichtigen. (D. h. eine konstante Anzahl von Operationen, außer dass möglicherweise eine Liste von aufgestauten Alarmen verarbeitet wird). Hoffentlich ist dies klar - das sollte ein ganz einfacher Algorithmus und sehr effizient sein. Weitere Optimierung. Einer der verbleibenden Probleme ist, wenn eine große Anzahl von Updates innerhalb des Zeitfensters auftreten, dann gibt es eine lange Zeit, für die es weder liest noch Updates, und dann ein Lesen oder Update kommt entlang. In diesem Fall ist der obige Algorithmus ineffizient, wenn der Wert für jeden der Aktualisierungen, die herunterfallen, inkremental aktualisiert wird. Dies ist nicht notwendig, weil wir nur kümmern uns um die letzte Aktualisierung über das Zeitfenster so, wenn es einen Weg, um effizient drop off alle älteren Updates, würde es helfen. Um dies zu tun, können wir den Algorithmus ändern, um eine binäre Suche nach Updates durchzuführen, um das neueste Update vor dem Zeitfenster zu finden. Wenn es relativ wenige Updates gibt, die gelöscht werden müssen, dann kann man den Wert für jedes heruntergelassene Update inkremental aktualisieren. Aber, wenn es viele Updates gibt, die gelöscht werden müssen, dann kann man den Wert vom Kratzer neu berechnen, nachdem er weg von den alten Updates. Anhang auf Inkrementelle Berechnung: Ich sollte klären, was ich meine durch inkrementelle Berechnung oben in den Satz zwicken diesen Wert durch ein paar Gleitkomma-Operationen, um für den Ablauf der Zeit seit dem letzten Update. Initiale nicht-inkrementelle Berechnung: dann über die relevanten Aktualisierungen in der Reihenfolge der zunehmenden Zeit iterieren: movingaverage (sum lastupdate timesincelastupdate) windowlength. Nun, wenn genau ein Update fällt aus dem Fenster, aber keine neuen Updates eintreffen, stellen Sie die Summe als: (beachten Sie, es ist Priorupdate, deren Timestamp geändert, um den Beginn der letzten Fenster beginnt). Und wenn genau ein Update in das Fenster eintritt, aber keine neuen Updates abfallen, passen Sie die Summe als an: Wie offensichtlich sein sollte, ist dies eine grobe Skizze, aber hoffentlich zeigt es, wie Sie den Durchschnitt so halten können, dass es O (1) Operationen pro Update ist Auf amortisierte Basis. Aber beachten Sie weitere Optimierung im vorherigen Absatz. Beachten Sie auch Stabilitätsprobleme, auf die in einer älteren Antwort hingewiesen wird, was bedeutet, dass Gleitkomma-Fehler über eine große Anzahl derartiger Inkrementierungsoperationen akkumulieren können, so dass es eine Abweichung von dem Ergebnis der Vollberechnung gibt, die für die Anwendung signifikant ist. Wenn eine Annäherung OK und theres eine minimale Zeit zwischen Proben ist, könnten Sie versuchen, Super-Sampling. Sie haben ein Array, das gleichmäßig beabstandete Zeitintervalle repräsentiert, die kürzer als das Minimum sind, und zu jedem Zeitpunkt die letzte empfangene Probe speichern. Je kürzer das Intervall, desto näher ist der Mittelwert auf den wahren Wert. Der Zeitraum sollte nicht größer als die Hälfte des Minimums sein, oder es besteht die Möglichkeit, eine Stichprobe zu fehlen. Antwortete Dec 15 11 at 18:12 antwortete 15 Dez, um 22:38 Uhr Danke für die Antwort. Eine Verbesserung, die erforderlich wäre, um tatsächlich Quotecachequot den Wert des Gesamtdurchschnitts, so dass wir don39t Schleife die ganze Zeit. Auch kann es ein kleiner Punkt sein, aber wäre es nicht effizienter, ein deque oder eine Liste zu verwenden, um den Wert zu speichern, da wir davon ausgehen, dass die Aktualisierung in der richtigen Reihenfolge kommen wird. Einfügen wäre schneller als in der Karte. Ndash Arthur Ja, Sie könnten den Wert der Summe zwischenspeichern. Subtrahieren Sie die Werte der Proben, die Sie löschen, fügen Sie die Werte der Proben, die Sie einfügen. Auch, ja, ein dequeltpairltSample, Dategtgt könnte effizienter sein. Ich wählte Karte für Lesbarkeit, und die Leichtigkeit der Aufruf der Karte :: upperbound. Wie immer, schreiben Sie den richtigen Code zuerst, dann Profil und messen inkrementelle Änderungen. Ndash Rob Dez 16 11 um 15:00 Hinweis: Anscheinend ist dies nicht der Weg, um dies zu nähern. Lassen Sie es hier als Referenz auf, was ist falsch mit diesem Ansatz. Überprüfen Sie die Kommentare. AKTUALISIERT - basierend auf Olis Kommentar. Nicht sicher über die Instabilität, dass er aber reden. Verwenden Sie eine sortierte Karte der Ankunftszeiten mit Werten. Bei der Ankunft eines Wertes addieren Sie die Ankunftszeit zur sortierten Karte zusammen mit ihrem Wert und aktualisieren Sie den gleitenden Durchschnitt. Warnung dies ist Pseudocode: Dort. Nicht vollständig ausgefuellt, aber Sie bekommen die Idee. Dinge zu beachten. Wie ich schon sagte ist Pseudocode. Youll Notwendigkeit, eine passende Karte zu wählen. Entfernen Sie nicht die Paare, während Sie iterieren durch, wie Sie den Iterator ungültig machen und müssen wieder neu starten. Siehe Olis Kommentar unten auch. Antwort # 2 am: Dezember 15, 2010, um 12:22 Uhr Dies doesn39t Arbeit: es doesn39t berücksichtigen, welcher Anteil der Fensterlänge jeder Wert für vorhanden ist. Auch dieser Ansatz der Addition und dann Subtraktion ist nur stabil für Ganzzahl-Typen, nicht Floaten. Ndash Oliver Charlesworth OliCharlesworth - sorry Ich habe einige wichtige Punkte in der Beschreibung (doppelt und zeitgewichtet) verpasst. Ich werde aktualisieren. Vielen Dank. Ndash Dennis Dec 15 11 at 12:33 Die Zeitgewichtung ist ein weiteres Problem. Aber das ist nicht das, worüber ich rede. Ich bezog sich auf die Tatsache, dass, wenn ein neuer Wert zuerst das Zeitfenster betritt, sein Beitrag zum Durchschnitt minimal ist. Ihr Beitrag steigt, bis ein neuer Wert eintritt. Ndash Oliver Charlesworth Dez 15 11 at 12:35

Comments

Popular posts from this blog

Forex Grid Master 3 01

Forexgridmaster Zählbare Daten Brief Forexgridmaster wird von uns seit Februar 2013 verfolgt. Im Laufe der Zeit wurde es so hoch wie 818 099 in der Welt eingestuft. Die ganze Zeit war es im Besitz von Oneandone Private Registration von 11 Internet Inc. Es wurde von M gehostet. 11 Internet Inc. und andere. Während 1 1 INTERNET AG sein erster Registrar war, wird es nun auf 11 INTERNET SE verlegt. Forexgridmaster hat einen mittelmäßigen Google-Pagerank und schlechte Ergebnisse in Bezug auf Yandex topischen Zitat-Index. Wir haben festgestellt, dass Forexgridmaster in Bezug auf jedes soziale Netzwerk schlecht sozialisiert ist. Laut Siteadvisor und Google sicher Browsing Analytics, Forexgridmaster ist eine recht sichere Domain ohne Besucher Bewertungen. Weltweite Publikum Es scheint, dass der Verkehr auf dieser Seite zu niedrig ist, um angezeigt zu werden, sorry. Traffic Analysis Forexgridmaster hat 183 Besucher und 550 Seitenaufrufe täglich. Subdomains Traffic Shares Forexgridmaster hat kei...

Option Handel Spiel Theorie

Spieltheorie BREAKING DOWN Spieltheorie Spieltheorie schafft eine Sprache und formale Struktur der Analyse, um logische Entscheidungen in wettbewerbsorientierten Umgebungen zu treffen. Der Begriff Spiel kann irreführend sein. Obwohl Spieltheorie für Freizeitspiele gilt, bedeutet das Spielkonzept einfach jede interaktive Situation, in der unabhängige Akteure mehr oder weniger formale Regeln und Konsequenzen teilen. Die formale Anwendung der Spieltheorie erfordert Kenntnisse über die folgenden Einzelheiten: die Identität der unabhängigen Akteure, ihre Präferenzen, das, was sie wissen, welche strategischen Handlungen sie machen dürfen und wie jede Entscheidung das Spiel beeinflusst. Je nach Modell können verschiedene andere Anforderungen oder Annahmen erforderlich sein. Schließlich wird jeder unabhängige Akteur als rational betrachtet. Spieltheorie hat eine breite Palette von Anwendungen, einschließlich Psychologie, Evolutionsbiologie, Krieg, Politik, Wirtschaft und Wirtschaft. Trotz ihre...

Forex Geld Transfer Uk

Vergleichen Sie internationale Geldtransfer Wie bekommt man den besten internationalen Transfer waren völlig unabhängig Wäre nicht im Besitz von massiven finanziellen Unternehmen, so dass wir nicht haben Aktionäre auf unserem Fall zu verkaufen Sie Dinge, die Sie nicht wollen oder brauchen. Wir geben 1037 unserer Gewinne für wohltätige Zwecke Sie helfen uns, etwas zurück zu guten Ursachen zu geben, indem Sie unsere Website verwenden. Wir geben 1037 unserer Gewinne für wohltätige Zwecke jedes Jahr, weil wir denken, dass es das Richtige zu tun ist. Wir verkaufen nicht Ihre Daten Wir verkaufen nicht Ihre persönlichen Informationen, in der Tat können Sie unsere Website nutzen, ohne es uns zu geben. Wenn Sie Ihre Daten mit uns teilen, versprechen wir, sie sicher zu halten. Wir vergleichen nicht einfach Unternehmen, die uns bezahlen Wir zielen darauf ab, Ihnen die Wahl zu geben und Ihnen zu helfen, Produkte zu vergleichen, egal was du suchst, indem du Firmen einschließst, die uns nicht bezahl...