Gleitender Durchschnitt in T-SQL Eine gängige Berechnung in der Trendanalyse ist der gleitende (oder rollende) Durchschnitt. Ein gleitender Durchschnitt ist der Durchschnitt der letzten 10 Zeilen. Der gleitende Durchschnitt zeigt eine glattere Kurve als die tatsächlichen Werte, mehr also mit einer längeren Periode für den gleitenden Durchschnitt, was es zu einem guten Werkzeug für die Trendanalyse macht. Dieser Blogpfosten zeigt, wie man den gleitenden Durchschnitt in T-SQL berechnet. Abhängig von der Version von SQL Server werden unterschiedliche Methoden verwendet. Die nachstehende Tabelle zeigt den Glättungseffekt (rote Linie) mit einem 200 Tage gleitenden Durchschnitt. Die Aktienkurse sind die blaue Linie. Der langfristige Trend ist deutlich sichtbar. T-SQL Moving Avergage 200 Tage Die folgende Demonstration benötigt die TAdb-Datenbank, die mit dem hier befindlichen Skript erstellt werden kann. Im nächsten Beispiel wird ein gleitender Durchschnitt für die letzten 20 Tage berechnet. Abhängig von der Version von SQL Server gibt es eine andere Methode, um die Berechnung durchzuführen. 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 verwendet 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 vorangegangen ist 19, weil wir die aktuelle Zeile auch in die Berechnung enthalten. Wie Sie sehen können, ist die Berechnung der gleitenden Durchschnitt in SQL Server 2012 ziemlich einfach. Die Abbildung unten zeigt das Fensterprinzip. Die aktuelle Zeile ist mit gelb markiert. Das Fenster ist blau 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 identisch, so dass sie nicht erneut angezeigt werden. SQL Server 2005 8211 2008R2 Moving Average Diese Version verwendet einen gemeinsamen Tabellenausdruck. Der CTE wird 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. Die äußere Tabelle kann gesagt werden, um das Fenster zu enthalten, die wir durchschnittlich auf berechnen wollen: Leistung Vergleich Wenn wir die drei verschiedenen Methoden gleichzeitig und überprüfen Sie die resultierende Ausführungsplan laufen, gibt es einen dramatischen Unterschied in der Leistung zwischen den Methoden: Vergleich von drei Verschiedene Methoden, um den gleitenden Durchschnitt zu berechnen Wie Sie sehen können, macht die Verbesserung der Fensterfunktion in SQL 2012 einen großen Unterschied in der Leistung. Wie bereits am Anfang dieses Beitrags erwähnt, werden gleitende Durchschnittswerte als Trends verwendet. Ein gemeinsamer Ansatz besteht darin, Bewegungsdurchschnitte verschiedener Längen zu kombinieren, um Veränderungen in der kurz-, mittel - und langfristigen Entwicklung zu erkennen. Von besonderem Interesse sind die Übergänge der Trendlinien. Zum Beispiel, wenn sich der kurze Trend über den langen oder mittleren Trend bewegt, kann dieser 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 Quotes, Ma20, Ma50 und Ma200. T-SQL Ma20, Ma50, Ma200 kaufen und verkaufen Signale. Dieser Blog-Beitrag ist Teil einer Serie über technische Analyse, TA, in SQL Server. Siehe die anderen Beiträge hier. Geschrieben von Tomas LindI habe die Diskussion gelesen, die du erwähnt hast. Es ist auf PostgreSQL anwendbar, da es erlaubt ist, benutzerdefinierte Aggregatfunktion mit SQL in PostgreSQL zu erstellen, aber nicht in SQL Server erlaubt. Die Verwendung von rekursiven CTE ist ein möglicher Weg in SQL Server, aber ich merke, dass CTE-Wege möglicherweise mehr Tabellen-Scan als Fenster-Funktionen. So mache ich diesen Beitrag zu fragen, ob es möglich ist, zu berechnen exponentiellen gleitenden Durchschnitt mit SQL Server 2012 Fensterfunktion genau wie die Berechnung einfach gleitenden Durchschnitt. Ndash xiagao1982 Apr 14 13 at 2:53 Zuerst berechnen Sie die EMA (SMA (x)) anstelle der EMA (x). Zweitens ist Ihre quotsmoothing constantquot eigentlich der Beta-Wert in meiner Formel, nicht die alpha. Mit diesen beiden Änderungen sieht das SQLFiddle wie folgt aus: sqlfiddle6191921 Es gibt jedoch noch einen kleinen Unterschied zwischen dem tatsächlichen Ergebnis und dem erwarteten Ergebnis. Ich würde zurückgehen und sehen, ob ihre EMA-Definition entspricht der, die ich kenne. Ndash Sebastian Meine 7 Mai, um 13:46 Ich schaute nur auf das Formular in der Kalkulationstabelle Sie angebracht und es ist weit weg von der Standard-EMA-Definition. Meine Formel berechnet den exponentiellen gleitenden Durchschnitt der letzten zehn Zeilen. Die Kalkulationstabelle berechnet zuerst den Standardmittelwert über die letzten zehn Zeilen und dann den unbeschränkten exponentiell gewichteten gleitenden Durchschnitt über alle Mittelwerte. Dies folgt der formular hier: en. wikipedia. orgwikiEWMAchart ndash Sebastian Meine 7. Mai 13 bei 13: 52Were eine Herausforderung, die versuchen, die 20 (Handelstage) setzen Exponential Moving Average (EMA) in unserem Datenmodell in Power. Hier ist die EMA Formel und Beispieltabelle: stockchartsschooldoku. phpidchartschool: technicalindicators: movingaverages die Formel hier Pasted für Bequemlichkeit: SMA (Simple Moving Average): 10 Periode Summe 10 Multiplier: 2 (Zeitraum 43 1)) EMA: x Multiplikator 43 EMA (Vorheriger tag). Beispieltabelle stockchartsschooldatamediachartschooltechnicalindicatorsandoverlaysmovingaveragescs-movavg. xls In unserem Modell haben die Faktentabelle diese Spalten: Symbol Datum Eröffnung Hoch Tief Schluss Volumen Und in der Kalender-Tabelle weve identifiziert die Handelstage (CalendarTradingDayNumber) als 1, so können wir sie wieder verlassen. Wir wollen die EMA berechnet Feld in einer Pivot-Tabelle wie dieser Filter Kontext: ein Datum ausgewählt auf CalendarFullDate Row Kontext: FactTableSymbol Werte: FactTableClose FactTableEMA 20D gtgt Bisher bekamen wir diese berechneten Felder fehlt: Ema Multiplier 2 (Periode 43 1) Durchschnitt 20D SCHLIEßEN IF (Summe der CLOSEBLANK (), BLANK (), (CALCULATE (MITTELWERT (FactTableCLOSE), FILTER (ALL (Kalender), CalendarTradingDayNumberltMAX (CalendarTradingDayNumber) ampamp CalendarTradingDayNumbergtMAX (CalendarTradingDayNumber) - Periode)))) Aber es die EMA Formel sieht aus wie enthält Eine Selbstreferenz aus früheren Werten, und sie beginnt auch mit einem SMA (Average 20D CLOSE) Wert. Wie können wir es tun Vielen Dank im Voraus. Ich schätze Ihre Unterstützung sehr. Samstag, 19. Juli 2014, 21:42 Uhr
No comments:
Post a Comment