Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil X): Kompatibilität mit MQL4" - Seite 3
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Artem, sagen Sie mir bitte, welche Rolle der hervorgehobene Codeabschnitt spielt.
Wie kann dieser Code ausgeführt werden, wenn der Timer nicht aktiviert ist?
Aber wenn dieser Codeabschnitt gelöscht wird, werden die Ereignismeldungen nicht gedruckt. Aber alles funktioniert mit ihm.
Und ich würde gerne in der Lage sein, ein Ticket, Preise und vielleicht einige andere Eigenschaften von Positionen und Aufträgen zusammen mit der Ereignismeldung zu erhalten.
Ich glaube, Sie haben den Kommentar geändert. In OnTimer() wird der EA nicht im Tester geprüft:
Und vergleichen Sie zwei Handler: in OnTick() wird der Bibliothekstimer nur im Tester gestartet, und in OnTimer() wird der Bibliothekstimer nur nicht im Tester gestartet - denn in MQL4 funktioniert der Timer nicht im Tester, und wir arbeiten mit Ticks im Tester.
Ich werde jetzt ein Beispiel machen.
Ich glaube, du hast den Kommentar geändert.
Der Kommentar hat sich von selbst geändert, ich habe ihn nicht angefasst.))))))
Ich habe nur an einer Stelle kopiert und an verschiedenen Stellen eingefügt und nicht darauf geachtet. Aber dann eine Negation in Form von ! und nicht wichtig nicht berührt.
Aber die Frage bleibt offen: Wenn der Timer nicht in OnInit() gestartet wird, was ist dann der Sinn des OnTimer() Handlers und warum wird der Code darin mindestens einmal ausgeführt.
Im Grunde habe ich die Meldungen im Protokoll erhalten. Es bleibt, die Eigenschaften der Elemente zu erhalten. Typ, Ticket, Preise und Zeitpunkt des Öffnens, Schließens, Änderns.
Und ich möchte in der Lage sein, Ticket, Preise und vielleicht einige andere Eigenschaften von Positionen und Aufträge zusammen mit der Ereignismeldung zu erhalten.
Nicht im Tester können Sie das Order-Ticket des letzten Ereignisses in OnChartEvent() - Parameter lparam erhalten. In dparam wird der Preis gespeichert. In sparam - Symbol.
Um Daten im Tester zu erhalten, sollten Sie derzeit den Ereigniscode verwenden, den Sie mit engine.LastTradeEvent() erhalten - weil alles vom Ereignis abhängt - wenn es eine Änderung ist, müssen Sie eine Liste der Änderungen erhalten, und wenn es eine Änderung in der Anzahl der Aufträge ist, müssen Sie Listen dieser neuen Aufträge erhalten.
Wir müssen CEngine hinzufügen, um die erforderlichen Werte an das Programm zurückzugeben. Ich bin noch nicht an dem Punkt angelangt, an dem die Informationen an das Programm gesendet werden - ich beschreibe noch die Vorbereitung der notwendigen Daten. In zukünftigen Artikeln werden wir die Klasse erreichen, die einen einfachen Zugang zu allen notwendigen Daten ermöglicht. Und jetzt - wenn Sie es dringend brauchen, müssen Sie zu CEngine die Rückgabe der Liste aus der Klasse-Sammlung von Ereignissen hinzufügen - die Klasse selbst hat den Empfang dieser Liste, hier sind sie - alle Listen im öffentlichen Abschnitt CEventCollection:
Alle Ereignisse werden in der Liste m_list_events gespeichert, und diese Methoden geben entweder die gesamte Liste oder gefiltert nach einem bestimmten Kriterium zurück.
Um das letzte Ereignis zu erhalten, genügt es, in CEngine die Rückgabe dieser Liste an das Programm zu erstellen und im Programm das gewünschte Ereignis aus der Liste zu nehmen.
All dies wird bald automatisiert werden - es ist noch nicht in der Warteschlange.
Wenn Sie noch eine Krücke machen müssen, ist es Diskussion - in einem privaten. Es lohnt sich hier nicht - es gilt nicht für die Bibliothek, da sie sich noch in der Entwicklung befindet, und weitere normale und ordnungsgemäße Arbeit wird getan werden, um alle und alle erforderlichen Ereignisse in das Programm zu bekommen.
Der Kommentar hat sich von selbst geändert, ich habe ihn nicht berührt. )))))
Ich habe nur an einer Stelle kopiert und an verschiedenen Stellen eingefügt und nicht darauf geachtet. Aber dann habe ich eine Negation in Form von ! und nicht wichtig nicht berührt.
Aber die Frage bleibt unbeantwortet: Wenn der Timer nicht in OnInit() gestartet wird, was ist dann der Sinn des OnTimer()-Handlers und warum wird der Code darin mindestens einmal ausgeführt.
Im Grunde habe ich die Meldungen im Protokoll erhalten. Es bleibt, die Eigenschaften der Elemente zu erhalten. Typ, Ticket, Preise und Zeitpunkt des Öffnens, Schließens, Änderns.
Erklären Sie, was Sie meinen? Sprechen Sie von der Erstellung eines Timers? Er wird im CEngine-Konstruktor erstellt:
Nicht im Tester können Sie das Auftragsticket des letzten Ereignisses in OnChartEvent() - Parameter lparam erhalten. In dparam wird der Preis gespeichert. In sparam - Symbol.
Ich habe es bereits gefunden, vielen Dank. Und wenn Sie ein Ticket bekommen, können Sie alles bekommen, was Sie brauchen. Außer von welchem Preis es eine Änderung gab. Oder machen Sie eine echte Krücke, um den Preis vor der Änderung zu wissen. Im Prinzip ist es noch nicht sehr notwendig.
Im Grunde habe ich die Protokollmeldungen erhalten. Ich muss nur die Eigenschaften der Positionen erhalten. Typ, Ticket, Preise und Zeitpunkt der Eröffnung, Schließung, Änderung.
Allerdings, für eine schnelle Lösung, fügen Sie eine Ereignisliste Rückkehr in den öffentlichen Bereich der CEngine:
Fügen Sie in den EA diesen Code ein:
Und das letzte Ereignis wird in das Protokoll gedruckt werden
Erklären Sie, was Sie meinen? Meinen Sie die Erstellung eines Timers? Er wird im CEngine-Konstruktor erstellt:
Nun, dafür musstest du die ganze Bibliothek durchgehen. )))
Das habe ich schon gefunden, danke. Und wenn Sie ein Ticket bekommen, können Sie alles bekommen, was Sie brauchen. Bis auf den Preis für den Umbau. Oder machen Sie eine richtige Krücke, um den Preis vor dem Umbau zu erfahren. Ich brauche es eigentlich noch nicht.
Ich habe Ihnen schon den Code gegeben - da steht alles drin, auch der Preis vor der Änderung.
Nun, dafür musste man die ganze Bibliothek durchforsten. )))
Nein. Lesen Sie einfach die Artikel
Und das ist passiert:
Während ich diesen Code in der Demo laufen ließ, wurde eine Limit-Order gesetzt und gelöscht
Und plötzlich, während des nächsten Mockings, wurde eine Position geändert, eine Position wurde geöffnet und eine Position wurde geschlossen. Aber woher kam die Aufzeichnung der Löschung einer längst gelöschten Order?