Moving Average Dieses Beispiel lehrt, wie Sie den gleitenden Durchschnitt einer Zeitreihe in Excel berechnen. Eine Bewegung wird verwendet, um Unregelmäßigkeiten (Spitzen und Täler) zu glätten, um Trends leicht zu erkennen. 1. Erstens, werfen wir einen Blick auf unsere Zeitreihe. 2. Klicken Sie auf der Registerkarte Daten auf Datenanalyse. Hinweis: Klicken Sie hier, um das Analyse-ToolPak-Add-In zu laden. 3. Wählen Sie Verschiebender Durchschnitt aus, und klicken Sie auf OK. 4. Klicken Sie im Feld Eingabebereich auf den Bereich B2: M2. 5. Klicken Sie in das Feld Intervall und geben Sie 6 ein. 6. Klicken Sie in das Feld Ausgabebereich und wählen Sie Zelle B3 aus. 8. Zeichnen Sie ein Diagramm dieser Werte. Erläuterung: Da wir das Intervall auf 6 setzen, ist der gleitende Durchschnitt der Durchschnitt der vorherigen 5 Datenpunkte und der aktuelle Datenpunkt. Als Ergebnis werden Spitzen und Täler geglättet. Die Grafik zeigt eine zunehmende Tendenz. Excel kann den gleitenden Durchschnitt für die ersten 5 Datenpunkte nicht berechnen, da nicht genügend frühere Datenpunkte vorhanden sind. 9. Wiederholen Sie die Schritte 2 bis 8 für Intervall 2 und Intervall 4. Fazit: Je größer das Intervall, desto mehr werden die Spitzen und Täler geglättet. Je kleiner das Intervall, desto näher sind die gleitenden Mittelwerte zu den tatsächlichen Datenpunkten. MetaTrader 5 - Beispiele Testing Performance von Moving Averages Berechnung in MQL5 Einführung Die Verwendung von Moving Averages ist eine gängige Praxis bei der Analyse von Markt Zeitreihen, in Indikatoren und Experten Beratungsprogrammierung. Sein die populärste Preisdaten-Glättungsmethode. In der neuen Version der MQL-Sprache gibt es ein Dutzend Moving Average Algorithmen zur Verfügung. Das ist der Unterschied zwischen ihnen Wirklich, tut die Berechnung Geschwindigkeit abhängig von bestimmten Algorithmus von Moving Averages Welcher Algorithmus ist schneller Ist die Rechengeschwindigkeit von Moving Averages in MetaTrader 5 im Vergleich zu MetaTrader 4 erhöht Es gibt eine Menge solcher Fragen erscheinen. Also, betrachten die meisten von ihnen. Natürlich ist die Geschwindigkeit einer neuen Plattform beeindruckend, aber es ist besser, sie experimentell zu überprüfen. 1. Prüfbedingungen Die Rechengeschwindigkeit ist von vielen Faktoren abhängig. Daher wären die Daten, die als Resultat dieser Forschung erhalten wurden, in anderen Testbedingungen unterschiedlich. Mit anderen Worten, die absoluten Werte der Leistung sind unterschiedlich, aber relative Werte sollten ähnlich sein (für eine certiain-Plattform). Aufgrund der Tatsache, dass die iMA-Funktion in MQL5 nicht die Berechnungsergebnisse selbst zurückgibt (es gibt einen Indikatorgriff zurück), werden wir die Geschwindigkeit von zwei Funktionen testen: iMA und CopyBuffer. Testbedingungen: CPU: Core i7 965 Symbol: EURUSD Preis Datengröße: 10000 Elemente Client-Terminal: autonom, die maximale Anzahl von Balken im Diagramm ist auf 10000 gesetzt Moving durchschnittliche Modelle: MODESMA, MODEEMA, MODESMMA, MODELWMA Die Genauigkeit der Rechengeschwindigkeit Ist auf zwei signifikante Ziffern beschränkt Die mögliche Anzahl der Aufrufe der Moving-Averages-Funktionen: 7 2. Wie wir getestet haben Um die Zeit der gleitenden Durchschnittsberechnung zu messen, haben wir die Funktion GetTickCount (), die in Millisekunden arbeitet. Diese Genauigkeit ist nicht genug, so müssen wir einige Zyklen zu organisieren, um die Qualität der Messungen zu verbessern. Wenn wir jedoch die Schleife viele Male mit derselben Berechnung und gleichen Eingangsdaten wiederholen, werden die Ergebnisse verzerrt. Der Grund für diese Tatsache ist folgende: Die iMA-Funktion erzeugt eine Kopie des entsprechenden technischen Indikators im globalen Cache des Client-Terminals. Wenn die Kopie eines Indikators (mit denselben Parametern) bereits im globalen Cache vorhanden ist, wird die neue Kopie nicht erzeugt, der Referenzzähler der Kopien der Indikatoren wird erhöht. Mit anderen Worten, der gesamte Pufferindikator wird nur einmal beim ersten Aufruf berechnet, und bei allen nachfolgenden Anrufen nimmt er nur die Bereitschaftswerte auf, er berechnet nur die neuen Daten neu. Daher sollte die Schleife so organisiert werden, wenn Eingabeparameter des Indikators während des Zyklus eindeutig sind. Wir haben drei derartige Parameter ausgewählt: Mittelungszeitraum und angewandter Preis. Wertebereich Tabelle 2. Die Ergebnisse Die Bedeutung von Testfällen wird weiter behandelt (Abschnitte 4.1-4.7). Schätzt das Gesamtbild der Berechnungsleistung von Moving Average. Für die Überzeugung werden die Ergebnisse in Tabellen dargestellt (siehe Abbildungen 1-5). Der rufende Typ des Moving Average wird in X-Achsen dargestellt (siehe Tabelle 2), die Werte an Y-Achsen werden im logarithmischen Maßstab multipliziert mit -1, so dass die größeren Werte eine schnellere Leistung bedeuten. Jedes der Berechnungsmodelle (SMA, EMA, SMMA, LWMA) entspricht einer Spalte auf dem Diagramm. Abbildung 1. Die Leistungstestergebnisse für verschiedene Moving Average-Algorithmen Man kann einen signifikanten Unterschied in der Rechengeschwindigkeit für die verschiedenen Fälle der Moving-Averages-Berechnung sehen. Was bedeutet es? Die verschiedenen Algorithmen der Moving Averages Berechnung, die von MQL5 Entwicklern zur Verfügung gestellt werden, haben unterschiedliche Rechenleistung: Es gibt einen schnellen Algorithmus (Fall 6) und langsamere Methoden (Fälle 3 und 4). So ist es notwendig, die richtigen Algorithmen beim Schreiben von Programmen in MQL5, die Moving Averages verwendet zu wählen. Die Berechnungszeit der einzelnen Moving-Averages-Modelle (0-6) ist in den folgenden Abbildungen detailliert dargestellt, siehe Tabelle 2. Abbildung 2. Die MA-Berechnungsleistung des MODESMA-Modus Abbildung 3. Die MA-Berechnungsleistung des MODEEMA-Modus Abbildung 4 Die MA-Berechnungsleistung des MODESMMA-Modus Abbildung 5. Die MA-Berechnungsleistung des MODELWMA-Modus Es ist interessant, die Berechnungsleistung von zwei Plattformen zu vergleichen: MetaTrader 4 und MetaTrader 5. Die Ergebnisse sind in Tabelle 2, Fall 0 (MQL4) Und Fall 2 (MQL5). Aus Erfahrung können wir die Berechnungsergebnisse des iMA-Standardindikators in eine separate Tabelle und Tabelle zusammenfassen (siehe Abb. 6). Die Rechenzeit des Tests wird in Y-Achsen dargestellt. Abbildung 6. Vergleichstabelle der MetaTrader 5-Berechnungsleistung Die neue MetaTrader 5-Plattform ist 40 schneller als die bisherigen MetaTrader 4. Für die Modelle SMA, EMA und SMMA (Fall 6) wurde für LWMA (Fälle 2) die schnellste Leistung erzielt Und 5). Für Testfälle, bei denen der Standardindikator iMA verwendet wird, ist die Berechnungsleistung verschiedener Modelle praktisch identisch. Sein nicht wahr für die MovingAverages. mqh Bibliotheksfunktionen. Für unterschiedliche Modelle unterscheidet sich die Leistung fast um einen Auftrag (0,00023 0,0045). Die dargestellten Ergebnisse entsprechen dem Kaltstart, es gibt keine vorberechneten Daten im globalen Cache des Client-Terminals. 4. Fallstudien Für die Prüfung der Berechnung Leistung der gleitenden Durchschnitte, seine beter, um das Skript verwenden. Weil sie alle Berechnungen durchführen können, ohne die Ereignisse abzuwarten (z. B. neues Tick-Ereignis usw.). Es ist nicht notwendig, ein separates universelles Programm für alle Testfälle zu erstellen, daher erstellen wir ein separates Skript für jeden Fall der MA-Berechnung. Also, betrachten wir im Detail jeder der Fälle von Moving Average Berechnungen. 4.1. Fall 0 In diesem Fall haben wir die Berechnungsleistung des technischen Indikators iMA von MQL4 gemessen. Die Berechnungen werden in MetaTrader4 durchgeführt und auf allen Daten durchgeführt. Hinweis. Wir haben geplant, die verschiedenen Arten von Daten in dem Array zu verwenden, aber für die Einfachheit haben wir nur ein Array mit engen Preisdaten verwendet (es hat keinen Einfluss auf die Leistung von Berechnungen). 5. Ausgabe der Ergebnisse Für die Ausgabe der Ergebnisse und die Überprüfung der gleitenden Mittelwerte verwendete ich die Funktion PrintTest: Sie kann folgendermaßen aufgerufen werden (die Balkenposition und das Datenarray sind Parameter der Funktion): Beachten Sie, dass das Array Indexierung unterscheiden sich vor und nach den Berechnungen. WICHTIG. Das AsSeries-Flag wird während der Berechnungen auf false gesetzt und beim Drucken der Ergebnisse auf true gesetzt. 6. Zusätzliche Untersuchungen Um die Frage nach der Wirkung der Anfangsparameter auf die Berechnungsleistung zu beantworten, wurden einige zusätzliche Messungen durchgeführt. Wie wir uns erinnern, hat der Fall 6 die beste Leistung, also werden wir ihn verwenden. Tabelle 3. Zusätzliche Untersuchungen Quellcode der Tests: Für die zusätzlichen Tests verwenden wir das Autotest-Programm, dessen graphische Benutzeroberfläche in Abb. 7. Abbildung 7. Das Autotestprogramm für die aurtomierten Testergebnisse. (X-Achsen hat eine logarithmische Zeitskala) Abbildung 8. Berechnungsleistung des Zeitrahmenparameters (Y) und der Bewegungsdurchschnittsberechnung (X) Abbildung 9. Berechnungsleistung des Periodenparameters (Y) und des Bewegungsdurchschnitts (X) Die Schlussfolgerungen der Ergebnisse von Zusätzliche Untersuchungen: Der Zeitrahmenparameter ist nicht wichtig, er beeinflusst nicht die Berechnungsleistung (siehe Abb. 8). Der Zeitraum ist für die Modelle SMA, EMA und SMMA kein wichtiger Parameter für die Berechnung der gleitenden Mittelwerte. Im Gegensatz dazu verlangsamt sie signifikant (von 0,00373 Sekunden auf 0,145 Sekunden) die Berechnungen für das LWMA-Modell (siehe Abb. 9). Fazit Die falsche Wahl des Moving Averages Algorithmus ist in der Lage, die Rechenleistung Ihrer Programme zu reduzieren. Im Moment entwickle ich ein grafisches LCD-System, um Temperaturen, Ströme, Spannungen, Energie und Energie in einem Wärmepumpensystem anzuzeigen. Die Verwendung eines grafischen LCD bedeutet, dass die Hälfte meines SRAM und 75 meines Blitzes durch einen Schirmpuffer und Schnüre verbraucht worden sind. Ich sehe derzeit min / max / Durchschnittswerte für die Energie an. Um Mitternacht, wenn die tägliche Zahl zurückgesetzt wird, prüft das System, ob der Verbrauch für den Tag über oder unter dem vorherigen Minimum oder Maximum liegt, und speichert den Wert. Der Durchschnitt wird berechnet, indem der kumulative Energieverbrauch durch die Anzahl der Tage dividiert wird. Ich möchte den täglichen Durchschnitt über die letzte Woche und Monat (4 Wochen aus Gründen der Einfachheit), d. h. Derzeit geht es darum, ein Array von Werten für die letzten 28 Tage aufrechtzuerhalten und einen Durchschnitt über das gesamte Array für die monatlichen und letzten 7 Tage für wöchentlich zu berechnen. Zuerst war ich dies mit einem Array von Schwimmern (wie die Energie in Form von 12.12kWh), aber das war mit 28 4 Byte 112 Bytes (5.4 von SRAM). Ich habe nichts dagegen, nur einen einzigen Dezimalpunkt der Auflösung, so dass ich geändert, um mit uint16t und die Multiplikation der Zahl mit 100. Dies bedeutet, dass 12.12 wird als 1212 dargestellt, und ich teile durch 100 für die Anzeige. Die Größe des Arrays ist jetzt auf 56 Bytes (viel besser). Es gibt keine triviale Möglichkeit, die Figur auf einen uint8t zu reduzieren, den ich sehen kann. Ich könnte den Verlust einer Dezimalstelle tolerieren (12,1kWh anstatt 12,12kWh), aber der Verbrauch ist häufig höher als 25,5kWh (255 ist der höchste Wert, der durch eine 8-Bit-Ganzzahl ohne Vorzeichen dargestellt wird). Der Verbrauch lag nie unter 10,0 kWh oder über 35,0 kWh, so daß ich 10 von den gespeicherten Zahlen subtrahieren konnte, aber ich weiß, dass wir eines Tages diese Grenzen überschreiten werden. Ich testete dann Code, 9-Bit-Werte in ein Array zu packen. Dies ergibt einen Bereich von 0-51,2 kWh und verwendet insgesamt 32 Bytes. Allerdings ist der Zugriff auf ein Array wie dieses ziemlich langsam, vor allem, wenn Sie über alle Werte iterieren müssen, um einen Durchschnitt zu berechnen. Also meine Frage ist - gibt es eine effizientere Methode der Berechnung eines gleitenden Durchschnitt mit drei Fenstern - Lebensdauer, 28 Tage und 7 Tage Effizienz bedeutet kleiner in Bezug auf SRAM Nutzung, aber ohne die Strafe von riesigen Code. Kann ich vermeiden, die Speicherung aller Werte gefragt Ich habe gedacht und du hast Recht. So dass technisch macht meine Antwort falsch. Ich investiere noch mehr Zeit und Geduld. Vielleicht etwas aus der Box. Ich lasse Sie wissen, wenn ich mit etwas kommen. Wir machen so etwas viel an meinem Arbeitsplatz. Lassen Sie mich fragen. Sorry über die Verwirrung. Ndash Aditya Somani Mar 8 14 am 17:15 gibt es eine effizientere Methode der Berechnung eines gleitenden Durchschnitt mit. 28 Tage und 7 Tage. Müssen sich an 27 Tage Geschichte erinnern. Vielleicht erhalten Sie nahe genug Speicherung 11 Werte anstelle von 28 Werten, vielleicht so etwas wie: Mit anderen Worten, anstatt jedes Detail von jedem Tag für die letzten 27 Tage zu speichern, (a) speichern 7 oder so Werte der detaillierten täglichen Informationen für die Vergangenheit 7 oder so Tage, und auch (b) speichern Sie 4 oder so zusammengefasste Werte der gesamten oder durchschnittlichen Informationen für jede der letzten 4 oder so Wochen.
No comments:
Post a Comment