Sunday, 29 January 2017

Moving Average Easylanguage

EasyLanguage amp PowerLanguage Tutorial 8211 Lektion 02: Codierung ein gleitender Durchschnitt Erstellen der ersten realen Indikator und Ausweiten der Grundlagen Nachdem Sie sich mit dem PowerLanguage Editor im vorherigen PowerLanguage Tutorial 8211 Lektion 01 vertraut gemacht haben, werden wir nun auf dieser Grundlage aufbauen. Wenn Sie haven8217t lesen Sie die letzte Lektion, würde ich vorschlagen, dass erste, wie es Ihnen beim Verständnis dieser Lektion helfen kann, zu. Let8217s beginnen mit today8217s Lektion jetzt. Öffnen Sie den PowerLanguage Editor und erstellen Sie eine neue Indikatorstudie. Ich benutze meine ABCPowerLanguage Lektion 02 8211 Moving Average, so kann ich es leicht finden, in meinem Editor später. Der Name ist völlig bis zu Ihnen selbstverständlich und Sie konnten ihn sogar später ändern. Wie der letzte Teil des Indikatornamens vermuten lässt, werden wir heute einen gleitenden Durchschnitt kreieren und gliedern. Sie haben wahrscheinlich einen gleitenden Durchschnitt auf einem Diagramm gesehen, bevor oder erinnern Sie den Begriff Durchschnitt aus Mathe. Die Hauptnutzung für Mittelwerte ist als Filter, um die eingegebenen Daten zu glätten. Das Bild zeigt eine 200 Periode einfachen gleitenden Durchschnitt, der ein sehr glattes Ergebnis ergibt. Der Nachteil dieser Glätte ist, dass Sie mehr Lag bringen. Das bedeutet, dass der Durchschnitt weniger auf Preisänderungen reagiert. Wenn Sie einen Blick auf das nächste Bild sehen Sie, wie unterschiedlich das Verhalten eines 200-Periode einfachen gleitenden Durchschnitt ist, wenn Sie es mit dem grünen 10 Periodendurchschnitt vergleichen. Letzteres ist viel schneller in Reaktion auf Preisänderungen, aber im Gegenzug gibt es viel mehr 8220noise8221 im Durchschnitt. Es gibt viele verschiedene Arten von Mittelwerten, die hauptsächlich in der Auswirkung jedes Datenpunktes auf das Ergebnis des Durchschnitts variieren. Ein einfacher gleitender Durchschnitt von 200 Perioden berechnet einfach eine Summation der letzten 200 Datenpunkte und dividiert sie durch 200. Das Ergebnis ist ein Durchschnitt, der jedem Datenpunkt denselben Einfluß (denselben Wert) auf das Ergebnis gibt. Der erste Balken und der letzte Balken, die Teil des Durchschnitts sind, werden beide gleich gewichtet für das Ergebnis. Zwei weitere prominente und häufig verwendete Mittelwerte sind der Exponential Moving Average und der Weighted Moving Average. Beide haben höhere Gewichtungsfaktoren für die neueren Datenpunkte. In einem gewichteten gleitenden Durchschnitt wird die Gewichtung in der arithmetischen Progression abnehmen. Für den exponentiellen Mittelwert nimmt er exponentiell ab, daher der Name. Das wird so theoretisch sein wie heute. Wenn Sie mehr Details über Mittelwerte lesen möchten, können Sie mit diesem Wikipedia-Artikel beginnen. Für weiteres Verständnis dieser Lektion brauchen Sie diese zusätzliche Information allerdings. Let8217s beginnen mit Codierung unserer Durchschnitt. Unser Indikator sollte nicht nur einen Durchschnitt berechnen, sondern es sollte das Ergebnis auf ein Diagramm ausgeben. EasyLanguage hat das 8220Plot8221 reservierte Wort für das und wir werden es verwenden, um das zu tun. Bevor Sie mit der Programmierung etwas beginnen, ist es immer eine gute Idee, einen Schritt zurückzugehen und darüber nachzudenken, was Sie zu erreichen versuchen und wie Sie es tun werden. Da diese Studie nicht sehr komplex ist, gibt es nur ein paar Dinge zu denken. Wenn Studien komplexer werden, können Sie viel Zeit mit guter Planung im Voraus sparen. Das Ziel ist eine Studie, die berechnet und zeigt einen einfachen gleitenden Durchschnitt. Wir wollen in der Lage sein, die Länge für den Durchschnitt mit einem Eingang zu ändern so it8217s einfach, besonders anzufertigen. Für den Durchschnitt müssen wir die Menge der Werte zusammenfassen, die mit der Längeneingabe korrelieren. Wir wollen für jede mögliche Längeneingabe für die Summe Code schreiben. Der Code muss also alle möglichen Längeneingaben selbst berechnen können. Haben Sie bereits eine Idee, wie wir dies erreichen könnte? Die Antwort ist, dass wir eine Iteration-Anweisung, die wiederholt ausgeführt werden kann jeder Balken für eine bestimmte Anzahl von Malen (unsere Längeneingabe). Ich weiß, das klingt kompliziert, aber es wird ganz einfach. Wir verwenden die 8220for loop8221 für diese Aufgabe. Diese Schleife wiederholt eine oder mehrere Anweisungen für eine benutzerdefinierte, spezifische Anzahl von Iterationen. Der EasyLanguage-Code wird von oben nach unten und normalerweise von links nach rechts ausgeführt. Sobald eine Codezeile ausgeführt wird, wird die nächste Zeile ausgeführt und so weiter. Wenn die Codezeile der Anfang einer Schleife ist, werden die Codezeilen innerhalb der Schleife für den angegebenen Betrag ausgeführt. Erst wenn die Schleife beendet ist, wird die nächste Codezeile nach der Schleife ausgeführt. A für Schleife sieht und arbeitet folgendermaßen: Eine numerische Variable wird mit jedem Zyklus durch die Schleife von ihrem Startwert zu ihrem Endwert inkrementiert (oder dekrementiert). Dieses Bild zeigt eine Grundschleife mit einer numerischen Zählervariable (ii in diesem Fall) und dem Anfangswert von 0 an. Die Iterationen werden zehnmal durchgeführt, bis der Zähler den Wert von 9 erreicht hat. Dann wird der Schleifenblock als letzter ausgeführt Zeit und beendet. Sie müssen den Zählerwert selbst inkrementieren, der Loop-Code kümmert sich darum. Der aktuelle Zählerwert wird in der Zählervariable gespeichert. So können Sie es für jeden Schleifenzyklus zugreifen und es für Ihre Berechnungen verwenden. Dies wird praktisch für die Berechnung unserer durchschnittlichen kommen. Die for-Schleife kann den Zähler auch mit jeder Iteration dekrementieren. Der Anfangswert in diesem Beispiel ist 9, aber die Schleife wird zehnmal ausgeführt, bis sie ebenfalls verlassen wird. Der Zähler verringert sich einfach mit jeder Iteration um eins, bis er 0 erreicht. In Easylanguage können Sie auf datenbezogene reservierte Wörter, Variablen und Funktionen aus einer vorherigen Leiste ganz einfach Bezug nehmen. Wenn Sie eine Zahl in eckigen Klammern nach dem reservierten Wort verwenden, gibt die Berechnung oder Variable den Wert für diesen speziellen Balken zurück. Die Zahl wächst von der aktuellen Leiste (die Sie mit 0 bezeichnen) in Schritten von eins. Wenn Sie den Wert des vorherigen bar8217s innerhalb einer Variablen mit dem Namen PrevCloseValue schließen möchten, können Sie dies wie folgt ausführen: Wir wollen unseren Durchschnitt mit dem Schließen für die letzten X-Balken erstellen. Wo X eine Eingabe ist, um mehr Flexibilität zu ermöglichen. Sie wissen bereits, dass wir eine Schleife für das verwenden möchten, und wir haben gerade herausgefunden, wie wir Referenzwerte für die letzten Balken referenzieren können. Dies sollte ausreichen, um den Code für den Hauptteil unseres Indikators zu schreiben. Let8217s weiterhin durch die Erstellung der Eingabe-und variablen Abschnitten. Sie könnten daran erinnern, aus der letzten Lektion, dass die Verwendung von aussagekräftigen Variablennamen ist eine gute Kodierung Praxis und sparen Sie eine Menge Schwierigkeiten später. Wir müssen einen Eingang deklarieren, damit wir die Länge für unseren Durchschnitt auf dem Chart ändern können. Abgesehen davon, dass wir eine Variable, die die Summation, eine hält den Zählerwert und eine letzte, die den Mittelwert zu speichern hält. Für die Ausgabe des Wertes im Diagramm verwenden wir das reservierte Wort Plot. Es folgt eine Zahl, so dass Sie zwischen verschiedenen Diagrammen unterscheiden können. Welche benötigt wird, wie Sie bis zu 999 Plots in Multicharts verwenden können. Das Plot reservierte Wort kann mehrere Parameter wie Farbe, Plot Größe und einige mehr haben. Wir halten es einfach hier und verwenden Plot1 mit nur zwei Parametern 8211 die erste für den numerischen Ausdruck geplottet und ein zweiter für den Namen, den wir dem Diagramm zuweisen möchten. Der endgültige Code sieht so aus: Nach dem Kompilieren dieses Codes sind wir fast bereit, unseren Indikator auf ein Diagramm in Multicharts zu laden. Let8217s nur einen Blick auf die Eigenschaften der Anzeige zuerst. Sie finden diese unter - gt Datei - gt Eigenschaften oder durch Klicken auf das Eigenschaften-Symbol im Menü (es sollte das übrige zum Kompilieren sein). Unter der Registerkarte Stil können Sie die Farbe, den Linienstil und die Dicke für die von Ihnen erstellte Zeichnung ändern. Wenn Sie auf die Registerkarte Eigenschaften zu gelangen, gibt es mehrere Optionen zu setzen oder zu überprüfen, aber jetzt möchten Sie vielleicht nur sicherzustellen, dass die Option 8220Same As Symbol8221 aktiviert ist. Dadurch wird sichergestellt, dass der Indikator direkt auf dem Diagramm und nicht auf dem Subchart angewendet wird. Jetzt können Sie die Anzeige auf ein Diagramm Ihrer Wahl anwenden. Wenn Sie ein Diagramm im Multicharts-Hauptfenster geöffnet haben, können Sie einfach die Anzeige in dieses Diagramm einfügen. Wenn das Kennzeichen angewendet wird, sollte das Ergebnis ähnlich dem obigen Screenshot sein. Jedoch scheint dieses doesn8217t recht, da dieses doesn8217t wie ein gleitender Durchschnitt überhaupt aussieht. Die Preis-Serie ist fast eine flache Linie und das Grundstück von unserem Indikator kommt nur steigt. Mit dem E-Mini SampP 500 im Bereich von 18217800 ein 10 bar gleitender Durchschnittswert für diesen Markt von 182179528217647 ist offensichtlich nicht korrekt. Dies deutet auf ein Problem in unseren Berechnungen hin. Haben Sie eine Idee, was der Code fehlt Es ist eigentlich nur ein wenig, aber sehr wichtige Details, die wir vergessen haben, hinzuzufügen. Wir müssen etwas vor der for-Schleife hinzufügen. Die Schleife hält einfach die Werte für die vorherigen zehn Takte mit jedem neuen Balken an. Das ist gut und wir wollen es genau dies tun, aber wir don8217t wollen, dass es die neuen Werte auf die alten Werte hinzufügen. Mit anderen Worten, Sie müssen sicherstellen, dass CloseValueSum doesn8217t immer noch die alten Werte hält, wenn die for-Schleife startet. Mit dem Hinzufügen einer Zeile zum Code ist das Ergebnis genau das, was wir erreichen wollten. Wir können auch das display8217s-Erscheinungsbild auf dem Chart ändern. Mit dem Style Tab unter 8220Format Study8221 können wir das visuelle Ergebnis wie Linienstil, Farbe und Dicke ändern. Unter der Registerkarte 8220Inputs8221 finden Sie die erstellte Eingabe und die Standardeinstellung für die Länge. Durch das Laden einer zweiten Instanz der Studie und Verwendung einer anderen Farbe und Länge können Sie bestätigen, dass die Studie gibt ein anderes Ergebnis mit einer anderen Länge Eingabe. Wenn Sie Schwierigkeiten haben, die richtige Lösung zu finden, fühlen Sie sich frei, uns mit Ihrer Lösung zu kontaktieren, und wir werden versuchen, Ihnen rechtzeitig zu helfen. Ich habe Angst, nur um die Lösung zu bitten, aber du musst wenigstens zeigen können, dass du auch die Lösung gefunden hast. Als letzten Hinweis können Sie einen Blick auf andere durchschnittliche Indikatoren oder Funktionen und finden Sie einige Inspiration für die fehlende Link gibt. Ich hoffe, Sie haben diese Powerlanguage Tutorial-Lektion und ich freue mich auf die Zusammenarbeit mit Ihnen in der nächsten one. TradeStation EasyLanguage Tutorials: Multiple-Output-Funktionen: TradeStation EasyLanguage Tutorial Multiple Output-Funktionen In diesem TradeStation EasyLanguage Tutorial zeigen wir eine der mächtigsten Methoden in der TradeStation EasyLanguage, die Multipleoutput-Funktionen mit Hilfe von ref-Parametern entwickelt. Dieses Konzept ermöglicht es Ihnen, sehr wiederverwendbare Funktionen schreiben und wir verwenden mehrere TradeStation-Funktionen in unserem Beispiel. Ein grundlegendes Benutzerfunktions-Framework Benutzerfunktionen werden verwendet, um wiederverwendbare Berechnungen durchzuführen, beispielsweise um Indikatorwerte, Sortierung usw. zu berechnen. Benutzerfunktionen haben Eingabeparameter. Diese Parameter können entweder Eingangsparameter oder Eingangsparameter sein. Diese Parameter können auch verschiedene Typen haben. Einige dieser Typen sind NumericSimple, NumericSeries, NumericRef, StringSimple, numericarrayref, numericarray und StringRef. Eine Funktion kann einen einzelnen Wert zurückgeben, aber wenn wir byref verwenden, können wir viele Werte aus einer Funktion zurückgeben. Schauen wir uns einige Funktionsschalen an. ByRef übergibt die Speicheradresse einer Variablen, die wir dann den Inhalt dieser Speicheradresse innerhalb der Benutzerfunktionen füllen können. So funktioniert byref. Normale Parameter, wie z. B. NumericSimple, NumericSeries und Stringsimple, kopieren nur den Inhalt auf eine Adresse im Funktionsstack. Dies bedeutet, dass sie Daten in die Funktion kopieren, aber nicht die übergebenen Werte ändern können. Nur die Variablentypen mit Ref-Suffix können geändert werden. Let8217s ersten Blick auf eine einfache gleitende durchschnittliche Funktion: Wir können sehen, dass wir eine Preisreihe weitergeben können. Diese Serie kann ein Skalar oder ein System sein, zum Beispiel Close, High oder (CloseHighLow) 3, was ein Skalar sein würde, der durchgegeben und in eine numerische Reihe umgewandelt wird. Wir haben auch den Parameter Length, der ein einfacher numerischer Wert ist. Eine weitere interessante Sache über diese Funktion ist die Verwendung der Fehler-Trapping-Routine für Division durch Null. Es wird nun ein einfaches Beispiel für die Verwendung von Input-Output-Variablen betrachtet. Dies ist ein sehr mächtiges Konzept. In TradeStation ist das beste Beispiel für die Verwendung dieses Konzepts in den linearen Regressionsfunktionen: Diese Funktion gibt uns alle Variablen, die in Regressionsmodellen verwendet werden. Wir können sehen, die Eingänge für diese Funktion: Wir können sehen, dass wir prognostizieren eine beliebige Anzahl von Bars in der Vergangenheit oder Zukunft können wir die Steigung, Winkel, Intercept und den Wert zurück. Auf diese Weise kann dieser Code für viele Wrapper-Funktionen sowie komplexere Modelle und Systeme verwendet werden und diese Berechnungen nur einmal durchführen. Hier sehen Sie ein Beispiel, wie TradeStation das in einem Wrapper verwendet hat. Ein erster Blick auf die vollständige lineare Regressionsfunktion. Wir erstellen nun eine lineare Regressions-Slope-Funktion, die die Multiple-Output-Funktion von oben verwendet. Dies ist ein Beispiel für die Erstellung dieser Super-Funktionen und die Verwendung von Wrapper, um sie für mehrere Zwecke zu verwenden. Ich hoffe, dieses Tutorial hat erklärt, wie man byref verwendet und Funktionen macht, die mehrere Ausgänge zurückgeben und wie sie verwendet werden können, um den komplexen Code zu vereinfachen und wertvolle wiederverwendbare Funktionen zu machen. Featured Product Erstellen Sie adaptive Indikatoren in Ihren TradeStation-Strategien. Die adaptive Indikatorbibliothek optimiert automatisch ihre Indikatoren auf die Hälfte des gegenwärtigen dominanten Zyklus basierend auf der Verwendung der Hilbert-Transformation. Erfahren Sie mehr Free TradeStation Code Holen Sie sich kostenlose, vereinfachte Versionen der Tools, die die TradeStation-Experten in ihrer täglichen Forschung und beim Systemaufbau verwenden. Diese Tools helfen Ihnen, EasyLanguage zu erlernen, da sie vollständig Open Source sind und Sie komplexe Systeme erstellen können, ohne dass Sie wissen müssen, wie Sie Code schreiben können. Sie müssen lediglich einen Namen und eine E-Mail-Adresse angeben. Keine Kreditkarte oder Adresse erforderlich Über Murray Ruggiero Jr. Murray Ruggiero ist der Chef-Systementwickler und Marktanalyst bei TTM. Er ist einer der weltweit führenden Experten für den Einsatz von inter-market und Trendanalyse bei der Lokalisierung und Bestätigung der Entwicklung der Preisbewegungen in den Märkten. Murray wird oft in der Industrie als der Einstein der Wall Street bezeichnet. Weiterlesen.


No comments:

Post a Comment