Monday, March 13, 2017

Berechnen Exponentiell Gleitend Durchschnittlich In Sql

Ich versuche, einen exponentiellen gleitenden Durchschnitt (EMA) auf postgres zu implementieren, aber da ich die Dokumentation überprüfe und darüber nachdenke, desto mehr versuche ich das verwirrter ich bin. Die Formel für EMA (x) lautet: Es scheint perfekt für einen Aggregator zu sein, wobei das Ergebnis des zuletzt berechneten Elements genau das ist, was hier zu tun ist. Allerdings erzeugt ein Aggregator ein einziges Ergebnis (wie reduzieren oder falten) und hier benötigen wir eine Liste (eine Spalte) von Ergebnissen (als Karte). Ich habe überprüft, wie Prozeduren und Funktionen funktionieren, aber AFAIK produzieren sie eine einzelne Ausgabe, keine Spalte. Ich habe viele Prozeduren und Funktionen gesehen, aber ich kann nicht herausfinden, wie dies mit der relationalen Algebra interagiert, besonders wenn man so etwas macht, eine EMA. Ich hatte noch kein Glück, die Internets zu suchen. Aber die Definition für eine EMA ist ganz einfach, ich hoffe es ist möglich, diese Definition in etwas zu übersetzen, das in postgres arbeitet und einfach und effizient ist, weil das Umziehen auf NoSQL in meinem Kontext übertrieben wird. Ist das Berechnen der Aggregation, die das Ergebnis in jeder Zeile für jede Unterliste der Eingabedaten erzeugt. Da es so aussieht, dass es den Aggregator bis zur Zeile n verwendet, kehrt das Ergebnis zurück und geht dann in die Zeile 0, um die Aggregation bis zur Zeile n1 zu berechnen Nochmals. Gibt es eine Möglichkeit, die Akkumulation oder eine statische Variable (wie in C) zu verwenden, so dass dies einmal berechnet werden muss Danke. Ndash Trylks Jan 20 12 um 11:59 Nein, es kennt den kumulierten Wert. Wenn Sie die Abfrage mit dem Quoten-Info-Quot-Befehl unkommentiert ausführen, können Sie sehen, dass die Funktion nur einmal für jede Zeilenausgabe aufgerufen wird. Postgresql gibt den Statuswert auf jeder Zeile aus (falls ein finalfunc definiert ist, der aufgerufen wird, den Zustand in einen Ausgangswert umzuwandeln). Ndash araqnid 20. Januar um 12:04 ErwinBrandstetter: Ich habe die meisten Änderungen zurückgestellt - bei dem Format des ersten (Anker-) Teils der Abfrage kann EMA (x1) mit einer einzigen Zeile klar dargestellt werden Corespnds auf die einzelne Zeile definieren sie in der Frage. Im Falle des rekursiven Teils der Abfrage habe ich mn - 1 in der Join - Bedingung verwendet, um die Äquivalenz der Beziehung zu EMA (xn - 1) in der Frage anzuzeigen, obwohl dies weniger performant ist, wenn die Leistung ein ist Problem, das OP kann die Join-Bedingung ändern, um zu sein, wie Sie vorgeschlagen haben. Ndash Mark Bannister Jan 16 12 at 9: 27SQL Server T-SQL Code, um einen Moving Average zu berechnen Von: Dallas Snider Lesen Kommentare Verwandte Tipps: Mehr Funktionen - Benutzerdefinierte UDF Wie kann ich die Daten in einer Spalte mit einem gleitenden Durchschnitt in T glatt - SQL Können Sie bitte durch ein Beispiel in SQL Server mit T-SQL-Code gehen Wie können wir die Ergebnisse validieren Zeitreihen-Daten können inhärent verrauscht sein und ein guter Weg, um die Daten zu glätten, um einen gleitenden Durchschnitt zu berechnen. Es gibt eine Reihe von Möglichkeiten, um einen gleitenden Durchschnitt in T-SQL zu berechnen, aber in diesem Tipp werden wir einen Weg suchen, um einen gleitenden Durchschnitt zu berechnen, der das Mittelungsfenster x Anzahl der Zeilen hinter und x Anzahl der Zeilen vor dem aktuellen setzt Datenzeile Der Vorteil davon ist, dass es keine Verzögerung in der durchschnittlichen Wert zurückgegeben und der gleitende Mittelwert ist auf der gleichen Zeile mit seinem aktuellen Wert. Beginnen wir mit dem Erstellen einer Tabelle und laden einige Daten mit dem T-SQL unten. Wir haben 361 Datenpunkte, die eine laute Sinuswelle erzeugen. Nach dem Laden der Daten führen wir den folgenden T-SQL-Code aus, um alle Spalten zusammen mit dem gleitenden Mittelwert auszuwählen. Im folgenden Code ist die gleitende durchschnittliche Fenstergröße 15 (7 Zeilen vor der aktuellen Zeile, plus die aktuelle Zeile plus die 7 folgenden Zeilen). Der gleitende Durchschnitt der DataValue-Spalte wird als MovingAverageWindowSize15-Spalte zurückgegeben. Die ORDER BY-Klausel ist äußerst wichtig, um die Daten in der ordnungsgemäß sortierten Reihenfolge zu halten. Wir können die Ergebnisse in Excel kopieren und einfügen, um die Berechnung zu bestätigen. Im Bild unten beginnt das Fenster in Zelle C3 und endet bei C17. Der gleitende Durchschnitt, der durch das T-SQL in diesem Tipp berechnet wird, erscheint in der Zelle D10. Der von Excel berechnete Durchschnitt liegt am unteren Ende und entspricht dem Wert in D10. In der folgenden Abbildung sehen wir die ursprünglichen Datenwerte, die in blau aufgezeichnet sind, wobei der gleitende Durchschnitt rot markiert ist. Nächste Schritte Passen Sie die Größe des gleitenden Durchschnittsfensters an, um zu sehen, wie sich das Diagramm ändert. Seien Sie auch sicher, diese anderen Tipps auf T-SQL aus mssqltips auszuprobieren: Letztes Update: 382016Moving Durchschnitt in T-SQL Eine gemeinsame Berechnung in Trendanalyse ist der bewegte (oder rollende) Durchschnitt. Ein gleitender Durchschnitt ist der Durchschnitt der zum Beispiel letzten 10 Zeilen. Der gleitende Durchschnitt zeigt eine glattere Kurve als die tatsächlichen Werte, mehr mit einer längeren Periode für den gleitenden Durchschnitt, was es zu einem guten Werkzeug für die Trendanalyse macht. Dieser Blogpost zeigt, wie man den gleitenden Durchschnitt in T-SQL berechnet. Je nach Version von SQL Server werden verschiedene Methoden verwendet. Die nachstehende Tabelle zeigt den Glättungseffekt (rote Linie) mit einem 200-tägigen gleitenden Durchschnitt. Die Aktienkurse sind die blaue Linie. Der langfristige Trend ist deutlich sichtbar. T-SQL Moving Avergage 200 Tage Die folgende Demonstration erfordert die TAdb-Datenbank, die mit dem hier befindlichen Skript erstellt werden kann. Im kommenden Beispiel werden wir für die letzten 20 Tage einen gleitenden Durchschnitt berechnen. Abhängig von der Version von SQL Server gibt es eine andere Methode, um die Berechnung zu tun. Und wie wir später sehen werden, haben die neueren Versionen von SQL Server Funktionen, die eine viel effektivere Berechnung ermöglichen. SQL Server 2012 und höher Moving Average Diese Version nutzt eine aggregierte Fensterfunktion. Was ist neu in SQL 2012 ist die Möglichkeit, die Größe des Fensters zu beschränken, indem Sie angeben, wie viele Zeilen vor dem Fenster enthalten sollten: Zeilen vor 19, da wir die aktuelle Zeile auch in die Berechnung aufnehmen werden. Wie Sie sehen können, ist die Berechnung des gleitenden Durchschnitts in SQL Server 2012 ziemlich einfach. Die folgende Abbildung zeigt das Fensterprinzip. Die aktuelle Zeile ist mit gelb markiert. Das Fenster ist mit einem blauen Hintergrund markiert. Der gleitende Durchschnitt ist einfach der Durchschnitt von QuoteClose in den blauen Linien: T-SQL Moving Average Fenster. Die Ergebnisse der Berechnungen in älteren Versionen von SQL Server sind gleich, so dass sie nicht wieder angezeigt werden. SQL Server 2005 8211 2008R2 Moving Average Diese Version verwendet einen gemeinsamen Tabellenausdruck. Der CTE ist selbst referenziert, um die letzten 20 Zeilen für jede Zeile zu erhalten: Moving Average vor SQL Server 2005 Die Pre 2005 Version wird eine linke äußere Verknüpfung zu der gleichen Tabelle verwenden, um die letzten 20 Zeilen zu erhalten. Der äußere Tisch kann gesagt werden, das Fenster zu enthalten, dass wir einen Durchschnitt berechnen wollen: Leistungsvergleich Wenn wir die drei verschiedenen Methoden gleichzeitig laufen und den daraus resultierenden Ausführungsplan überprüfen, gibt es einen dramatischen Unterschied in der Leistung zwischen den Methoden: Vergleich von drei Verschiedene Methoden, um gleitenden Durchschnitt zu berechnen Wie Sie sehen können, macht die Fensterfunktion Verbesserungen in SQL 2012 einen großen Unterschied in der Leistung. Wie am Anfang dieses Beitrags erwähnt, werden gleitende Mittelwerte als Werkzeug zur Veranschaulichung von Trends verwendet. Ein gemeinsamer Ansatz ist es, bewegte Durchschnitte unterschiedlicher Längen zu kombinieren, um Veränderungen in den kurz-, mittel - und langfristigen Trends zu erkennen. Von besonderem Interesse sind die Überquerung der Trendlinien. Zum Beispiel, wenn sich der kurze Trend über den langen oder mittleren Trend bewegt, kann dies als Kaufsignal in der technischen Analyse interpretiert werden. Und wenn sich der kurze Trend unter einer längeren Trendlinie bewegt, kann dies als Verkaufssignal interpretiert werden. Die folgende Tabelle zeigt Zitate, Ma20, Ma50 und Ma200. T-SQL Ma20, Ma50, Ma200 kaufen und verkaufen Signale. Dieser Blog-Post ist Teil einer Serie über technische Analyse, TA, in SQL Server. Sehen Sie die anderen Beiträge hier. Geschrieben von Tomas LindExponential gleitender Durchschnitt in T-SQL Exponentielle Bewegungsdurchschnitte sind ähnlich wie gewichtete Bewegungsdurchschnitte, in denen sie weniger Gewicht zu Änderungen vor langer Zeit und mehr Gewicht zu den letzten Änderungen zuweisen. Gewichtete Bewegungsdurchschnitte sind linear, aber exponentielle gleitende Durchschnitte sind exponentiell. Das heißt, das Gewicht kann als Kurve ausgedrückt werden: Es gibt eine großartige Möglichkeit, exponentielle gleitende Durchschnitte in T-SQL zu berechnen, indem ein undokumentiertes Merkmal über Variablen und laufende Summen in SQL Server verwendet wird. In diesem Blog-Post werde ich zeigen, wie man diese Methode verwendet, um exponentiellen gleitenden Durchschnitt in T-SQL zu berechnen, aber ich werde auch eine Methode, die Standard-Features in SQL Server verwendet. Leider bedeutet das mit einer Schleife. In den Beispielen berechne ich einen 9 Tage exponentiellen gleitenden Durchschnitt. Die Beispiele verwenden die Datenbank TAdb. Ein Skript zum Erstellen von TAdb finden Sie hier. Exponential Moving Average (EMA): Laufen Totals-Methode Die Theorie hinter den laufenden Total-Features in Updates wird ausführlich von Jeff Moden in seinem Artikel beschrieben, der die laufenden Total - und Ordinal-Rank-Probleme löscht. Andere Ressourcen, die mit dieser Methode beschreiben, um EMA zu berechnen, sind der Blog-Beitrag, der die Umschlagsdurchschnitte mit T-SQL von Gabriel Priester berechnet und die Forumspost Exponential Moving Average Challenge. Sowohl auf SQL Server Central. Grundsätzlich können Sie in T-SQL Variablen sowie Spalten in einer Update-Anweisung aktualisieren. Die Updates werden Zeile für Zeile intern von SQL Server ausgeführt. Dieses Zeilen-zu-Zeilen-Verhalten macht das Berechnen einer laufenden Summe möglich. Dieses Beispiel zeigt, wie es funktioniert: Beachten Sie, dass 8220ColumnRunningTotal8221 eine laufende Summe von 8220ColumnToSum8221 ist. Mit dieser Methode können wir EMA9 mit diesem T-SQL berechnen: Die Berechnung von EMA ist ziemlich einfach. Wir verwenden die aktuelle Zeile und die vorherige, aber mit mehr Gewicht auf die aktuelle Zeile. Das Gewicht wird nach der Formel 2 (19) berechnet, wobei 822098221 der Parameter für die Länge der EMA ist. Um die EMA9 für Zeile 10 oben zu berechnen, ist die Berechnung: In diesem Fall erhält die aktuelle Zeile 20 des Gewichts (2 (19) 0,2) und die vorherige Zeile erhält 80 des Gewichts (1-2 (19) 0,8). Sie finden diese Berechnungen in der obigen Anweisung in der CASE-Anweisung: Exponential Moving Average (EMA): Looping-Methode Soweit ich weiß, mit Ausnahme der laufenden Summen-Methode, die oben beschrieben wurde, gibt es keine Möglichkeit, EMA mit einer setbasierten SQL-Anweisung zu berechnen . Daher verwendet das T-SQL unten eine while-Schleife, um EMA9 zu berechnen: Die Ergebnisse sind die gleichen wie im laufenden Summenbeispiel oben. Leistung Wie erwartet, ist die setbasierte laufende Summenversion viel schneller als die Loop-Version. Auf meiner Maschine war die Set-basierte Lösung ca. 300 ms, im Vergleich zu etwa 1200 mit der Loop-Version. Die Loop-Version entspricht eher den SQL-Standards. Also die Wahl zwischen den Methoden hängt davon ab, was8217s wichtigste für Sie, Leistung oder Standards. Der exponentielle gleitende Durchschnitt kann in der Trendanalyse verwendet werden, wie bei den anderen Arten von gleitenden Durchschnitten, Simple Moving Average (SMA) und Weighted Gleitender Durchschnitt (WMA). Es gibt auch andere Berechnungen in der technischen Analyse, die die EMA, MACD zum Beispiel verwendet. Dieser Blog-Post ist Teil einer Serie über technische Analyse, TA, in SQL Server. Sehen Sie die anderen Beiträge hier. Geschrieben von Tomas Lind Tomas Lind - Beratungsdienstleistungen als SQL Server DBA und Datenbankentwickler bei High Coast Database Solutions AB.


No comments:

Post a Comment