
Tipps von einem professionellen Programmierer (Teil I): Code speichern, debuggen und kompilieren. Arbeiten mit Projekten und Protokollen
Inhalt
- Einführung
- Speichern Ihres Code in separaten Unterverzeichnissen
- Ein Code für mehrere Terminals
- Verwenden Sie ein System zur Versionskontrolle
- Verwendung von separaten Terminals mit einem Demo-Account zum Debuggen des Codes
- Kompilieren alle Codedateien auf einmal
- Verwendung von Projekt- und Aufgabenverwaltungssystemen
- Log-Auswahl
- Log-Hervorhebung
- Kontextabhängige Suche
- Schlussfolgerung
Einführung
Speichern Ihres Code in separaten Unterverzeichnissen
Terminal-Programmdateien befinden sich im MQL5-Verzeichnis. Dieses Verzeichnis ist eine sogenannte "Sandbox" (Sandkasten). Der Datenzugriff von außen ist geschlossen. Dies ist eine gute Entscheidung. Die Verwendung einer DLL ermöglicht aber wahrscheinlich den Zugriff von überall her.
Hier ist zum Beispiel die Struktur des Cayman-Projekts:
- /Experts/Cayman/ - Expert Advisor
- /Files/Cayman/ - data files (settings, parameters)
- /Include/Cayman/ - library of classes (functions)
- /Scripts/Cayman/ - main operational scripts
- /Scripts/CaymanDev/ - developer scripts (used for debugging)
Die Hauptvorteile dieser Anordnung sind:
- Kontextuelle Suche nur in Projektdateien über TotalCommander
- Versionskontrolle über Git (Kontrolle wird nur für die Projektdateien aktiviert, alle anderen Dateien werden ignoriert)
- Einfaches Kopieren auf ein anderes Terminal (Demo -> Real - Freigabe)
Ein Code für mehrere Terminals
Eine der besten Praktiken beim Programmieren ist die Vermeidung von doppeltem Code. Wenn dieselben Codezeilen an mehreren verschiedenen Stellen vorkommen, dann sollten Sie diese Zeilen besser in eine Funktion "einwickeln". Das Gleiche gilt für MQL5-Dateien: Es sollte nur einen Text einer Programmdatei geben. Dies kann durch einen symbolischen Link auf das MQL5-Verzeichnis realisiert werden.
Angenommen, die Projektkategorie befindet sich unter D:\Projekt, während sich das Terminaldatenverzeichnis unter C:\Users\Pro\AppData\Roaming\MetaQuotes\Terminal\9EB2973C469D24060397BB5158EA73A5
- Schließen Sie das Terminal
- Wechseln Sie in das Datenverzeichnis
- Verschieben Sie das Verzeichnis MQL5 in das Verzeichnis projects
- Führen Sie im Datenverzeichnis cmd aus und geben Sie den folgenden Befehl ein
mklink /D MQL5 D:\Projekt\MQL5 - Starten Sie das Terminal.
Das Terminal wird gar nicht merken, dass die "Sandbox" (Programmdateien) nach D:\Projekt\MQL5 umgezogen ist.
Der Hauptvorteil dieser Platzierung ist, dass sich alle persönlichen Projekte in demselben Verzeichnis (D:\Project) befinden.
Verwenden Sie ein System zur Versionskontrolle
Professionelle Programmierer zweifeln nicht an der Notwendigkeit, ein solches System zu verwenden. Es ist ein unverzichtbares Werkzeug, besonders wenn ein Team von Programmierern an einem Projekt arbeitet. Die Frage ist, welches System Sie verwenden werden. Dies ist de facto Git.
Die Hauptvorteile von Git sind:
- Lokales Repository. Die Möglichkeit, mit Zweigen zu experimentieren. Wechseln zu einem beliebigen Zweig (Version) mit einem Klick.
- Bequeme grafische Oberfläche (TortoiseGit). Steuerung mit der Maus.
- Kostenloses Cloud-Repository für persönliche Projekte (Bitbucket). Keine Angst, dass Ihre PC-Festplatte ausfällt
- Änderungshistorie der Dateien mit der Möglichkeit, ältere Versionen wiederherzustellen oder einzusehen (bequem in Bitbucket einsehbar)
Ich werde hier keine detaillierte Installations- und Konfigurationsanleitung geben, aber einige Besonderheiten erwähnen. Installieren Sie Git (für die Kommandozeilen-Bedienung) und TortoiseGit (für die Nutzung mit der Maus). Erstellen Sie unter dem Verzeichnis D:\Project\MQL5 die Datei .gitignore mit folgendem Inhalt
# exclude files *.ex4 *.ex5 *.dat log.txt # exclude directories completely Images Indicators Libraries Logs Presets Profiles Services "Shared Projects" Levels Params # exclude directory contents Experts/* Files/* Include/* Scripts/* # except for directories !Experts/Cayman !Files/Cayman !Include/Cayman !Scripts/Cayman !Scripts/CaymanDev
Diese Datei ermöglicht die Versionsverfolgung von (*.mq?) Programmdateien des Projekts. Erstellen Sie ein lokales Repository im MQL5-Verzeichnis. Fügen Sie Dateien hinzu und machen Sie den ersten Commit (Übertragen der Version). Das lokale Repositorium ist fertig. Arbeiten Sie mit dem Code und vergessen Sie nicht, häufig Commits mit einer kurzen Beschreibung der Änderungen vorzunehmen. Die Kommentare erleichtern das spätere Durchsuchen der Historie.
Um sich mit einem Cloud-Repositorium zu verbinden, müssen Sie zunächst ein Bitbucket-Konto und ein Repositorium erstellen. Der Name des Repositoriums sollte logischerweise mit dem Projektnamen übereinstimmen. In meinem Fall ist es CaymanMQL5, es gibt aber auch CaymanMQL4. Importieren Sie das lokale Repositorium in das Cloud-Repositorium. Nun ist das Cloud-Repositorium bereit. Grundlegende Aktionen über TortoiseGit(TG):
- Mit dem Code arbeiten (eine Aufgabe - ein Commit)
- Änderungen überprüfen (TG/Check for modifications...)
- Neue Dateien hinzufügen (Add)
- Unnötige (fehlende) Dateien löschen (Delete)
- Übertragen in das lokale Repository (Commit)
- In das Cloud-Repository übertragen (Push)
Verwendung von separaten Terminals mit einem Demo-Account zum Debuggen des Codes
Sie sollten die neueste Arbeitsversion des Codes auf einem echten Konto haben (nur *.ex? Dateien, ohne *.mq?). Der Code zum Debuggen sollte sich auf einem Demo-Account befinden. Um von Demo auf Real zu kopieren, können Sie die folgende Batch-Datei verwenden:
@echo off setlocal set PROJECT=Cayman set SOURCE=d:\Project\MQL5 set TARGET=c:\Users\Pro\AppData\Roaming\MetaQuotes\Terminal\2E8DC23981084565FA3E19C061F586B2\MQL5 set PARAMS=/MIR /NJH /NJS rem MIR - MIRror a directory tree and delete dest files/folders that no longer exist in source rem NJH - No Job Header rem NJS - No Job Summary echo Copy *.ex? // Source to Production echo Source = %SOURCE% echo Production = %TARGET% robocopy %SOURCE%\Experts\%PROJECT% %TARGET%\Experts\%PROJECT% *.ex? %PARAMS% robocopy %SOURCE%\Scripts\%PROJECT% %TARGET%\Scripts\%PROJECT% *.ex? %PARAMS% rem Copy all files except AppSettings.txt, [Levels], [Params] robocopy %SOURCE%\Files\%PROJECT% %TARGET%\Files\%PROJECT% *.* %PARAMS% /XF AppSettings.txt /XD Levels Params robocopy %SOURCE%\Scripts\Cayman %TARGET%\Scripts\Cayman *.ex? /NJH /NJS robocopy %SOURCE%\Scripts\CaymanDev %TARGET%\Scripts\CaymanDev *.ex? /NJH /NJS echo. endlocal pause
Kompilieren alle Codedateien auf einmal
Das Ziel ist es, die Konsistenz des Codes zu wahren. Sie sollten also z. B. Änderungen der Funktionsparameter vermeiden. Der Expert Advisor kann gut kompiliert sein, aber es kann auch ein Skript geben, das die alte Version der Funktion verwendet. Das Skript (das früher kompiliert wurde) kann gut laufen, aber es wird nicht die gewünschte Funktionen ausführen. Für die Batch-Kompilierung können Sie die folgende Datei verwenden:
@echo off setlocal set METAEDITOR="C:\Program Files\RoboForex - MetaTrader 5\metaeditor64.exe" set CAYMAN=d:\Project\MQL5\Scripts\Cayman set CAYMAN_DEV=d:\Project\MQL5\Scripts\CaymanDev echo METAEDITOR=%METAEDITOR% echo CAYMAN=%CAYMAN% echo CAYMAN_DEV=%CAYMAN_DEV% echo. echo Wait compile... D: cd %CAYMAN% echo %CAYMAN% for %%F in (*.mq?) do ( %METAEDITOR% /compile:%%F /log type %%~dpnF.log ) del *.log cd %CAYMAN_DEV% echo %CAYMAN_DEV% for %%F in (*.mq?) do ( %METAEDITOR% /compile:%%F /log type %%~dpnF.log ) del *.log endlocal echo. pause
Verwendung von Projekt- und Aufgabenverwaltungssystemen
Solche Systeme sind ein Muss für Entwicklungsteams. Sie sind auch für persönliche Projekte nützlich. Es gibt eine Fülle von verschiedenen Projektmanagement-Systemen und -Methoden. Ich persönlich verwende ZenKit. Es ist für kleine Teams kostenlos. Es bietet ein sehr komfortables Kanban-Board.
Früher hatte ich mehrere Kanban-Boards (eines für jedes Projekt). Der Nachteil bei der Verwendung mehrerer Tafeln ist, dass man das Gesamtbild nicht sehen kann. Dann habe ich mich entschieden, ein Projekt als Entwicklungsstufe hinzuzufügen. Auf diese Weise ist es viel einfacher, Aufgaben zu verwalten. Mein Kanban-Board hat zum Beispiel 5 Entwicklungsstufen:
- Legende - Projektbeschreibung, Links und Anweisungen. Einträge werden nicht in andere Stufen verschoben. Sie können immer den allgemeinen Zweck des Boards sehen und können leicht auf Links zu nützlichen Ressourcen zugreifen.
- Cayman - MQL5- und MQL4-Projekt
- Website - mein persönliches Website-Projekt
- Angenommen - Aufgabe in Bearbeitung
- Erledigt - Aufgabe abgeschlossen
Der Prozess der Board-Nutzung ist sehr einfach und intuitiv. Ich finde eine interessante Idee, eine Lösung oder einen Programmfehler. Dann formuliere ich sie kurz und füge sie dem Board, dem entsprechenden Projekt, hinzu. Hier können auch Bilder und Dateien hinzugefügt werden. Als Nächstes wähle ich eine Aufgabe aus und verschiebe sie in die Phase "Angenommen". Ich bearbeite die Aufgabe, teste sie und schiebe sie in die Stufe "Erledigt".
Wenn Sie die Anzahl der Aufgaben in Projekten analysieren, können Sie leicht Probleme und Engpässe feststellen. Ich versuche, Aufgaben aus "überlasteten" Projekten zu übernehmen. Mein Ziel ist es, Projekte so auszurichten, dass sie eine ähnliche Anzahl von Aufgaben haben. In der Teamentwicklung gibt es noch eine weitere Stufe "Testen", die für mich nicht relevant ist, da ich alleine arbeite.
Log-Auswahl
Wie Sie wissen, werden alle Ausgaben von Print-Funktionen in das Terminal-Log MQL5\Logs\yyyyMMdd.log geschrieben. Alle Symbole (Handelsinstrumente) werden in dieser Datei gemischt. Ich verwende die folgende Batch-Datei, um Logs für ein gewünschtes Symbol auszuwählen:
echo off if "%2"=="" goto Help find /I "%2" < %1 > "%~n1-%2.log" goto Exit :Help echo. echo Filter log-file echo findLog.cmd logFile text echo Example echo findLog.cmd 20200515.log gbpjpy echo Result echo 20200515-gbpjpy.log echo. pause :Exit
Log-Hervorhebung
Beim Debuggen werden viele Informationen in das Protokoll geschrieben. Diese in einem laufenden Terminal zu analysieren, kann ziemlich knifflig sein. Hier ist, was Sie tun können, um diesen Prozess zu vereinfachen:
- Löschen Sie das Protokoll in der Registerkarte Toolbox/Experts
- Stimulieren Sie den Druck ins Protokoll
- Kopieren Sie alle Zeilen in die Datei log.txt
- Analysieren Sie diese Datei in Notepad++ (NPP) mittels Hervorhebung
NPP unterstützt verschiedene Varianten der Texthervorhebung
- Doppelklick auf ein Wort hebt dieses Wort im gesamten Text hervor
- Suchen/Markieren/Stil verwenden - dies überträgt den gewählten Stil auf den gewünschten Text im gesamten Dokument
- Nutzerdefinierte Syntax mit der Hervorhebung von bestimmten Token
Kontextabhängige Suche
Um einen bestimmten Text zu finden, verwende ich den TotalCommander. Die Hauptvorteile dieser Methode sind folgende:
- Die Suche wird nur in Projektdateien durchgeführt (alle anderen Dateien erscheinen nicht in den Suchergebnissen)
- Die Möglichkeit, reguläre Ausdrücke bei der Suche zu verwenden
Schlussfolgerung
Dies ist mein erster Artikel. Ich habe vor, die Serie fortzusetzen. Beim nächsten Mal werde ich einige erfolgreiche Lösungen mit der entsprechenden Beschreibung und Erklärung vorstellen. Ich lade alle ein, ihre Programmier-Erfahrungen zu teilen und andere nützliche Tipps und Lösungen zu diskutieren.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/9266





- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.