Coding Hilfe Ich habe versucht zu verwenden i cumtom NonLag ma nrp 2 nmc für meine ea. Ich schrieb den Code wie doppelte MASignal iCustom (Symbol (), 0, NonLag ma nrp 2 nmc, NlmPeriod, NlmPrice, PctFilter, Shift, 0) Es kann den Handel öffnen, aber ich kann nicht den PctFilter Wert wie 2.5 ändern. Es kann nur 2 oder 3 (runde Zahl) einfügen. Warum ich versuche, es direkt in den Code zu ändern und kompilieren Warnung ist Trunkierung von konstanten Wert Und die Shift-Funktion funktioniert auch nicht. Kannst du mir ein paar Ratschläge geben, die ich versuchte, ich zu benutzen, ich habe mich für mich entschlossen. Ich schrieb den Code wie doppelte MASignal iCustom (Symbol (), 0, NonLag ma nrp 2 nmc, NlmPeriod, NlmPrice, PctFilter, Shift, 0) Es kann den Handel öffnen, aber ich kann nicht den PctFilter Wert wie 2.5 ändern. Es kann nur 2 oder 3 (runde Zahl) einfügen. Warum ich versuche, es direkt in den Code zu ändern und kompilieren Warnung ist Trunkierung von konstanten Wert Und die Shift-Funktion funktioniert auch nicht. Kannst du mir einen Rat geben Alle scheinen ok zu sein OK für mich Siehe das beigefügte Beispiel. Test1.mq4 Von der Verschiebung. Alle Verschiebungen verschieben die Anzeigeanzeige auf dem Diagramm. Der aktuelle Barwert ist immer noch O-te Element des Puffers und so weiter, wo es angezeigt wird. Shift ändert das nicht. Es macht es einfach so, als wäre es ein Wert von einer anderen Bar robbob1970: Hallo, in der Hoffnung, dass jemand damit helfen kann. Ich habe diesen Code bei cAlgo gefunden und hoffe, dass jemand es in mq4 umwandeln kann. Vielen Dank im Voraus Also mit meinen variablen Fähigkeiten habe ich es geschafft, diesen benutzerdefinierten Indikator zu klopfen. Es ist ein einfacher PA-Kanal. Allerdings kenne ich Theres einen Bug irgendwo, denn wenn man ihn zum ersten Mal lädt, sieht das Diagramm so aus. Wenn jemand den Code anschauen und mir sagen könnte, wo ich schief gegangen wäre, wäre es sehr dankbar. Es wäre auch echt cool, wenn ein Draw-Rechteck-Funktion hinzugefügt werden könnte, um längere Zeiträume zu identifizieren, wo der Preis trendsChanneling so würde es ein bisschen so etwas aussehen Wie Sie sehen können die Boxen markieren einen Bereich der Nachfrage mit der Theorie, dass wenn der Preis Bewegt sich von diesen Zonen weg und bewegt sich weiter, bis eine neue Versorgungszone erreicht ist. Nach dem vorherigen Beitrag habe ich auch eine Variation geklopft. Gleiches Problem, wenn es zuerst lädt es sieht so aus Wenn es geladen ist, läuft es gut und gibt einen Kanal, der so aussieht. Was wäre gut, wenn jemand die Kanäle glätten und die V-Gipfel und Täler loswerden könnte Denn wenn man beide Indikatoren anwendet Sie haben einen wirklich guten systemMetaTrader 5 - Tester Guide to Testing und Optimierung von Expertenberatern in MQL5 Einleitung Die meiste Zeit, in der ein Entwickler einen Expert Advisor geschrieben hat, stellt sicher, dass der Expert Advisor sein Ziel der guten Profitabilität erreicht, ist immer eine sehr Aufgabenstellung verarbeiten. In diesem Artikel werden wir einige der wichtigsten Schritte bei der Prüfung und Optimierung eines Expert Advisor, so dass wir in der Lage, in der Lage, in der Lage, in der Lage, in der Lage, in der Lage, in der Lage, das gewünschte Ziel des Schreibens der Expert Advisor zu erreichen. 1. Identifizieren und Korrigieren von Code-Fehlern Wir werden diesen Artikel beginnen, indem wir einige gängige Codefehler betrachten, die normalerweise beim Schreiben eines Expert Advisor-Codes auftreten. Die meisten der Zeit Anfänger Gesicht einige harte Zeit identifizieren und korrigieren Code Fehler beim Schreiben ihrer Codes oder bei der Änderung eines Codes von einem anderen Entwickler geschrieben. In diesem Abschnitt werden wir uns anschauen, wie einfach es ist, den MQL5-Editor zu verwenden, um einige dieser Fehler zu identifizieren und zu korrigieren. Sie haben gerade das Schreiben des Codes und es scheint alles sollte nur funktionieren, weil Sie fast sicher sind, dass der Code fehlerfrei ist. Oder es war ein Code, der von jemand anderem geschrieben wurde und du hast ein paar Änderungen gemacht und leider hast du, wenn du die Compile-Taste getroffen hast (oder F7 drücken), durch eine Reihe von Fehlern im Code dargestellt, wie auf der Registerkarte "Fehler" gezeigt Das MetaEditor Toolbox-Fenster. Abbildung 1. Kompilierungsfehler in einem Experten-Advisor-Code Wow 38 Fehler und 1 Warnung. Ihr Code kann nicht so viel Fehler haben wie hier gezeigt, alles, was wir sehen wollen, sind die verschiedenen Arten von Fehlern, die wahrscheinlich auftauchen, wenn Sie unseren Code zusammenstellen und wie wir sie lösen können. Beschreiben wir das obige Diagramm. Der mit 1 markierte Abschnitt zeigt die Beschreibung des Fehlers im Code an. Das gibt uns die Idee, wie der Fehler aussieht. Der mit 2 gekennzeichnete Abschnitt zeigt uns, in welcher Datei wir den Fehler haben. Dies ist sehr wichtig, wenn wir Dateien enthalten haben, die Fehler haben. Damit können wir wissen, welche Datei wir für den beschriebenen Fehler überprüfen müssen. Der mit 3 markierte Abschnitt zeigt uns, welche Zeile und Spalte (auf der Linie) in unserem Code der Fehler liegt. Dies ermöglicht es uns zu wissen, welche bestimmte Linie, um den beschriebenen Fehler zu überprüfen. Der mit 4 gekennzeichnete Abschnitt zeigt die Zusammenfassung der Zusammenfassungsfehler und Warnungen. Lassen Sie uns jetzt beginnen, die Fehler nacheinander zu lösen. Lass uns bis zur ersten Zeile auf der Registerkarte "Fehler" blättern, damit wir von Anfang an beginnen können. Abbildung 2. Identifizieren und Beheben von Codefehlern Die erste Ausgabe wird beschrieben als. Trunkierung von konstantem Wert und wird auf Zeile 16 Spalte 20 entdeckt. Um die genaue Zeile in unserem Code zu finden, wählen Sie im Menü Bearbeiten des MetaEditors die Option Go to Line oder drücken Sie CTRL G auf Ihrer Tastatur. Abbildung 3. Auffinden der Fehlercode-Zeilennummer Ein Dialogfeld wird angezeigt. Abbildung 4. Lokalisierung des Fehlerzeilen-Nummerndialogs Der im Dialogfeld angezeigte Nummernanzahl ist die Gesamtzahl der Zeilen im Code. In diesem Fall (1-354) zeigt, dass unser Code 354 Zeilen Code enthält. Geben Sie die Zeilennummer ein, die Sie in das Feld einchecken möchten, und klicken Sie auf die Schaltfläche OK. Sie werden direkt in die Zeilennummer im Code gebracht. Sie sehen den Mauszeiger, der auf die jeweilige Linie blinkt. Abbildung 5. Cursor zeigt die Fehlerzeilenzahl an Das Problem hier ist, dass wir Lot als Ganzzahl (int) Variable deklarieren, aber mit einem Doppelwert (0.1) initialisieren. Um diesen Fehler zu korrigieren, werden wir das int verdoppeln. Speichern Sie die Datei und klicken Sie dann erneut auf COMPILE-Taste, um zu sehen, ob das korrigiert wurde. Abbildung 6. Kompilieren und Speichern von Code nach der Korrektur Bei der Kompilierung wurde das erste Problem behoben, aber wir haben noch mehr Probleme wie unten gezeigt: Abbildung 7. Weitere Fehler werden im Code nach der Kompilierung angezeigt. Wir folgen nun dem gleichen Verfahren Wie oben und gehe zur Linie 31. Allerdings werden wir dieses Mal mit der rechten Maustaste auf den Fehler auf der Registerkarte "Fehler" klicken und "Weiter zur Zeile" auswählen. Abbildung 8. Eine andere Möglichkeit, die Code-Fehlerzeile zu lokalisieren Oder einfach den Fehler zu wählen und die Enter-Taste auf deiner Tastatur zu drücken. Sofort werden Sie in die Codezeilennummer 31 gebracht. Sie sehen den Mauszeiger blinken und auch eine kleine rote Taste (Fehlersymbol) auf dieser Codezeile 31. Abbildung 9a. Lokalisierung der Codefehlerzeile Wenn es sich um eine Warnmeldung wie die erste auf Zeile 16 handelt, die wir früher korrigiert haben, wird eine dreieckige gelbe Taste (Warnsymbol) angezeigt: Abbildung 9b. Lokalisierung der Code-Fehlerzeile Es ist sehr offensichtlich, dass wir kein Problem auf der Linie 31 haben. Aber die Fehlerbeschreibung sagt: STP - unerwartetes Token. Wir müssen dann die vorherige Codezeile (das ist Zeile 30) überprüfen, um zu sehen, was falsch sein kann. Bei genauer Betrachtung fehlt das Semikolon nach doppeltem ccminb - 95.0000 auf Zeile 30, deshalb haben wir diesen Fehler auf Zeile 31. Wir werden diesen Fehler jetzt beheben, indem wir das Semikolon nach - 95.0000 eingeben und den Code erneut kompilieren. Nun sind die Fehler der Zeile 31 weg. Weiter ist die Zeile 100 wie unten gezeigt: Abbildung 10. Mehr Fehler existieren noch im Code Hey Olowsam, müssen wir nach jeder Korrektur kompilieren, warum wir nicht einfach alle Strecken gleichzeitig durchlaufen und nachdem wir alle Korrekturen durchgeführt haben Dann kompilieren wir den Code einmal, anstatt nach jeder Korrektur zu kompilieren. Hast du diese Frage gerade gefragt, kannst du in einer Weise richtig sein, aber das werde ich nicht raten. Probleme werden immer nacheinander gestoppt. Schritt für Schritt. Jeder Versuch, zusammen zu klopfen und sie sofort zu lösen, kann zu vielen Kopfschmerzen führen. Sie werden bald verstehen, warum nur geduldig mit mir sein. Zurück zu unserem Problem, wir sind die Zeile 100 für den nächsten Fehler zu überprüfen. Der Fehler besagt. Wenn - Ausdrücke auf einem globalen Geltungsbereich nicht erlaubt sind Und ich bin sicher, dass der if-Ausdruck in Zeile 100 nicht auf einem globalen Geltungsbereich ist, aber warum haben wir diesen Fehler. Bitte lass uns auf die Linie 100 gehen. Abbildung 11. Lokalisierung des Fehlers im Code Wir können kein Problem auf Zeile 100 finden und weil wir gerade die Korrekturlinie 31 beendet haben, sind wir sicher, dass das Problem nun zwischen Zeile 32 und Zeile 99 liegt Lass uns nach oben zur Linie 99 gehen (wir haben einen Kommentar, also kann es nicht der Fehler sein). Wenn wir auch nach oben auf die Deklarationen (MqlTick. MqlTradeRequest und MqlTradeResult) schauen, werden sie korrekt deklariert und unterbrochen. Als nächstes betrachten wir den Code für den if-Ausdruck vor diesen Deklarations-Code-Zeilen und sehen, ob der Ausdruck okay ist. Bei sehr enger Studie entdecken wir, dass der if-Ausdruck eine abschließende Klammer hat, aber keine öffnende Klammer. Abbildung 12. Über die Fehlerzeilenanzahl hinaus, um den Fehler zu identifizieren Fügen Sie die Öffnungsstütze hinzu und kompilieren Sie den Code erneut. Sobald der Code kompiliert wurde, wurden Fehler auf Zeile 100, 107, 121, 126, 129 usw. komplett gelöscht und neue erscheinen. Sehen Sie, warum es gut ist, Schritt für Schritt zu folgen. Abbildung 13. Mehr Fehler existieren noch im Code Als nächstes gehen wir in Zeile 56 mit zwei Fehlern. CciVal1 - Parameterumwandlung ist nicht erlaubt und cciVal1 - Array ist erforderlich Bei genauerer Betrachtung der Zeile 56. CciVal1 soll als Array deklariert worden sein. Könnte es sein, dass wir es nicht als Array deklariert haben, aber jetzt versuchen, es als Array zu verwenden. Lassen Sie uns den Deklarationsabschnitt überprüfen, um dies zu bestätigen, bevor wir wissen können, was als nächstes zu tun ist. Von hier aus können wir sehen, dass wir fälschlicherweise cciVal1 als doppeltes als als dynamisches Array deklarieren, weil wir die eckigen Klammern () ausgelassen haben. Lasst uns die eckigen Klammern hinzufügen (so wie wir es für cciVal2 haben) und dann den Code kompilieren. Abbildung 14. Fehler im Code wurden erheblich reduziert Was sind so viele Fehler verschwunden. Wir korrigierten nur Fehler, der auf Zeile 56 gemeldet wurde, und einige andere Fehler wurden automatisch gelöst. Dies liegt daran, dass der Fehler, der auf Zeile 56 berichtet wurde, für diese anderen Fehler verantwortlich war. Dies ist der Grund, warum es gut ist, einen Schritt für Schritt Prozess bei der Lösung von Fehlern in Ihrem Code zu folgen. Wir werden nun zum nächsten gemeldeten Fehler auf Zeile 103 wechseln. GetLastError - nicht deklarierter Bezeichner Warten Sie eine Minute, GetLastError soll eine Funktion sein. Gehen Sie auf Zeile 103, um zu sehen, was das Problem ist. Das Problem ist eigentlich auf Linie 103. GetLastError ist eine Funktion und jede Funktion benötigt ein Paar Klammer für Eingabeparameter. Lassen Sie uns ein leeres Paar von Klammern eingeben und dann den Code kompilieren. Das leere Paar der Klammer zeigt an, dass die Funktion keine Argumente oder Parameter enthält. Als nächstes bewegen wir uns in Zeile 159. - l-Wert erforderlich und eine Warnung. Ausdruck ist nicht boolesch Lass uns in die Linie 159 gehen und sehen, was dieser Fehler bedeutet. Es ist hier zu sehen, dass wir den Wert von POSITIONTYPESELL zu PositionGetInteger (POSITIONTYPE) in der if-Anweisung zugewiesen haben und das ist nicht das, was wir vorhaben wollen. Wir wollten stattdessen Vergleich machen. Wir werden nun den Ausdruck ändern, um den gleichen Operator zu verwenden, anstatt einen Zuweisungsoperator zu verwenden. (Das ist statt). Machen Sie die Korrektur und kompilieren Sie den Code. Gut jetzt haben wir noch einen zu gehen. Lass uns in die Linie 292 gehen, um zu sehen, warum es sagt, PositionsTotal - nicht deklarierter Bezeichner. Warten Sie eine Minute, können Sie sich erinnern, dass wir einen Fehler wie diese vor GetlastError Zeile 103 gesehen haben. Möglicherweise vergessen wir, das Paar von Klammern auch für PositionsTotal hinzuzufügen, da es eine Funktion ist. Lass uns zur Zeile 292 gehen, um zu bestätigen. Genau wie wir vermutet haben, ist es, weil wir vergessen haben, das Paar von Klammern für die Funktion PositionsTotal hinzuzufügen. Füge nun das Paar von Klammern (PositionsTotal ()) hinzu und kompiliere den Code. Lassen Sie mich auch sagen, dass es möglich ist, diesen Fehler zu bekommen, wenn wir tatsächlich eine Variable verwenden, die wir nicht irgendwo im Code deklariert haben. Abbildung 15. Alle Kompilierungsfehler wurden vollständig gelöst Wunderbar Jetzt konnten wir alle Kompilierungsfehler korrigieren. Es ist jetzt Zeit, unseren Code zu debuggen und zu sehen, ob es Laufzeitfehler gibt. Hier werden wir nicht in die Details gehen, wie wir unseren Code debuggen, wie es bereits in diesem Artikel erklärt wurde. Wenn die Debug-Session beginnt, bemerken wir einen weiteren Fehler: Abbildung 16. Runtime-Fehler beim Debuggen von Code Klicken Sie auf die Schaltfläche OK und Sie werden in die Codezeile gebracht, die den Fehler erzeugt. Abbildung 17. Identifizieren der Codezeile, die Laufzeitfehler erzeugt Der Fehler wird von diesem Code auf Zeile 172 generiert, wie Sie aus der obigen Abbildung sehen können. Da der Fehler ein Array außerhalb des Bereichsfehlers ist, bedeutet dies, dass der Wert, den wir aus dem Array erhalten wollen, außerhalb des Bereichs der verfügbaren Arraywerte liegt. So gehen wir jetzt an die Linie, wo wir die Indikatorpuffer in Arrays kopieren, um zu sehen, was das Problem ist. Wir können aus den CopyBuffer-Funktionen beobachten, dass wir nur drei Werte kopiert haben (Bar 0, 1 und 2), was bedeutet, dass wir nur auf Array-Werte von maVal0 zugreifen können. MaVal1 Und maVal2 und auch cciVal10. CciVal11 und cciVal12. Etc. Aber in unserem Code auf Zeile 172. Wir haben versucht, den Array-Wert für cciVal13 zu bekommen. Aus diesem Grund wurde der Fehler generiert. Nun beenden Sie den Debugger, damit wir den Fehler beheben können: Abbildung 18. Stoppen Sie den Debugger, um Fehler in Code zu korrigieren Um dies zu beheben, müssen wir die Anzahl der Datensätze erhöhen, die von Indikatorpuffern auf 5 kopiert werden sollen, damit wir sie erhalten können Array-Werte von cciVal10, cciVal11, cciVal12, cciVal13 und cciVal14 wenn nötig. Korrigieren Sie den Code wie abgebildet und starten Sie den Debugger erneut. Dieses Mal, keine Fehler mehr, wie wir unseren Experten-Berater durchführen, der Handelsaktionen ausführt Abbildung 19. Alle Fehler korrigiert, Expert Advisor führt Handel beim Debugging durch 2. Testen des Experten-Beraters Sobald wir sicher sind, dass unser Code fehlerfrei ist, ist es jetzt Zeit zu Testen Sie den Experten-Berater, um die besten Einstellungen zu erhalten, die uns die besten Ergebnisse geben werden. Um den Test durchzuführen, verwenden wir den Strategy Tester, ein Programm, das in das Terminal MetaTrader eingebaut ist. Um den Strategy Tester zu starten, Gehe zum View-Menü auf dem Terminal und wähle Strategy Tester. Abbildung 20. Einführung des Strategie-Testers 2.1. Vorläufige Prüfung unseres Expertenberaters An dieser Stelle wollen wir unseren Experten mit den verfügbaren Symbolen im Marktfenster testen. Mit diesem Ergebnis können wir raten, welche Währungspaare wir unseren Experte besser optimieren können. Stellen Sie sicher, dass das Marktfenster die meisten Währungen enthält, die Sie für den Experten ansprechen. Wählen Sie den Experten auf der Registerkarte Strategie-Tester-Einstellungen aus, wählen Sie den Zeitraum, den Sie im Auge haben (und natürlich können Sie ihn auch für verschiedene Zeitrahmen testen) und wählen Sie dann Alle Symbole auswählen, die in MARKET Watch im Optimierungsfeld ausgewählt sind. Direkt vorne ist der Parameter Optimierung, wählen Sie Balance max Profit Factor. Abbildung 21. Vorprüfung des Expertenberaters mit allen Symbolen im Markt-Watch-Fenster 1. Wählen Sie den Tick-Generator-Modus (Every Tick) 2. Wählen Sie Optimierungstyp (Alle Symbole, die in MARKET Watch ausgewählt sind) 3. Wählen Sie die Art des erwarteten Ergebnisses aus der Optimierung aus Können die Details der verschiedenen Optimierungstypen aus der Terminal-Hilfedokumentation erhalten. Wir sind nicht vorwärts testen, also gehe vorwärts als Nr. Für diesen Test werden die wichtigsten Werteparameter (grün hervorgehoben) auf der Registerkarte Eingänge verwendet. Abbildung 22. Vorläufige Test-Eingabeparameter Sobald Sie fertig sind, wechseln Sie auf die Registerkarte Einstellungen und klicken Sie auf die Schaltfläche Start. Nach Beendigung des Tests sehen Sie eine Notiz auf der Registerkarte "Journal", die folgend ähnelt: Abbildung 23. Vorbereitender Test abgeschlossen Sobald der Test abgeschlossen ist, gehen Sie auf die Registerkarte Optimierungsergebnisse, um die Ergebnisse zu sehen. Abbildung 24. Vorläufige Testoptimierungsergebnisse Unser Interesse liegt in dem Symbol, das das höchste Ergebnis basierend auf unserer Einstellung ergibt (Bilanz max Profit Factor). Um dies zu erreichen, lasst man das Ergebnis sortieren, indem wir auf den Ergebnistitel klicken, so dass das Symbol mit dem höchsten Ergebnis oben aufgeführt wird. Abbildung 25. Vorläufige Optimierungsergebnisanalyse Aus diesem Ergebnis können wir sehen, dass unser Expert Advisor für die folgenden Symbole (EURUSD, EURJPY, AUDUSD) in dem von uns ausgewählten Zeitraum profitabel sein kann. Du kannst diesen Test noch für einen weiteren Zeitrahmen ausführen, sagen wir, 30 Minuten und sehe, was du hast. Dies sollte als Aufgabe genommen werden und bitte das Ergebnis teilen, damit wir alle auch lernen können. Aus dem Ergebnis unserer Vorprüfung werden wir nun entscheiden, welches Symbol (e) und Zeitrahmen wir unseren Expert Advisor optimieren werden. In diesem Beispiel optimieren wir unseren Expert Advisor für den EURUSD und den 1 Stunden Zeitrahmen. Was sind die Dinge, die die Wahl, die wir gerade gemacht haben, motivieren: Der Profitfaktor ist das Verhältnis des Gesamtgewinns zu diesem Gesamtverlust für diesen Test. Je höher der Profitfaktor desto rentabler ist Ihre Handelsstrategie. Dies bezieht sich auf die relative Abzinsung des Eigenkapitals oder des größten Verlustes (in Prozent) vom maximalen Wert des Eigenkapitals. Je niedriger der Drawdown (in Prozent), desto besser die Strategie. Dies ist das Verhältnis des Gewinns zum maximalen Drawdown. Es spiegelt die Risikobereitschaft der Handelsstrategie wider. Nachdem ich mich für das Symbol und den Zeitrahmen entschieden habe, ist es nun an der Zeit, unseren Expert Advisor zu optimieren. 2.2. Optimierung der Expert Advisor Optimierung ist einfach ein Prozess der Feinabstimmung der Leistung unserer EA durch Testen mit verschiedenen Faktoren (Parameter), die die Wirksamkeit oder Rentabilität unserer Strategie in der EA codiert bestimmt. Es ist ein ähnliches Verfahren zum Testen, aber anstatt das EA nur einmal zu testen, wird es viele Male getestet, abhängig von den Parametern, die auf der Registerkarte Eingabe ausgewählt wurden. Um zu beginnen, gehen wir auf die Registerkarte Einstellungen und aktivieren Optimierung und wählen dann die Art von Ergebnis, das wir von unserer Optimierung wollen. Abbildung 26. Optimierungseinstellungen für Expert Advisor 1. Wählen Sie den Tick-Generator-Modus (Every Tick) 2. Wählen Sie Optimierungstyp (Fast Genetic Based Algorithm) 3. Wählen Sie den erwarteten Ergebnis aus der Optimierung aus (hier wählen wir Balance Max Profit Factor) Erhalten Sie die Details der verschiedenen Optimierungstypen aus der Terminal-Hilfedokumentation. Wir sind nicht vorwärts testen, also gehe vorwärts als Nr. Nachdem wir die Optimierungseigenschaften eingestellt haben, legen wir die Parameter fest, die für die Optimierung auf der Registerkarte Eingänge verwendet werden sollen. Abbildung 27. Optimierung Eingabeparameter Da wir uns optimieren, konzentrieren wir uns nur auf die gelb markierten Bereiche. Zuerst muss jeder Parameter, den wir in der Optimierung nicht verwenden möchten, nicht markiert sein. Mit den Worten werden wir nur die Parameter überprüfen, die wir bei der Optimierung der EA verwenden möchten. Hier habe ich fünf Parameter überprüft, aber du kannst entscheiden, nur ein oder zwei zu überprüfen, je nach den Parametern, auf die die Effektivität deiner Strategie basiert. Zum Beispiel können Sie nur die Moving Average - und CCI-Perioden so überprüfen, dass das Optimierungsergebnis Ihnen den besten Wert für jeden der Indikatoren gibt, der Ihrem EA die beste Leistung verleiht. Das ist die Hauptsache der Optimierung. Auch die Anzahl der geprüften Parameter bestimmt die Gesamtzahl der Tests, die Ihr EA durchlaufen wird. Du wirst bald sehen, wovon ich rede. Einstellen der Werte Dies ist der Startwert für die gewählte Variable zur Optimierung. Nutzen Sie die Variable Stop Loss, um zu erläutern, wie Sie die Werte einstellen können. Für den Stop Loss haben wir den Tester gebeten, mit einem Wert von 30 zu beginnen. Dies ist der minimale Wert, der für Stop Loss während der Optimierung verwendet wird. Dies ist der Inkrementalwert für den Stop Loss. Wenn wir ein Inkrement von 2 setzen, bedeutet dies, dass, wenn im ersten Test, es verwendet 30 für Stop Loss wird es entweder 32, 36, 34 etc. in der zweiten Es bedeutet nicht, dass es 30 verwenden wird. Dann gefolgt von 32. 34 usw. Nein, es wählt die Werte zufällig aus, aber sie werden immer ein Vielfaches von zwei (2) zwischen dem Startwert und dem Stop-Wert sein. Dies ist der maximale oder höchste Wert, der für die Optimierung verwendet wird. Hier haben wir spezifiziert 38. Dies bedeutet, dass die Werte, die für die Prüfung verwendet werden, zwischen 30 und 38 liegen, aber Werte sind, die Vielfache von 2 sind. Es wird nicht 40 oder einen größeren Wert verwenden. Die Gesamtzahl der durchgeführten Tests hängt von den Einstellungen dieser drei Abschnitte ab. In unserem Beispiel kombiniert der Tester insgesamt 5 Möglichkeiten für den Stop Loss, wie in der Spalte "Spalten" auf der Registerkarte "Eingänge" gezeigt. Es werden insgesamt 8 Möglichkeiten für den Take Profit usw. kombiniert Die anderen Variablen, es wird zu Hunderten oder Tausenden von Möglichkeiten (Testspasses) kommen. Wenn Sie nicht auf Alter warten wollen, um eine einzelne EA zu optimieren, stellen Sie sicher, dass Sie nicht einschließen oder überprüfen Sie zu viele Variablen vielleicht nur zwei oder drei, dass die Leistung Ihrer EA wirklich hängt ab (vor allem die Indikatorperioden, wenn Sie Benutze sie in deinem eigenen Code). Auch müssen Sie sicherstellen, dass Ihr Schritt Wert nicht zu viele Möglichkeiten (Tests) führen wird. Zum Beispiel, wenn wir 1 als Schritt Wert verwenden, dann haben wir die Anzahl der Versuche für den Stop Loss allein auf 10 erhöht. Nun, wie bereits erwähnt, hängt die Gesamtzeit, die erforderlich ist, um eine Optimierungssitzung abzuschließen, von der Gesamtzahl der verfügbaren Agenten ab, die Sie auf Ihrem System eingerichtet haben. Ich glaube, die Erklärung genügt. Sobald wir die Eingaben eingestellt haben, kehren wir nun zur Registerkarte Einstellungen zurück und klicken auf die Schaltfläche Start. Sobald die Optimierung abgeschlossen ist, können wir die Details auf der Registerkarte Journal sehen. Abbildung 28. Optimierung abgeschlossen, wie auf der Registerkarte Journal angezeigt Um die Ergebnisse zu sehen, wenn jeder Test bestanden oder abgeschlossen ist, gehen wir auf die Registerkarte Optimierungsergebnisse. Und es ist immer gut, die Ausgabe durch die Ergebnisse zu sortieren, damit wir die Einstellungen leicht identifizieren können, die uns das beste Ergebnis auf der Grundlage unserer Optimierungseinstellung geben. Wenn Sie auf die Ergebnisüberschrift innerhalb der Optimierungsergebnisse klicken, werden die Ergebnisse entweder aufsteigend oder absteigend angelegt. Abbildung 29. Optimierungsbericht Wechseln Sie zur Registerkarte Optimierungsgrafik, um zu sehen, wie die Grafik aussieht. Abbildung 30. Optimierungsgraph Dont verstehen, was Sie sehen Sorgen Sie sich nicht die Punkte, die Sie sehen, ist ein Diagramm der Anzahl der Tests, die Ihr EA gegen das Optimierungsergebnis auf der Grundlage des Optimierungsergebnistyps, den Sie ausgewählt haben, übergeben hat. In unserem Fall haben wir Balance max Profit Factor ausgewählt. 2.3. Interpretation des Ergebnisses Um den Optimierungsbericht erfolgreich zu interpretieren, gelangen Sie auf die Registerkarte Optimierungsergebnisse. Sie werden entdecken, dass Sie keine Felder wie Profitfaktor, Erwartete Auszahlung, Drawdown, etc. sehen können. Um sie zu sehen, klicken Sie mit der rechten Maustaste auf eine beliebige Stelle auf der Registerkarte Optimierungsergebnisse und wählen Sie die zusätzlichen Informationen aus, die Sie wie unten gezeigt sehen möchten: Abbildung 31. Auswählen von Drawdown im Optimierungsergebnis Abbildung 32. Auswählen von Profitfaktor im Optimierungsergebnis Nachdem wir diese zusätzlichen Datensätze hinzugefügt haben, analysieren wir nun das Optimierungsergebnis, um die besten Einstellungen für unseren Expert Advisor zu bestimmen. Abbildung 33. Analyse des Optimierungsergebnisses Aus der obigen Abbildung zeigen die markierten Abschnitte A und B die besten Ergebnisse für unseren Expertenberater. Jetzt ist die Wahl, die du machst, ganz dein, alles hängt davon ab, was du suchst. Allerdings interessieren wir uns hier nicht nur in den Einstellungen, die den höchsten Gewinn geben, sondern auch einen niedrigeren Drawdown haben. Wie Sie sehen können, hat der Abschnitt A (gelb hervorgehoben) das beste Ergebnis (Bilanz max Profit Factor) von 22381,71 mit einem Gewinn von 924,10, während der Abschnitt B (grün hervorgehoben) das zweitbeste Ergebnis von 22159,25 aber mit einem höheren Gewinn von 936,55. Abschnitt A hatte einen niedrigeren Drawdown von 1,78, während B einen höheren Drawdown von 1,95 hat. Der Strategy Tester speichert die Optimierungsergebnisse im theltClient Terminal Data foldergtTestercache Ordner. In Ihrem Fall werden alle Optimierungsdaten in der Datei ccimaea. EURUSD. H1.0.xml gespeichert. Der Dateiname hat folgendes Formular: ExpertName. SYMBOL. PERIOD. GenerationMode. xml, wobei: ExpertName - Expert Advisor Name Symbol - Symbol Periode - Zeitrahmen (M1, H1) GenerationMode - Tickgenerator (0 - jedes Tick, 1 - 1 Minute OHLC, 2 - nur offene Preise). Die XML-Dateien können von MS Excel geöffnet werden. 2.4. Auswahl des besten Ergebnisses Um endlich das beste Ergebnis zu erzielen, müssen wir das Optimierungsdiagramm noch einmal betrachten. Wechseln Sie zurück zum Optimierungsdiagramm. Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle innerhalb des Graphen und wählen Sie 1D-Diagramm aus. Abbildung 34. Wählen Sie ein 1-dimensionales (1 D) Diagramm für die Ergebnisanalyse dar. Damit können wir leicht die Werte der einzelnen Eingabeparameter sehen, die das beste Ergebnis liefern. Sie können nun beginnen, jeden Parameter zu wählen, um den besten Wert zu sehen. Klicken Sie mit der rechten Maustaste auf den Graphen und wählen Sie X-Achse aus und wählen Sie dann den Parameter aus, den Sie überprüfen möchten. Es wird wie folgt aussehen (für Stop-Loss) Abbildung 35. Den besten StopLoss-Wert aus dem Optimierungsergebnis erhalten Tatsächlich ist aus dem Optimierungsergebnis klar, dass das beste Stoploss 34 ist, das beste TakeProfit 78 und das beste CCIPeriod1 ist Ist 62. Um die besten Werte für die MAPeriod und CCIPeriod2 zu erhalten, wählen Sie jede davon wie oben aus. Abbildung 36. Den besten Moving Average Period Wert aus dem Optimierungsergebnis erhalten Diese Grafik zeigt einen Wert von 26 als MAPeriod mit dem besten Ergebnis. Abbildung 37. Den besten CCIPeriod1-Wert aus dem Optimierungsergebnis erhalten Diese Grafik zeigt einen Wert von 62 als CCIPeriod1 mit dem besten Ergebnis. Abbildung 38. Den besten CCIPeriod2-Wert aus dem Optimierungsergebnis erhalten Diese Grafik zeigt Werte von 28 oder 30 als CCIPeriod2 mit den besten Ergebnissen. Nachdem wir für jeden Parameter die besten Werte erhalten haben, ist es nun Zeit für die Abschlussprüfung unseres Expertenberaters. 2.5. Der Endtest Der abschließende Test beinhaltet die Zusammenstellung der besten Parameter für die Prüfung des Expertenberaters. In diesem Fall verwenden wir die besten Werte, die wir im INPUT-Abschnitt des Strategy Tester entdeckt haben, wie unten gezeigt. Abbildung 39. Die endgültigen Test-Eingabeparameter Auf der Registerkarte SETTINGS des Strategy Testers deaktivieren wir die Optimierung wie unten gezeigt Abbildung 40. Die endgültigen Testeinstellungen Wir klicken nun auf die Schaltfläche START, um den Test zu starten. Sobald der Test abgeschlossen ist, haben wir die Ergebnisse auf der Registerkarte ERGEBNISSE, wie unten gezeigt. Abbildung 41. Die abschließenden Testergebnisse Und ebenso haben wir die Grafik für den Test auf der GRAPH-Registerkarte Abbildung 42. Die endgültige Testgraph-Ergebnis Schlussfolgerung In diesem Artikel , Haben wir die Möglichkeiten zur Identifizierung und Korrektur von Code-Fehler diskutiert und wir haben auch diskutiert, wie zu testen und zu optimieren ein Expert Advisor für das beste Symbol aus der Marktuhr. Mit diesem Artikel, glaube ich, überprüfen Code für Fehler mit dem Editor und Optimierung und Prüfung von Experten Berater mit dem Strategy Tester macht das Schreiben eines besseren und profitablen Expert Advisor möglich.
No comments:
Post a Comment