MMS ist eine sehr einfache Skriptsprache. Debuggen von MMS, Leider, ist überhaupt nicht leicht. Die MetaEditor-Compiler, die MetaQuotes liefert einfach enthält nicht ausgereifte Werkzeuge, dass die meisten Programmierer kennen.
MQL Debugprobleme
Visual Studio und andere anspruchsvoll IDEs (integrierte Entwicklungsumgebungen) enthalten Sie eine Reihe von Features, die machen es einfach, Code zu debuggen, während der Programmierer es schreibt. Das größte Beispiel hierfür sind Haltepunkte. Ein Break-Point ist ein Punkt im Code wo teilt dem Compiler mit den Computer einzustellen, das Programm laufen, wenn es bei einer bestimmten Codezeile eintrifft.
Betrachten Sie das Beispiel, wo ein trailing-stop setzt, die neue Haltestelle falsch. Der natürliche Instinkt für die meisten Programmierer wäre, führen Sie den Experten Advisor auf das visuelle backtester, Fügen Sie anschließend Haltepunkte auf die Codezeilen kurz nach den nachgestellten Stop-Berechnungen. Haltepunkte halt den code, ermöglicht die Programmierer, peer in den Gehirnen der Software zu sehen, was es zur Zeit dachte er eine Entscheidung getroffen. Der entscheidende Vorteil in Visual Studio ist, dass die Werte aller Variablen deutlich sichtbar sind. Es ist möglich, durch das Programm Schritt für Schritt zu gehen. Wann folgt ein Schritt nicht die gewünschten Regeln, die erforderliche Änderung ist in der Regel offensichtlich. MetaQuotes enthalten glücklicherweise Haltepunkte in MQL5. Sie stehen nicht in MQL4.
Die fehlende volle Intellisense Unterstützung betrifft meine Programmierung Geschwindigkeit mehr als alles andere. IntelliSense erkennt die Verwendung reservierter Wörter wie OrderSelect() oder ObjectGet(). Die MetaEditor enthält eine rudimentäre intellisense, aber es fehlt die feinen Details, die es so bequem in Visual Studio zu machen.
Ich bin gewohnt, Programmierung in C#-wo ich, die ersten eingeben können Buchstaben einer Variablen oder Klasse, dann den Rest die IDE ausfüllt. Wenn ich Typ “MES” in c# und drücken Sie die Leertaste, Ich weiß, dass die MessageBox-Option angezeigt wird (davon aus, dass ich den entsprechenden Namespace deklariert). Die MetaEditor enthält eine Liste von Kandidaten für reservierte Wörter. Der Programmierer muss dann wählen Sie entweder die Option mit der Maus oder drücken Sie eingeben.
Ich weiß, es scheint trivial zu Pressen benötigen geben Sie statt der Leertaste, aber darüber nachdenken, wie oft Resuses die gleichen reservierte Wörter oder Variablen code. Die zusätzliche Tastendrücke wirklich summieren zu viel unnötige tippen Bewegungen sich. That’s doubly true for a thirty year old that already wears a wrist brace for carpal tunnel pain.
The MetaEditor’s biggest weakness is that it does not detect variable names. Wir schreiben oft Fachberater, die mehrere tausend Zeilen Code enthalten. Verfolgen die Namen von Zehntausenden von Variablen bietet eigene Herausforderungen. Wenn die Coder immer wieder in dieselben Variablennamen eingibt, Es wäre schön, einfach Geben Sie die ersten drei Buchstaben und fahren. Kopieren und einfügen könnte eine anständige Alternative darstellen.. Das Problem ist, dass die Variablen in der Regel zu gruppieren. Sie können nicht halten 5 andere kopieren und Einfügen Elemente leicht zugänglich.
Die MetaEditor ermöglicht Funktionen ungültig Rückgabetypen. Doppelt deklarierte Funktionen können Zeichenfolgen zurückzugeben., ganze Zahlen oder gar nichts. Der Compiler MQL4 verfolgt nicht, ob diese gültig sind. Er überlässt es dem Programmierer, den ungültigen Typ während Echtzeit testen zu entdecken. Diese Aufsicht ist ein Alptraum für den ahnungslosen Programmierer, der versehentlich den falschen Typ zurückgibt.
Das gilt doppelt, wenn eine doppelte Funktion versehentlich an eine ganzzahlige Variable zurückgegeben wird. MQL4 verhindert nicht illegal doppelt auf Int-Umwandlungen. Noch schlimmer, die Fachberaterin weiterhin ausgeführt mit einer 0 Wert für die Ganzzahl anstelle des Auslösen einer Ausnahme oder eine Fehlermeldung an. I cannot count how many hours that I’ve wasted tracking down variables that look perfect, nur zu erkennen, dass ich den falschen Datentyp deklariert. This usually happens when I’m on autopilot, Stampfen Sie code. Was zur Zeit in der Regel effizienter scheint kostet mehrere Stunden Haare ziehen Frust.
MMS-Debugverfahren
Die MMS-Programmierer auf die Mitarbeiter hier in der Regel auf eines der folgenden Verfahren zurückgreifen. Sie können feststellen, dass deren Verwendung in Kombinationen des Debuggens noch mehr verbessert.
Compiler-Fehler Debuggen
Dieses kann höchst frustrierend sein.. Die MetaEditor versucht, lassen erahnen, welche Codezeile den kompilieren Fehler verursacht. Ich sage Versuche, weil es falsch es häufiger wird, als es richtige erhält. There’s nothing more irritating than looking at a perfectly legitimate line of code that the compiler flags as problematic.
Ich zurückgreifen fast immer auf immer größere Teile der Code auskommentieren, bis der Fehler verschwindet. Ich beginne mit einer einzigen Codezeile auskommentieren. If that doesn’t work, kommentieren Sie dann ich zehn Zeilen. If that doesn’t work, Ich könnte ganze Funktionen oder Codeabschnitte auskommentieren. Wenn der Compiler endlich richtig läuft, Sie wissen, dass der letzte Abschnitt der auskommentierten Code den Fehler enthält.
Nächste, Sie zurückverfolgen. Beginnen Sie Abschnitt beanstandeten auskommentierte kleiner und kleiner, bis der Fehler wieder angezeigt wird. Jetzt, Sie haben schließlich auf die tatsächliche Quelle des Problems genullt,.
Debuggen Sie in Echtzeit oder über die backtester
Meine bevorzugte Methode des Debuggens ist, Stellung zu nehmen die meisten der relevanten Entscheidung Informationen auf dem Bildschirm, Das geschieht unter Verwendung des Kommentars() Funktion. Ich laufe dann die visuelle backtester, beobachten, wie die Daten in Bezug auf die visuellen Informationen verhält.
Auf dem Bildschirm gibt Kommentare im wesentlichen jury-rigged Haltepunkte. Steuern, wie und wann sie erscheinen, kann der Programmierer Schritt durch den Code, um das Problem zu entdecken. Der einzige Unterschied ist, dass Kommentare nicht gewaltsam den Code ausgeführt wird verhindern. Der Text der erscheint ist sehr klein. Abgesehen davon, dass, I really like that fact that it’s so robust. Die Kommentarfunktion funktioniert immer ohne eine Anhängevorrichtung, making it the best friend of a programmer that’s debugging code.
Aufnahme von Schnappschüssen gelangen in die nächste Stufe. Wann immer Fragen Kunden darüber warum eine Fachberaterin eine bestimmte Weise Verhalten, die einfachsten Antworten kommen mit screenshots. Imitation Haltepunkte bieten in der Regel kugelsicheren Antworten kommentieren – der Programmierer und der Kunde können buchstäblich sehen was EA zur Zeit gedacht, die eine Entscheidung gemacht. MQL4 bietet die WindowScreenShot() Funktion, dies zu tun.
Die EAs, dass wir immer nehmen Sie Screenshots während der kritischen Aktionen programmieren, z. B. Eingabe einen Handel oder eine Exit-Bedingung anpassen. Ziel ist es, die visuelle Aufzeichnungen über jede Entscheidung mit Blick auf künftige Beantwortung von Fragen zum Verhalten bereitstellen.
Unsere Standard-Vorlage enthält eine wahr/falsch-Variable namens WriteScreenshots. Händler zu kontrollieren, ob sie wollen oder nicht Mühe mit diesem debugging-Funktion. Der einzige Nachteil ist, dass jede aufgezeichnete Aktion bis ca. 50 kb Festplattenspeicher isst.
Log-Dateien die letzte Debug-Option darstellen. Der größte Nachteil ist, dass sie so hässlich und schwer zu lesen. Ich bevorzuge fast immer Screenshots aus diesem Grund.
Dennoch, Log-Dateien haben Sie ihren Platz. Die Hauptweise, sie zu benutzen ist als Fehler-Fänger. Ein Prozess geht immer schief wegen eines Problems mit entweder MetaTrader selbst oder mit einem Makler-Transaktion, die Protokolldatei ist die am leichtesten ist, ihn zu fangen.
MMS-Dateien Debuggen ist eine Fähigkeit, die eine Weile braucht, um zu lernen. The tools at the programmer’s disposal are much different from those available to higher level languages. Einmal gewöhnen Sie arbeiten mit viel einfacher Tools in den MetaEditor und MetaTrader, der Fehler löschen Prozess in der Regel wird viel einfacher.
battlmonstr sagt
There’s a library which brings C# unterstützt MT4.
Es unterstützt als auch den Skriptcode in Visual Studio debuggen.