MetaEditor Hilfe

Code-Profiling

Code-Profiling

Profiling bedeutet das Sammeln von Programmparametern während der Ausführung. Während eines Profiling werden die Ausführungszeit und die Anzahl der Aufrufe einzelner Funktionen und Programmcode-Zeilen erfasst. Mit diesem Tool ist der Programmierer in der Lage, die langsamsten Codeabschnitte zu finden und zu optimieren.

Das Profiling kann sowohl auf dem normalen Chart der Handelsplattform als auch mit Hilfe von historischen Daten im Strategietester durchgeführt werden. Im ersten Fall wird ein Programm auf einem Chart gestartet, das in Echtzeit aktualisiert wird. Sie können so das Programmverhalten unter realen Bedingungen überprüfen. Im zweiten Fall wird das Programm im Strategietester im visuellen Modus gestartet. Der Vorteil dieser Methode ist, dass Sie nicht auf echte Daten von einem Handelsserver oder das Auftreten bestimmter Handelsbedingungen warten müssen.

Viele Programme, insbesondere Indikatoren, führen erst beim Eintreffen eines neuen Ticks Berechnungen durch (OnTick, OnCalculate). Um die Leistung zu bewerten, müssen Sie also in Echtzeit auf neue Ticks warten. Beim Profiling mit historischen Daten können Sie auch an Wochenenden, an denen Märkte geschlossen sind, sofort die erforderliche Last bereitstellen und die Programmverhalten testen.

Starten des Profiling

Öffnen Sie den Quellcode eines Programms (MQ4 oder MQ5). Im Menü Debug oder der Standard-Symbolleiste drücken Sie "Profiling anhand echter Daten beginnen Profiling anhand echter Daten beginnen" oder "Profiling anhand historischer Daten beginnen Profiling anhand historischer Daten beginnen".

Danach wird automatisch eine spezielle Programmversion für das Profiling erstellt. Je nach gewähltem Typ für das Profiling wird das Programm auf einem normalen Chart in der Handelsplattform oder im Strategietester (im visuellen Modus) gestartet.

Start des Profiling auf einem Chart in der Handelsplattform

Standardmäßig wird eine Anwendung auf EURUSD H1 gestartet. Um es auf einem anderen Symbol oder Zeitrahmen zu starten, geben Sie zum Reiter Debug im MetaEditor Optionen.

Arbeiten Sie nach dem Start einige Zeit mit der Anwendung, um alle Funktionen auszuprobieren. Dies ist notwendig, damit das Profiling die Ausführungszeit aller Funktionen und Befehlszeilen des Programms messen kann.

Dann beenden Sie das Profiling: Löschen Sie das Programm vom Chart oder klicken Sie auf Profiling beenden Profiling beenden aus Debug des Menüs oder in der Standard-Symbolleiste.

Für genauere Ergebnisse des Profiling wird empfohlen, das Programm manuell aus dem Diagramm zu entfernen durch Profiling beenden den Befehl Profiling beenden

Anzeigen der Ergebnisse des Profiling

Nach Abschluss des Profiling werden die Ergebnisse im Reiter Profiler im Fenster der Toolbox angezeigt. Die Ergebnisse können in zwei Formen angezeigt werden: nach Anrufen und nach Zeilen. Verwenden Sie das Kontextmenü, um zwischen ihnen zu wechseln.

Funktionen nach Anrufen

Ergebnisse Profiling

In diesem Modus werden die Ergebnisse des Profiling für die Funktionen dargestellt:

  • Funktion – Funktions- oder Klassenmethodenname.
  • Zeile – Zeile, in der die Funktion aufgerufen wird. Wenn die Funktion an mehreren Stellen im Programm aufgerufen wird, sehen Sie dieses Symbol Ausklappen. Ein Klick darauf öffnet Informationen zu jedem Anruf.
  • Anzahl – Anzahl der Funktionsaufrufe während des Programmablaufes.
  • Zeit – Ausführungszeit der Funktion in Mikrosekunden, sowie in % bezogen auf die Ausführungszeit aller Funktionen. Die Ausführungszeit der Funktion ist die Summe der Ausführung aller darin aufgerufenen Funktionen.
  • Graph – Graph nach der Ausführungszeit der Funktion.

Über die Symbole können Sie die Art der Funktionen festlegen:

  • Benutzerdefinierte Funktion – benutzerdefinierte Funktion.
  • Systemfunktion – Systemfunktion.
  • Event handling function – Funktion zur Ereignisbehandlung (Ein*).
  • Klassenmethode – Klassenmethode.

Zusätzlich zu diesen Funktionen zeigt der Profiler an:

  • Systemfunktion @global_initializations – Daten zur Initialisierung aller globalen Variablen.
  • Systemfunktion @global_deinitializations – Daten zur Deinitialisierung aller globalen Variablen.

Um eine Funktion in einer Datei anzuzeigen, klicken Sie doppelt darauf.

Der Profiler zeigt nicht alle Funktionen an, sondern nur die, die während des Programmablaufs aufgerufen werden.

Funktionen nach Zeilen

Ergebnisse Profiling

In diesem Modus werden die Daten zur Programmlaufzeit der Befehlszeilen dargestellt. Die Zeilen sind nach Programmfunktionen gruppiert.

  • Funktion – Funktionsname.
  • Zeile – Nummer einer Zeile, für die die Daten angezeigt werden. Um die Daten zur Ausführungszeit jeder Funktionszeile anzuzeigen, klicken Sie auf Ausklappen.
  • Anzahl – Anzahl der Male, die der Code einer bestimmten Zeile ausgeführt wurde.
  • Zeit – Codeausführungszeit einer bestimmten Zeile in Mikrosekunden und %. Die Prozentwerte für jede Zeile werden relativ zur Ausführungszeit der Funktion angezeigt. Prozentwerte für Funktionen werden bezogen auf die Ausführungszeit eines gesamten Programms angezeigt.
  • Graph – graphische Darstellung nach Ausführungszeit.

Um eine Zeile in einer Datei anzuzeigen, klicken Sie doppelt darauf.

Kontextmenü

Die folgenden Befehle stehen im Kontextmenü zur Verfügung:

  • Öffnen – geht zu einer Zeile oder einer Funktion in einer Quellcodedatei. Das gleiche kann durch Doppelklick oder Drücken von Enter erreicht werden.
  • Alles Ausklappen – alle zusammengeklappten Funktionen aus geklappt.
  • Alles Einklappen – alle erweiterten Funktionen ein geklappt.
  • Funktionen nach Zeilen – Anzeige der Ergebnisse des Profiling nach Zeilen.
  • Funktionen nach Aufrufen – Anzeige der Ergebnisse des Profiling nach Aufrufen.
  • Export – Exportieren der Ergebnisse des Profiling in Open XML (MS Office Excel), HTML (Internet Explorer) oder CSV (Textdatei).
  • Auto-Größe – automatische Größenanpassung von Feldern aktivieren/deaktivieren. Die gleiche Aktion wird durch Drücken von A ausgeführt.
  • Gitter – Gitter ein-/ausblenden, um Felder zu trennen. Die gleiche Aktion wird durch Drücken von G ausgeführt.