Sunday, 9 April 2017

Icustom Gleitender Durchschnitt

Ich bin neu in der Kodierung und lerne viel, aber ich habe etwas geschlagen, dass ich meinen Kopf nicht im Moment bekomme, ich versuche, das Ergebnis eines Tests in einem meiner Indikatoren anzurufen, zu einem ea, also kann es Fügen Sie es zu seinen eigenen Tests, bevor Sie einen Handel Die ea ist ein einfaches gleitendes durchschnittliches Kreuz Der Indikator ist ein Trending oder Range Indikator Ich habe den Indikator Code. Ich möchte Hilfe, und wenn möglich erklärt einfach so kann ich meinen Kopf um Wie es im Inneren des Indikators eingerichtet werden soll, für die ea, um es zu erkennen. Sobald ich den Indikator sortiert habe, gehe ich auf die ea. Die Anzeige hat zwei Tests, in denen ich die iCustom Funktion hinzufügen möchte Ich möchte es nur in einem Test hinzufügen, es ist nicht wichtig, wie ich es versuche, es zu verstehen. Jeder, der bereit ist zu helfen und es zu erklären, wäre einfach sehr vorteilhaft - ich kann nicht scheinen, irgendetwas online zu finden, das es so erklärt Verstehe es Das Ergebnis des Tests könnte einfach nur wahr sein. Thanks im Voraus für Sie Zeit Mike. iCustom ermöglicht es Ihnen, auf Ihre Indikatoren Puffer es ist so einfach. Zum Beispiel, Sie schreiben eine EA, die eine Strategie auf 2 Indikatoren basiert zugreifen , Könnten Sie den Indikator-Code in die EA zu bauen, das ist möglich, aber iss ein wenig beteiligt als Indikator Puffer don t Arbeit an EAs, müssten Sie Arrays verwenden und behandeln sie in einer als Serie Mode die Alternative ist, dass die Indikatoren laufen Und Zugriff auf ihre Puffer von der EA Dies ist, was iCustom erleichtert Keine Änderungen sind erforderlich, um die Indikatoren der EA einfach auf die Puffer, die es braucht, auf die Verschiebung Werte, die es braucht Im iCustom-Aufruf kann es auch alle externen Variablen, die benötigt werden, um die Indikator wie anwendbar. iCustom erlaubt Ihnen, auf Ihre Indikatoren zu puffern, die es so einfach ist. Zum Beispiel schreibst du eine EA, die eine Strategie hat, die auf 2 Indikatoren basiert, könntest du den Indikator-Code in die EA bauen, das ist möglich aber iss a Wenig beteiligt als Indikator Puffer don t Arbeit an EAs, müssten Sie Arrays verwenden und behandeln sie in einer als Serie Mode die Alternative ist, um die Indikatoren laufen und Zugriff auf ihre Puffer aus dem EA Dies ist, was iCustom erleichtert Keine Änderungen erforderlich sind Die Indikatoren der EA greift einfach auf die Puffer, die es braucht, bei den Verschiebungswerten, die es braucht. Im iCustom-Aufruf kann es auch alle externen Variablen übergeben, die benötigt werden, um den Indikator wie nötig einzurichten. Danke für diese RaptorUK, aber es ist die eigentliche Codierung, die ich habe Ich habe Schwierigkeiten mit mir bin sehr neu in MQL4, und habe es nur ein paar Monate getan, und bin immer noch lernen - so brauche ich eine einfache Erklärung der Codierung und wie man es in der Indikator. Creation of Custom Indikatoren. Wenn die Schaffung einer Handelsstrategie ein Entwickler oft die Notwendigkeit, grafisch in einem Sicherheitsfenster eine bestimmte Abhängigkeit von einem Benutzer-Programmierer berechnet zu erstellen MFS4 bietet die Möglichkeit der Erstellung von benutzerdefinierten Indikatoren. Custom Indicator ist ein Anwendungsprogramm in MQL4 kodiert Ist grundsätzlich für die grafische Darstellung von vorläufig berechneten Abhängigkeiten gedacht. Kundenspezifische Indikatorstruktur. Gebenheit der Puffer. Das Hauptprinzip, das den benutzerdefinierten Indikatoren zugrunde liegt, ist die Übergabe von Werten von Indikatorarrays an ein Client-Terminal zum Zeichnen von Indikatorlinien über Tauschpuffer. Buffer ist ein Speicherbereich, der numerisch enthält Werte eines Indikator-Arrays. MQL4-Standard impliziert die Möglichkeit, bis zu acht Indikatorlinien mit einem benutzerdefinierten Indikator zu erstellen Ein Indikator-Array und ein Puffer werden in Übereinstimmung mit jeder Indikatorzeile gebracht Jeder Puffer hat seinen eigenen Index Der Index des ersten Puffers ist 0 , Von der zweiten - 1, und so weiter, die letzte hat den Index 7 Abb. 115 zeigt, wie die Information von einem benutzerdefinierten Indikator über Puffer an ein Client-Terminal übergeben wird, um Indikatorzeilen zu zeichnen. Fig 115 Übergeben von Werten von Indikator-Arrays über Ein Puffer zu einem Client-Terminal. Die allgemeine Reihenfolge der Gebäude-Indikatorzeilen ist die folgenden.1 Berechnungen werden in einem benutzerdefinierten Indikator durchgeführt, so dass numerische Werte den Indikator-Array-Elementen zugeordnet sind.2 Werte von Indikator-Array-Elementen werden an ein Client-Terminal gesendet Über Puffer.3 Auf den Basen von Wert-Arrays, die von Puffern empfangen werden, zeigt ein Client-Terminal Indikatorzeilen eines Custom Indicators an. Lets s analysiert einen einfachen benutzerdefinierten Indikator, der zwei Zeilen anzeigt - eine Zeile basiert auf maximalen Barpreisen, die zweite verwendet Minimale preise. Beispiel einer einfachen benutzerdefinierten indikator. Let s analysieren in Details die Indikator Teile In jedem Anwendungsprogramm in MQL4 geschrieben können Sie Setup-Parameter, die die richtige Programm-Service von einem Client-Terminal geben In diesem Beispiel der Kopf-Programm-Teil siehe Programm-Struktur Enthält mehrere Zeilen mit Direktiven Eigenschaft. Die erste Anweisung zeigt an, in welchem ​​Fenster das Client-Terminal die Indikatorzeilen zeichnen soll. In MQL4 gibt es zwei Varianten von Zeichnungsindikatorzeilen im Hauptsicherheitsfenster und in einem separaten Fenster Hauptfenster ist das Fenster mit einem Sicherheitstabelle In diesem Beispiel zeigt das Parameter displaychartwindow im Eigenschaftsverzeichnis an, dass ein Client-Terminal Indikatorzeilen im Hauptfenster zeichnen soll. Die nächste Zeile zeigt die Anzahl der im Indikator verwendeten Puffer an. Im analysierten Beispiel werden zwei Indikatorzeilen gezeichnet. Ein Puffer wird zugewiesen Zu jedem Puffer, so dass die Gesamtzahl der Puffer zwei ist. Die nächsten Zeilen beschreiben Farben der Indikatorzeilen. Parameter indicatorcolor1 und indicatorcolor2 definieren die Farbeinstellung für entsprechende Puffer - in diesem Fall für Puffer mit Indizes 0 Blau und 1 Rot Beachten Sie, dass die Zahlen in Parameternamen indicatorcolor1 und indicatorcolor2 sind keine Pufferindizes Diese Zahlen sind Teile von konstanten Namen, die in Übereinstimmung mit Puffern gesetzt werden. Für jede konstante Farbe kann nach dem Ermessen eines Benutzers eingestellt werden. In der nächsten Zeile werden Indikatorarrays deklariert. Der Indikator ist vorgesehen Zum Zeichnen von zwei Indikatorlinien, also müssen wir zwei globale eindimensionale Arrays deklarieren, eine für jede Zeile Namen von Indikator-Arrays sind bis zu Benutzer In diesem Fall werden die Array-Namen Buf0 und Buf1 verwendet, in anderen Fällen können auch andere Namen verwendet werden, Z. B. Line1, Alfa, Integral usw. Es ist notwendig, Arrays auf globaler Ebene zu deklarieren, da Array-Elemente-Werte zwischen den Anrufen des speziellen Funktionsstarts beibehalten werden müssen. Der beschriebene Custom-Indikator basiert auf zwei Sonderfunktionen - init Und starten Die Funktion init enthält den Teil des Codes, der auf dem Programm nur einmal verwendet wird, siehe Sonderfunktionen. Eine sehr wichtige Aktion wird in der Zeile durchgeführt. Mit der Funktion SetIndexBuffer wird in diesem Fall ein notwendiger Puffer mit dem Index 0 in Übereinstimmung mit einem gesetzt Array in diesem Fall Buf0 Es bedeutet für die Erstellung der ersten Indikatorzeile ein Client-Terminal akzeptieren Daten in der Array Buf0 mit dem Null-Puffer für it. Further die Linie Stil definiert ist. Für den Null-Puffer 0 ein Client-Terminal sollte die folgenden verwenden Zeichnungsstile einfache Linie DRAWLINE, durchgezogene Linie STYLESOLID, Linienbreite 2.Die nächsten beiden Zeilen enthalten Einstellungen für die zweite Zeile. Danach werden nach dem Code der Sonderfunktion init beide Indikatorzeilen im Hauptfenster der Sicherheit gezeichnet Wird eine feste blaue Linie mit der Breite 2, die zweite ist eine rote gepunktete Linie STYLEDOT einer üblichen Breite Indikator Linien können von anderen Stilen auch gezeichnet werden Styles of Indicator Lines. Calculating Werte von Indicator Arrays Elemente Seien Sie aufmerksam. Values Der Indikator-Arrays-Elemente werden im Sonderfunktions-Start berechnet. Um den Inhalt des Start-Codes richtig zu verstehen, beachten Sie die Reihenfolge der Index-Balken. Der Abschnitt Arrays beschreibt im Detail die Methode der Indizierung von Arrays-Timeeries. Nach dieser Methode startet die Indexierung von Null Null-Bar ist ein aktueller und dennoch ungeformter Bar Der nächste Bar-Index ist 1 Der nächste s ist 2 und so weiter. Als neue Balken in einem Sicherheitsfenster erscheinen, werden die Indizes der bereits gebildeten History-Balken geändert. Der neue, gerade geformte, rechtsextreme Bar bekommt den Null-Index, der eine links von ihm, der gerade voll geformt hat, bekommt den Index 1 und die Werte der Indizes aller History-Balken werden ebenfalls um eins erhöht. Die beschriebene Methode der Indexierung von Balken ist die einzige, die für das Ganze möglich ist On-line-Handelssystem MetaTrader, und es wird bei der Zeichnung von Zeilen mit Hilfe von technischen und benutzerdefinierten Indikatoren berücksichtigt. Es wurde früher gesagt, dass Indikatorzeilen auf der Basis von numerischen Informationen in Indikator-Arrays erstellt werden Ein Indikator-Array enthält Informationen über Punkte-Koordinaten Auf dem eine Indikatorzeile gezeichnet wird und die Y-Koordinate jedes Punktes der Wert eines Indikator-Array-Elements ist und die X-Koordinate der Wert eines Indikator-Array-Element-Index ist. Im analysierten Beispiel wird die erste Indikatorzeile mit den maximalen Werten der Balken gezeichnet , 116 zeigt diese Indikatorzeile der blauen Farbe in einem Sicherheitsfenster, sie basiert auf der Basis des Indikatorarrays Buf0.Fig 116 Korrespondenz der Koordinaten einer Indikatorzeile zu den Werten eines Indikatorarrays. Indexwert eines Indikatorarrays ist aus Durch ein Client-Terminal in Übereinstimmung mit einem Bar-Index - diese Indexwerte sind gleich Es muss auch berücksichtigt werden, dass der Prozess der Erstellung von Indikatorlinien im Echtzeit-Modus unter Bedingungen geht, wenn in einem Sicherheitsfenster neue Balken von Zeit zu Zeit erscheinen Und alle Geschichtsstäbe sind nach links verschoben Um die Indikatorlinie korrekt zu lassen, muss jeder Zeilenpunkt oberhalb seiner Leiste auch mit den Balken verschoben werden. Es besteht also die Notwendigkeit, eine Indikatoranordnung neu zu indexieren. Der Grundgedanke eines Indikators Array aus einem üblichen Array ist folgendes. In dem Moment, in dem ein neuer Balken erstellt wird, werden Indexwerte von Indikator-Array-Elementen automatisch durch das Client-Terminal geändert, nämlich - der Wert jedes Indikator-Array-Index wird um eins erhöht und die Indikator-Array-Größe Wird um ein Element mit einem Null-Index erhöht. Zum Beispiel hat die Null-Bar in Abb. 116 Zeitrahmen H1 die Öffnungszeit 6 00 Bei 7 00 erscheint eine neue Leiste im Sicherheitsfenster. Die mit 6 00 geöffnete Leiste erhält automatisch den Index 1 Um die Indikatorzeile korrekt auf diese Leiste zu zeichnen, ändert das Client-Terminal den Index des Indikator-Array-Elements entsprechend der Bar, die bei 6 00 geöffnet wurde. In der Tabelle in Abb. 116 wird dieses Element in die erste Zeile zusammen mit diesen Indizes geschrieben Aller Array-Elemente wird durch das Client-Terminal um eins erhöht. Der Index des Array-Elements, der dem bei 6 00 geöffneten Balken entspricht, erhält den Wert 1, bevor er gleich 0 ist. Das Indikator-Array wird um ein Element größer Index eines neuen hinzugefügten Elements wird gleich 0 sein, der Wert dieses Elements wird ein neuer Wert sein, der die Koordinate der Indikatorzeile auf einem Nullpunkt reflektiert. Dieser Wert wird im Sonderfunktionsstart bei jedem Tick berechnet. Berechnungen in der Sonderfunktion Start sollte so durchgeführt werden, dass keine zusätzlichen Aktionen durchgeführt wurden Bevor der Indikator an ein Diagramm angehängt wird, spiegelt es keine Indikatorzeilen, da Werte von Indikatorarrays noch nicht definiert sind. Das ist der Grund, warum beim ersten Start des speziellen Funktionsstart-Indikator-Arrays Werte müssen für alle Takte berechnet werden, auf denen die Indikatorzeile gezeichnet werden soll. Im analysierten Beispiel handelt es sich hierbei um alle Balken, die in einem Diagramm vorhanden sind, wobei die anfänglichen Berechnungen nicht für alle verfügbaren Stäbe durchgeführt werden können, sondern für einen letzten Teil der Geschichte beschrieben wird In weiteren Beispielen Ar alle weiteren Starts des Sonderfunktionsstarts gibt es keine Notwendigkeit, Werte des Indikator-Arrays für alle Takte wieder zu berechnen Diese Werte sind bereits berechnet und im Indikator-Array enthalten. Es ist notwendig, den aktuellen Wert der Indikatorzeile zu berechnen Nur bei jedem neuen Tick der Null-Bar. Für die Implementierung der beschriebenen Technologie gibt es eine sehr nützliche Standard-Funktion in MQL4 - IndicatorCounted. Function IndicatorCounted. This Funktion gibt die Anzahl der Bars, die nicht seit dem letzten Indikator call. If geändert haben Der Indikator wurde noch nie an einem Diagramm angehängt, bei der ersten Startausführung ist der Wert der Zählbars gleich Null. Es bedeutet, dass das Indikator-Array kein Element mit einem früheren vordefinierten Wert enthält, weshalb das gesamte Indikator-Array berechnet werden muss Von Anfang bis Ende Das Indikator-Array wird von der ältesten Leiste bis zum Null berechnet. Ein Index der ältesten Leiste, ab dem die Berechnungen gestartet werden müssen, wird auf folgende Weise berechnet. Im Augenblick der Anbringung des Indikators sind ca. 300 bar vorhanden Ein Diagrammfenster Dies ist der Wert der vordefinierten Variablen Bars Wie zuvor definiert, sind die Zählerbars gleich 0 Also, als Ergebnis erhalten wir, dass der Index der ersten unzähligen Leiste der letzte, ab dem die Berechnungen durchgeführt werden sollen, gleich ist 299.Alle Werte von Indikator-Array-Elementen werden in der Schleife berechnet. Während i innerhalb des Bereichs von der ersten unzähligen Leiste 299 bis zur aktuellen 0 ist, werden die Werte der Indikator-Array-Elemente für beide Indikatorzeilen berechnet. Anmerkung, fehlende Werte von Indikator-Array-Elemente werden während eines der ersten Start des Sonderfunktionsstarts berechnet Bei den Berechnungen erinnert sich das Client-Terminal an Elemente, für die Werte berechnet wurden. Die letzte Iteration wird bei gleichem Wert gleich 0, dh Werte von Indikator-Arrays werden berechnet Der Null-Balken Wenn die Schleife vorbei ist, beendet die Sonderfunktionsbeginn ihre Ausführung und die Steuerung wird an das Client-Terminal weitergegeben. Das Client-Terminal wird in diesem Fall alle Indikatorzeilen entsprechend den berechneten Werten der Array-Elemente zeichnen Der nächste Tickstart wird vom Client-Terminal wieder gestartet Weitere Aktionen werden von der Situation abhängen, die wir weiter analysieren werden Beispiel für 300 bar. Variant 1 Ein neues Tick kommt bei der Bildung der aktuellen Null-Bar die häufigste Situation. Fig 117 Das verarbeitete Tick gehört zum aktuellen Balken. 117 zeigt zwei Zecken, die vom Terminal in Momenten der Zeit t 1 und t 2 empfangen werden. Die analysierte Situation wird für beide Ticks gleich sein. Lassen Sie uns die Ausführung des Anfangs, der gerade gestartet wurde, verfolgen T 2 Während der Ausführung des Funktionsstarts wird die folgende Zeile ausgeführt. IndicatorCounted gibt den Wert 299 zurück, dh seit dem letzten Startaufruf wurden 299 vorherige Takte nicht geändert. Als Ergebnis ist der Indexwert gleich 0 300-299- 1.Es bedeutet in der nächsten while-Schleife die Werte von Array-Elementen mit dem Null-Index wird berechnet Mit anderen Worten, die neue Position einer Indikatorzeile auf der Null-Leiste wird berechnet Wenn der Zyklus beendet ist, wird der Start nicht mehr ausgeführt Wird die Kontrolle an die Client-Terminal übergeben. Variant 2 Eine neue Tick ist die erste Tick eines Null-Bar passiert von Zeit zu Zeit. Fig 118 Die verarbeitete Tick ist die erste Tick einer neuen Null-Bar. In diesem Fall die Tatsache der Erscheinung von Eine neue Leiste ist wichtig Bevor das Steuerelement an den Sonderfunktionsstart übergeben wird, zeichnet das Client-Terminal alle im Sicherheitsfenster vorhandenen Balken wieder auf und re-indexiert alle deklarierten Indikator-Arrays, die in Übereinstimmung mit Puffern gesetzt sind. Außerdem wird das Client-Terminal daran erinnern, dass es bereits vorhanden ist 301 Takte, nicht 300 in einem Diagrammfenster. Fig 118 enthält Situation, wenn beim letzten Tick der vorherigen Leiste zum Zeitpunkt t 2 der Funktionsstart erfolgreich gestartet und ausgeführt wurde. Das ist, warum jetzt der erste Balken mit Index 1 beendet ist Der Moment t 2 wurde durch den Indikator berechnet, die Funktion IndicatorCounted wird den Wert zurückgeben, der auf der vorherigen Leiste lag, dh 299. Im nächsten Zeilenindex wird ich berechnet, in diesem Fall für das erste Häkchen eines neuen Taktes ist es gleich 1 301-299-1.Es bedeutet die Berechnung der Indikator-Array-Werte in while-Schleife beim Auftreten eines neuen Balken wird sowohl für den letzten Balken und für die neue Null-Bar durchgeführt Ein wenig früher bei der Re-Indexierung der Indikator-Arrays der Client Terminal erhöhte Größen dieser Arrays Werte von Array-Elementen mit Null-Indizes wurden nicht vor den Berechnungen in der Schleife definiert. Bei Berechnungen in der Schleife erhalten diese Elemente einige Werte Wenn Berechnungen im Start vorbei sind, wird die Steuerung an das Client-Terminal zurückgegeben. Danach wird der Client Terminal zeichnet Indikatorzeilen auf dem Null-Balken, basierend auf nur berechneten Werten von Array-Elementen mit Null-Indizes. Variant 3 Ein neues Tick ist das erste Tick eines neuen Null-Bar, aber das letzte, aber ein Tick wird nicht selten verarbeitet Nicht alle Zecken der vorherigen Leiste wurden verarbeitet. Fig 119 zeigt die Situation, in der der Start beim ersten Tick eines neuen Stabes im Moment t 5 gestartet wurde. Vorheriges Mal wurde diese Funktion im Moment t 2 Tick, der zum Terminal kam Der Moment t 3 roter Pfeil wurde nicht durch den Indikator verarbeitet Dies geschah, weil die Startausführungszeit t 2 - t 4 größer ist als das Intervall zwischen den Zecken t 2 - t 3 Diese Tatsache wird vom Clientterminal während der Ausführung des gestarteten Starts erkannt Im Moment t 5 Während der Berechnungen in der Zeile. IndicatorCounted wird der Wert zurückgegeben 299 Dieser Wert ist wahr - ab dem Moment des letzten Indikatoraufrufs wurden 299 Balken nicht schon jetzt geändert 301 Das ist der Grund, warum der berechnete Index des ersten linken Stabes , Von denen Berechnungen von Array-Element-Werten gestartet werden müssen, ist gleich 1 301-299-1.it bedeutet während während der Ausführung zwei Iterationen durchgeführt werden Während der ersten werden Werte von Array-Elementen mit dem Index i 1 berechnet, Dh Buf0 1 und Buf1 1 Nicht, sobald die Berechnungen beginnen, werden die Balken und die Indikator-Arrays bereits vom Client-Terminal neu indiziert, weil ein neuer Balken gestartet wurde, zwischen den Starts des Sonderfunktionsstarts. Das ist der Grund, warum Berechnungen für Elemente von Arrays mit Index 1 wird auf der Basis von Array-Timeeries maximalen und minimalen Werten eines Bar-Preises auch mit dem Index 1 berechnet. Bei der zweiten Iteration von Werten für Werte mit Null-Indizes, dh für die Null-Bar, wird auf der Basis von berechnet Die bisher bekannten Werte der Arrays-Zeitreihen. Die Verwendung der beschriebenen Technologie für die Berechnung von kundenspezifischen Indikatoren ermöglicht es zunächst, die Berechnung der Werte aller Indikator-Array-Elemente unabhängig von der Besonderheit der Tick-Historie zu garantieren und zweitens nur Berechnungen durchzuführen Unzählige Stäbe, dh die Verwendung von ökonomisch berechneten Ressourcen. Nicht, wird ein Balken als unzählbar betrachtet, wenn die Berechnung der Elementwerte eines Indikator-Arrays mindestens für ein letztes Tick der Leiste nicht durchgeführt wird. Wenn Sie die benutzerdefinierte Anzeige in einem Diagrammfenster betrachten, sehen Sie zwei Linien - eine dicke blaue Linie, die auf Stabmaxima aufgebaut ist, und eine gepunktete rote Linie, die auf ihren Minima gebaut ist Abb. 120.Fig 120 Zwei Indikatorlinien in einem Sicherheitsfenster, gebaut durch den Indikator. Es sollte beachtet werden, dass man einen benutzerdefinierten Indikator bauen kann, Indikatorzeilen, die mit den Linien eines analogen technischen Indikators übereinstimmen, kann leicht gemacht werden, wenn als Berechnungsformeln im Custom Indikator die gleichen Formeln wie im technischen Indikator verwendet werden. Um dies zu verdeutlichen, verbessern wir den Programmcode, der in der Vorheriges Beispiel Lassen Sie den Indikator Zeilen auf Mittelwerte von Maximalwerten und Minimums von mehreren letzten Takten zeichnen. Es ist leicht, notwendige Berechnungen durchzuführen. Wir müssen einfach nur Mittelwerte von Arrays-Timeeries-Elementen finden. Beispiel: Wert eines Indikator-Arrays mit dem Index 3 ie Indikatorzeilen-Koordinate für den dritten Stab auf der Basis der letzten fünf Maxima wird folgendermaßen berechnet. Buf0 3 Hoch 3 Hoch 4 Hoch 5 Hoch 6 Hoch 7 5.Analogische Berechnungen können für eine Indikatorlinie durchgeführt werden, die auf Minimum gebaut ist. Beispiel von Eine einfache benutzerdefinierte Anzeige Indikatorzeilen werden auf durchschnittlichen minimalen und maximalen Werten von N Stäben aufgebaut. In diesem Beispiel gibt es eine externe Variable AverBars Mit dieser Variablen kann ein Benutzer die Anzahl der Balken angeben, für die ein Mittelwert berechnet wird. Beginnen Sie diesen Wert Wird für die Berechnung eines Mittelwertes verwendet In der Schleife für die Summe der maximalen und minimalen Werte wird für die Anzahl der Balken berechnet, die dem Wert der Variablen entsprechen. AverBars In den nächsten beiden Programmzeilen werden die Werte der Indikator-Array-Elemente für das Indikator berechnet Zeilen, die minimalen und maximalen Werten entsprechen. Die hier verwendete Mittelungsmethode gilt auch für Berechnungen im technischen Indikator Moving Average Wenn wir den analysierten Custom Indikator und den technischen Indikator Moving Average anhängen, sehen wir drei Indikatorzeilen Wenn der gleiche Zeitraum der Mittelung ist Für beide Indikatoren eingerichtet ist, wird die Moving Average-Linie mit einer der benutzerdefinierten Indikatorzeilen übereinstimmen, die in Abb. 121 beschrieben sind. In den technischen Indikatoreinstellungen müssen die Parameter angegeben werden. Fig 121 Übereinstimmende Zeilen eines technischen Indikators und einer benutzerdefinierten Indikator rote Linie. Thus, mit technischen Indikator ein Benutzer kann die Reflexion von Regelmäßigkeiten, die in der praktischen Arbeit erforderlich sind. Kundenspezifische Indikator Optionen. Drawing Indicator Lines in separaten Windows. MQL4 bietet einen großen Service für den Aufbau von benutzerdefinierten Indikatoren, die macht sie sehr bequem Im Besonderen Indikator Zeilen können in einem separaten Fenster gezeichnet werden. Dies ist zweckmäßig, wenn die Absolutwerte der Indikatorlinienamplitude wesentlich kleiner oder größer als die Sicherheitspreise sind. Wenn wir zum Beispiel an der Differenz zwischen Mittelwerten von Barmaxima und Minimums in einem bestimmten historischen Intervall interessiert sind , Je nach zeitlicher zeit ist dieser wert etwa von 0 bis 50 punkten, zum Beispiel für m15 Es ist nicht schwer, eine Indikatorlinie zu bauen, aber in einem Sicherheitsfenster wird diese Zeile im Bereich von 0 - 50 Punkten von a gezeichnet Sicherheitspreis, dh wesentlich niedriger als der auf dem Bildschirm reflektierte Kartenbereich Es ist sehr unpraktisch. Um Indikatorlinien in einem separaten Fenster zu zeichnen, das sich im unteren Teil eines Sicherheitsfensters befindet, muss in der Anweisungseigenschaft am Programmanfang Parameterindikator separat sein Spezifiziert. In dem Moment, in dem ein solches Kennzeichen an ein Sicherheitsfenster angehängt ist, erzeugt das Client-Terminal ein separates Fenster unterhalb eines Diagramms, in dem die Indikatorzeilen, die in dem Indikator berechnet werden, gezeichnet werden. Je nach Farbeinstellungen und Typen von Indikatorlinien werden sie gezeichnet In diesem oder jenem style. Limiting Calculation History. In den meisten Fällen Indikatorzeilen enthalten nützliche Informationen nur in der jüngsten Geschichte Der Teil der Indikatorlinien auf alten Bars zum Beispiel, 1 Monat alten Minuten Zeitrahmen kann kaum als nützlich für die Herstellung von Entscheidungen getroffen werden Außerdem, wenn es viele Stäbe in einem Diagrammfenster gibt, ist die Zeit in die Berechnung investiert und das Zeichnen von Indikatorlinien ist unangemessen groß Dies kann im Programm-Debugging kritisch sein, wenn ein Programm oft kompiliert und dann gestartet wird. Deshalb ist es notwendig Um Berechnungen nicht für die ganze Geschichte durchzuführen, sondern für den begrenzten Teil der letzten Bar-Geschichte. Zu diesem Zweck wird eine externe Variablenhistorie im folgenden Programm verwendet. Wert dieser Variablen wird bei der Berechnung des Index des ersten linken Stabes berücksichtigt , Beginnend von denen Elemente von Indikator-Arrays berechnet werden müssen. Weitere Berechnungen in while-Schleife wird für die Anzahl der jüngsten History-Bars nicht größer als History-Wert durchgeführt werden Hinweis, die analysierte Methode zur Begrenzung einer Berechnung Geschichte betrifft nur den Teil der Berechnungen, die sind Im ersten Start des Sonderfunktionsstarts durchgeführt. Wenn neue Balken erscheinen, werden neue Teile der Indikatorlinien im rechten Teil hinzugefügt, während das Bild im linken Teil erhalten bleibt. Somit wird die Indikatorzeilenlänge während des Ganze Indikatorbetriebszeit Gemeinsamer Wert des History-Parameters wird als ca. 5000 bar betrachtet. Beispiel für eine einfache Custom-Indikator Indikatorzeilen werden in einem separaten Fenster gezeichnet. Eine ähnliche Berechnung einer Indikatorzeile erfolgt im technischen Indikator AverageTrue Range Abb. 122 zeigt eine Indikatorzeile Konstruiert durch die benutzerdefinierte Anzeige in einem separaten Fenster und eine Indikatorzeile, die von ATR in einem anderen Fenster konstruiert wird. In diesem Fall sind die Zeilen vollständig identisch, da die Periodendauer für beide Indikatoren gleich ist - 5 Wenn dieser Parameter in einem der Indikatoren geändert wird, Entsprechende Indikatorzeile wird sich auch ändern. Fig 122 Zeichnen einer benutzerdefinierten Indikatorzeile in einem separaten Fenster Identische Zeilen eines technischen Indikators ATR und einer benutzerdefinierten Anzeige. Es ist auch offensichtlich, dass benutzerdefinierte Indikatorlinie nicht für die gesamte Bildschirmbreite konstruiert wird, sondern für 50 Neueste Balken, wie in der externen Variablen angegeben Historie Wenn ein Händler ein größeres Verlaufsintervall verwenden muss, kann der Wert der externen Variablen einfach über das benutzerdefinierte Indikatoreinstellungsfenster geändert werden. 123 zeigt ein Sicherheitsfenster, in dem die Indikatorzeile, die wir eingezeichnet haben Ein anderer Stil - als Histogramm Für ein solches Ergebnis wurde eine Zeile im Programmcode geändert - andere Linienstile werden angezeigt. Alle anderen Codeteile sind unverändert. Fig 123 Zeichnen benutzerdefinierte Indikatorzeile in einem separaten Fenster Histogramm Ähnlichkeit der Zeichnungen eines technischen Indikator ATR und eine benutzerdefinierte Indikator. Schalten Indikator Linien vertikal und horizontal. In einigen Fällen ist es notwendig, eine Indikatorlinie zu verschieben Es kann leicht durch MQL4 getan werden, lassen Sie s analysieren ein Beispiel, in welcher Position der Indikatorlinien in einem Sicherheitsfenster sind Berechnet nach den von einem Benutzer angegebenen Werten. Beispiel für eine benutzerdefinierte Indikator Verschiebung der Indikatorzeilen horizontal und vertikal. Für die Anpassung der Linien in einem Diagramm zu ändern, gibt es zwei externe Variablen - LeftRight für die horizontale Verschiebung aller Zeilen und UpDown zum Verschieben von zwei gestrichelten Linien Vertikal. Der Algorithmus, der für die Berechnung von Werten entsprechender Arrayelemente verwendet wird, basiert auf sehr einfachen Regeln. Um eine Linie horizontal zu verschieben, ordnen Sie den berechneten Wert einem Arrayelement zu, dessen Index von LeftRight größer ist, um nach rechts und weniger zu verschieben Die nach rechts verschoben wird, als der Index einer Leiste, für die Berechnungen durchgeführt werden. Um eine Linie vertikal zu verschieben, muss der UpDown-Punkt hinzugefügt werden, um nach oben oder nach unten zu verschieben, um nach unten zu jedem Wert eines Indikator-Arrays zu zeichnen, das die Anfangszeilenposition kennzeichnet Analysierte Beispielindizes werden in der Zeile berechnet. Hier i ist der Index eines Balkens, für den Berechnungen durchgeführt werden, k ist ein Index eines Indikator-Array-Elements Die rote Indikatorzeile, die vom Client-Terminal basierend auf dem Indikator-Array Line0 angezeigt wird, wird verschoben Die linke von 5 bar nach benutzerdefinierten Einstellungen, siehe Abb. 124 von der Anfangszeile In diesem Fall ist die Anfangszeile ein Moving Average mit der Periodendauer von Mittelwert gleich 5 die Formel der MA Berechnung ist hoch i Low i 2.In diesem Beispiel Die Position der roten Linie ist die Grundlage für die Berechnung der Indikator-Array-Werte für zwei andere Zeilen, dh ihre Position auf dem Diagramm. Die gestrichelten Linien werden auf diese Weise berechnet. Die Verwendung von Index k für Elemente aller Indikator-Arrays erlaubt es, Berechnungen für Elemente durchzuführen Der Arrays Line1, Line2 auf demselben Balken, wie sie für die Berechnung der Werte des entsprechenden Basisarrays verwendet werden. Line0 Als Ergebnis werden die gestrichelten Linien gegenüber der roten Linie um den im Indikatoreinstellungsfenster angegebenen Wert verschoben, in diesem Fall um 30 Punkte Abb. 124.Fig 124 Rote Indikatorlinie wird nach links um 5 bar verschoben. Die gepunkteten Indikatorlinien sind relativ zu der roten Linie um 30 Punkte verschoben. Legen von benutzerdefinierten Indikatoren. Es gibt einige Einschränkungen in MQL4, die bei der Programmierung von benutzerdefinierten berücksichtigt werden sollten Indikatoren. Es gibt eine Gruppe von Funktionen, die nur in benutzerdefinierten Indikatoren verwendet werden können und nicht in Expert Advisors und Scripts verwendet werden können IndicatorBuffers, IndicatorCounted, IndicatorDigits, IndicatorShortName, SetIndexArrow, SetIndexBuffer, SetIndexDrawBegin, SetIndexEmptyValue, SetIndexLabel, SetIndexShift, SetIndexStyle, SetLevelStyle, SetLevelValue . Auf der anderen Seite können Handelsfunktionen nicht in Indikatoren verwendet werden OrderSend, OrderClose, OrderCloseBy, OrderDelete und OrderModify Dies liegt daran, dass Indikatoren im Interface-Flow im Gegensatz zu Expert Advisors und Scripts arbeiten, die in ihrem eigenen flow betrieben werden. Dies ist auch der Grund, warum Algorithmen Basierend auf Looping kann nicht in benutzerdefinierten Indikatoren verwendet werden. Beginn eines benutzerdefinierten Indikators, der eine endlose Schleife in Bezug auf die tatsächliche Ausführungszeit enthält, kann dazu führen, dass das Client-Terminal mit einer weiteren Notwendigkeit aufhört, einen Computer neu zu starten. Die allgemeinen Vergleichsmerkmale von Expertenberatern, Skripten und Indikatoren Ist in Tabelle 2bined Verwendung von Programmen enthalten. Es wurde früher gesagt, dass nach MQL4-Regeln Handelsfunktionen nicht in benutzerdefinierten Indikatoren verwendet werden können, weshalb für den automatisierten Handel Expert Advisors oder Scripts verwendet werden sollten. Allerdings ist die ressourcenschonende Technologie für Berechnungen verwendet In Indikatoren siehe Erstellung von benutzerdefinierten Indikatoren ist weit verbreitet bei der Erstellung von Handelsprogrammen In den meisten Fällen in benutzerdefinierten Indikatoren kann man effizient berechnen Werte der Indikator-Array-Elemente für die Bildung von Handelskriterien und die Herstellung von Handelsentscheidungen in Expert Advisors. Calculation durchgeführt in benutzerdefinierten Indikatoren durchgeführt Technisch auch in Expert Advisors implementiert werden kann, aber dies kann dazu führen, dass die Berechnung von Berechnungen in verschiedenen Anwendungsprogrammen und zu unangemessenen Ressourcenverschwendung und in einigen Fällen, wenn lange ressourcenintensive Berechnungen durchgeführt werden - zu einer Handelsentscheidung, die in der Fälle, in denen es nötig ist, Berechnungsergebnisse von benutzerdefinierten Indikatoren in einem Expert Advisor oder Skript zu verwenden, kann die Funktion iCustom verwendet werden. Funktion iCustom. Calculation des angegebenen benutzerdefinierten Indikators Der benutzerdefinierte Indikator muss kompiliert werden und befindet sich im Verzeichnis Terminalcatalogue expert indicators. symbol - Symbolname eines Wertpapiers, auf dessen Daten ein Indikator berechnet wird NULL gibt das aktuelle Symbol an. Zeitrahmen - Periode Kann eine der Diagrammperioden sein 0 bedeutet die Periode des aktuellen chart. name - Name des benutzerdefinierten Indikators. - Liste der Parameter bei Bedarf Passierte Parameter müssen mit der Reihenfolge der Deklaration und der Art der externen Variablen eines benutzerdefinierten Indikators entsprechen. Mode - Index einer Indikatorzeile Kann von - bis 7 sein und muss dem Index entsprechen, der von einer von SetIndexBar verwendet wird Functions. shift - Index des erhaltenen Wertes aus einem Indikatorpuffer verschiebt sich relativ zu einem aktuellen Balken um eine vorgegebene Anzahl von Takten zurück. Lassen Sie sich überlegen, wie iCustom in der Praxis verwendet werden kann. Lassen Sie uns das folgende Problem lösen. Problem 30 Eine Handelsstrategie basiert Auf die Daten der benutzerdefinierten Indikator Wenn ROC Zeile in der aktuellen Zeitrahmen orange kreuzt eine geglättete durchschnittliche Rate Linie dick rot unterhalb einer bestimmten Ebene von unten nach oben, ist dies ein relevantes Kriterium zu kaufen kaufen Kaufen und schließen Verkauf Wenn es gegensätzliche Bedingungen, betrachten dies a relevant criterion to sell Write a code implementing this strategy. The principle of construction of the custom indicator is described in details in the section Custom Indicator ROC Price Rate of Change Fig 131 illustrates two points, in which ROC line in the current timeframe M15 crosses the smoothed rate of change line In point A the orange line crosses the red one from bottom upwards and the place of first intersection is below the level -0 001 In point B the orange line crosses the red one in the downward direction and the cross point is above the level 0 001 The fact of this crossing must be detected in the Expert Advisor and be considered as a signal to buy point A - close Sell and open Buy or to sell point B - close Buy and open Sell. Fig 131 Crossing of custom indicator lines is considered as a trading criterion. When solving such problems a ready Expert Advisor can be used, changing the order of calculation trading criteria in it In this case we can take as a basis the Expert Advisor described in the section Simple Expert Advisor The EA calculating trading criteria on the basis of a custom indicator will look loke this. Let us analyze what amendments were made in the source code The main part of the Expert Advisor used as basic has not changed Changes have been made in two blocks - block 1-2- and block 5-6.In the block 5-6 trading criteria are calculated In the described EA a trading strategy is based on two trading criteria - criterion to open Buy and criterion to open Sell The strategy used in the Expert Advisor allows the presence of only one opened market order, pending orders are not allowed The strategy also presupposes closing an opposite order when a criterion for opening triggers for example, if criterion to open a Buy order is relevant, it means that a Sell order must be closed. For using in the EA results of calculations performed in the custom indicator function iCustom must be executed. In this case formal parameters specified in iCustom call denote the following. NULL - calculations in the indicator are performed based on data of the current security in this case the EA is attached to EURUSD window, so data of EURUSD will be used see Fig 131.0 - in calculations data of the current timeframe are used in this case the current timeframe is M15, so data corresponding to M15 will be used. rocseparate - name of a custom indicator, in which calculations will be made. H,P, B,A - list of adjustable parameters In this case the custom indicator has adjustable parameters block 2-3 of code For a user to be able to set up values of these parameters from the EA, they are specified in the list of passed parameters of the function iCustom In the Expert Advisor values of these parameters can differ from those specified in the indicator In such a case during calculations in the indicator exactly these passed values will be used These parameters denote the following. H - number of bars in calculation history. P - period of calculation MA. B - number of bars for rate calculation. A - number of bars for smoothing. the meaning of these parameters is explained in details in the section Custom Indicator ROC Price Rate of Change.1 5 - index line of the indicator In the custom indicator 6 indicator arrays are used ROC line in the current timeframe orange is constructed on the basis of Line1 values, for which buffer with index 1 is used Smoothed average rate line is based on values of Line5 array elements, index of the used buffer is 5.0 - index of value obtained from an indicator buffer shift back relative to a current bar by the specified number of periods In this case values of indicator lines on the zero bar are used, that is why index 0 is specified. For a user to be able to change the adjustable indicator parameters in the EA manually, external variables are specified in block 1a-1b of the Expert Advisor In block 5-5a values of these parameters are assigned to other variables with shorter names - this is done for convenience of code presentation in block 5a-5b Thus a user can specify in parameters, with which calculations in the custom indicator will be conducted After execution iCustom function will return value corresponding to a specified element value of specified indicator array calculated in the indicator using specified values of adjustable parameters. During practical operation it is convenient to see in a security window lines of the indicator, array elements of which are used in the Expert Advisor see Fig 131 At the same time execution of iCustom is not connected with the presence of the indicator in the security window, as well as with the values of its adjustable parameters. The execution of iCustom does not require the attachment of a corresponding indicator to a security window As well as the call of iCustom from any application program does not result in the attachment of a corresponding indicator to a security window Attachment of a technical indicator to a security window also does not lead to the call of iCustom in any application program. Trading criteria in the EA block 5-6 are calculated on the basis of array element values obtained using iCustom function For example a criterion for opening Buy and closing Sell are calculated the following way. If the last known value of a smoothed average rate line L5 is less than the specified level value of the adjustable parameter Level 0 001 and the last known value of ROC line in the current timeframe L1 is larger than the smoothed average rate line L5 , the criterion for opening a Buy order and closing a Sell order is considered relevant For the confirmation of relevance of opposite criteria reflecting conditions are used. Trading criteria accepted in this example are used for educational purpose only and must not be considered as a guideline when trading on a real account.


No comments:

Post a Comment