Gern geschehen, ich habe mein Bestes für dich getan. :)
Ich habe vor, dieses System zu pflegen und zu versuchen, die Funktionalität zu erweitern. Wenn es einen Bedarf an etwas gibt, dann schreiben Sie.
-----
Für volle Klarheit ist es meiner Meinung nach notwendig, zwei weitere rein technische Punkte zu erwähnen.
1. In der Datei Trace.mqh wird eine einzelne Instanz des Tracers erstellt (am Ende der Datei).
extern CTraceCtrl* m_trace; // eine einzelne Instanz des Tracers
Dank der externen Direktive wird die Instanz nur eine sein. Das heißt, es hängt nicht davon ab, wie viele #include "Trace.mqh" -Dateien in der #include "Trace.mqh"-D atei enthalten sind
2. Die CTraceView Klasse wird in CTraceCtrl nur aus einem einzigen Grund verwendet - um die CTraceCtrl::Break Funktion auszuarbeiten.
Nämlich um eine Reaktion auf Benutzerklicks in einer while-Schleife zu haben (true)
Hinzufügen der __PATH__-Makroverarbeitung (Build 420), in Verbindung mit der alle Klassen aktualisiert werden.
Die Schaltfläche zum Öffnen einer Node-Datei wurde dem INFO-Fenster hinzugefügt.

Das Öffnen erfolgt durch den Befehl ShellExecute , so dass die Erlaubnis zum DLL-Import erforderlich ist, damit die Klassen funktionieren.
Funktionalität zum Hinzufügen von Knotenbeschreibungen hinzugefügt.
In _IN-Makros ist es jetzt möglich, eine zusätzliche Beschreibung hinzuzufügen, um z.B. die Bedingungen für die Eingabe eines Knotens oder einige relevante Informationen anzuzeigen.
Diese Beschreibung wird in der Baumanzeige dynamisch aktualisiert.
Code-Beispiel:
void OnTick() { _IN(""); static datetime limit_time=0; // Bearbeitungszeit des letzten Geschäfts + Timeout //--- bei Zeitüberschreitung nicht verarbeiten if(TimeCurrent()>=limit_time) { _IN2(TimeCurrent()+">="+limit_time); //--- Prüfung auf Daten if(Bars(Symbol(),Period())>2*InpMATrendPeriod) { _IN3(Bars(Symbol(),Period())>2*InpMATrendPeriod); //--- Änderung der Grenzzeit durch Timeout in Sekunden, wenn verarbeitet if(ExtExpert.Processing()) limit_time=TimeCurrent()+ExtTimeOut; } } //--- }
Ein Beispiel dafür, wie die Informationen aussehen werden

Schaltfläche zum Aktivieren der Anzeige der Beschreibung - oben rechts "i"
1. Hinzufügen einer separaten CPropertyView-Klasse für die Anzeige von Knoteneigenschaften.
2. Alle überschriebenen Funktionen von Klassen wurden als virtuell gemacht, so dass alle Klassen aktualisiert werden.
3. Hinzufügen von zwei neuen Eigenschaften zur CNode-Klasse.
m_edit - Vorzeichen des editierbaren Feldes in CPropertyView
m_brkuse - Anzahl der Aufrufe des Knotens, bei denen die CTraceCtrl::Break-Funktion angehalten und aufgerufen wird. 3.
3. Laut Urains Notizen im Forum wurden zwei Möglichkeiten zur Verwendung von Code-Stopps hinzugefügt.
- Aktivieren/Deaktivieren von Stopps (roter Knopf D)
- Stopp nach bestimmter Anzahl von Knotenaufrufen
а. Die Einstellung der Anfangsnummer m_brkuse im Knoten kann mit einem Makro (in der Trace-Datei) erfolgen
#define _BRKUSES(u) if (!NIL(m_trace)) if (!NIL(m_trace.m_cur)) ........
b. Oder direkt im Fenster der Knoteneigenschaften im Feld"DebugBreak after", das die erforderliche Anzahl von Aufrufen vor dem Anhalten angibt

CHARTEVENT_CLICK
CHARTEVENT_KEYDOWN
CHARTEVENT_OBJECT_DELETE
CHARTEVENT_OBJECT_CHANGE
CHARTEVENT_OBJECT_CREATE
5. Kleinere kosmetische Änderungen in der Baumzuordnung
Gibt es eine Möglichkeit, diesen Mechanismus in Skripten zu verwenden?
Ich denke schon. Aber normalerweise wird der Code in Skripten nicht viel verzweigt (es sei denn natürlich, das Skript befindet sich in einer Schleife).
Außerdem gibt es eine Unannehmlichkeit - OnChartEvent Ereignis wird nicht in Skripten behandelt.
Ich denke schon. Aber normalerweise wird der Code in Skripten nicht viel verzweigt (es sei denn natürlich, das Skript befindet sich in einer Schleife).
Außerdem gibt es eine Unannehmlichkeit - Skripte behandeln das OnChartEvent-Ereignis nicht.
Und wenn mein Skript viele verschiedene Klassen, Klassenhierarchien verwendet?
Ich denke, es ist notwendig, das Tool auch für Skripte zu schärfen...
Der Klasse CTraceView ist es egal, wer sie aufruft: Sie erstellt einen Baum und zeigt ihn an.
Aber Skripte haben ein unlösbares Rückkopplungsproblem. Sie werden nicht in der Lage sein, aktiv mit dem Baum zu arbeiten.
- 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.
Neuer Artikel Tracing, Debugging und strukturelle Analyse von Quellcodes :
Die gesamte Problematik der Erstellung einer Struktur eines auszuführenden Codes und dessen Tracing lässt sich ohne ernsthafte Schwierigkeiten lösen. Diese Möglichkeit trat mit MetaTrader 5 dank einer neuen Funktion der MQL5-Sprache in Erscheinung: der automatischen Erstellung von Variablen eines komplexen Datentyps (Strukturen und Klassen) und deren Beseitigung beim Verlassen des lokalen Umfelds. Dieser Beitrag beschreibt die Methoden und liefert ein vorgefertigtes Tool.
Als Methode für die Darstellung der Struktur wird eine herkömmliche Herangehensweise genutzt: die Darstellung in Form einer Baumstruktur. Zu diesem Zweck benötigen wir zwei Informationsklassen. CNode – ein "Knoten" zum Schreiben aller Informationen über ein Stack. CTreeCtrl – ein "Baum", der alle Knoten verarbeitet. Und CTraceCtrl, der Tracer selbst, für die Verarbeitung der Bäume.
Die Klassen werden gemäß der folgenden Hierarchie implementiert:Die Klassen CNodeBase und CTreeBase beschreiben grundlegende Eigenschaften und Methoden der Arbeit mit Knoten und Bäumen.
Die vererbte Klasse CNode erweitert die Grundfunktionalität von CNodeBase und die Klasse CTreeBase arbeitet mit der abgeleiteten Klasse CNode. Dies geschieht, da die Klasse CNodeBase den anderen Standardknoten übergeordnet ist und als unabhängige Klasse für die praktische Umsetzung der Hierarchie und Vererbung isoliert ist.
Im Gegensatz zu CTreeNode aus der Standardbibliothek beinhaltet die Klasse CNodeBase ein Array aus Pointern zu Knoten, sodass die Menge der "Zweige" aus diesem Knoten unbegrenzt ist.
Autor: o_O