Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XXXIII): Ändern von Orders und Positionen unter bestimmten Bedingungen"
Guten Tag!
Vielen Dank für die Artikelserie und für den für MQL4 angepassten Code!
Zu den praktischen Beispielen.
Die Aufgabe ist folgende,
- Wenn bestimmte Marktbedingungen eintreten, öffnen Sie mehrere Positionen in der gleichen Richtung mit den gleichen Schlussniveaus für Verluste und unterschiedlichen Niveaus für Gewinne.
- Wenn ähnliche Bedingungen unten/oben auftreten, öffnen Sie mehrere weitere Positionen in der gleichen Richtung, wiederum mit den gleichen Schlussniveaus für Verluste und unterschiedlichen Niveaus für Gewinne + ändern Sie das Verlustniveau der offenen Positionen auf Null.
- der Gesamtumfang der ersten Reihe von Positionen sollte unter Berücksichtigung eines Verlusts von 2 % in der Bilanz bestimmt werden
- die kumulative Größe des zweiten Satzes von Positionen sollte unter Berücksichtigung eines 2%igen Verlustes bei den Mitteln bestimmt werden
- Die Arbeit mit schwebenden Aufträgen wird nicht erwartet.
Mein MQL4 Expert Advisor hat bereits einen Algorithmus zum Finden von Einstiegspunkten implementiert, aber es gibt noch keine Handelsoperationen.
Achtung, Frage ))
Welche der Bibliotheken, Klassen, Methoden der ersten Serie würden mir helfen, die Entwicklung zu beschleunigen?

- www.mql5.com
Guten Tag!
Vielen Dank für die Artikelserie und für den für MQL4 angepassten Code!
Was die praktischen Beispiele betrifft.
Es gibt eine Aufgabe,
- Wenn bestimmte Marktbedingungen eintreten, öffnen Sie mehrere Positionen in der gleichen Richtung mit den gleichen Verlustniveaus und unterschiedlichen Gewinnniveaus.
- Wenn ähnliche Bedingungen unterhalb/oberhalb eintreten, eröffnen Sie mehrere weitere Positionen in derselben Richtung, wiederum mit denselben Schlussverlusten und unterschiedlichen Gewinnen, und ändern Sie das Verlustniveau der offenen Positionen auf Null.
- der Gesamtumfang der ersten Reihe von Positionen sollte unter Berücksichtigung eines Verlusts von 2 % in der Bilanz bestimmt werden
- die kumulative Größe der zweiten Gruppe von Positionen sollte unter Berücksichtigung eines 2%igen Verlustes aus den Mitteln bestimmt werden
- die Arbeit mit schwebenden Aufträgen wird nicht vorausgesetzt
Mein MQL4 Expert Advisor hat bereits einen Algorithmus zum Finden von Einstiegspunkten implementiert, aber es gibt noch keine Handelsoperationen.
Achtung, Frage ))
Welche der Bibliotheken, Klassen, Methoden der ersten Serie würden mir helfen, die Entwicklung zu beschleunigen?
Keine vollständige Beschreibung.
1) Wir eröffnen Positionen, indem wir sofort die Kennung der ersten Gruppe in der magischen Zahl so einstellen, dass sie für alle dieselbe ist. Nun kann die gesamte erste Gruppe nach der Kennung 1 durchsucht werden.
2. öffnen wir Positionen, indem wir sie sofort auf die zweite Gruppenkennung in der magischen Zahl setzen, die für sie gleich ist. Nun kann die gesamte zweite Gruppe mit der Kennung 2 durchsucht werden.
2.1 Nachdem Sie die zweite Gruppe von Positionen geöffnet haben, wählen Sie alle Positionen der Gruppe 1 in der Liste aus und ändern ihre Stop-Loss-Niveaus auf das für sie berechnete Breakeven-Niveau. Das Niveau sollte unabhängig berechnet werden. Die Liste der Positionen der ersten Gruppe ist verfügbar - ihr kumulierter Gewinn/Verlust lässt sich leicht berechnen.
3. Ist diese Position das kumulative Volumen? Wenn ja, dann berechnen Sie es, bevor Sie die erste Gruppe von Positionen eröffnen.
4. handelt es sich bei dieser Position um das Gesamtvolumen? Wenn ja, dann berechnen Sie es, bevor Sie die zweite Gruppe von Positionen eröffnen. Die Mittel hängen jedoch von der für die erste Gruppe belegten Marge und ihrem Gewinn/Verlust ab - gleitender Gewinn/Verlust auf freie Mittel.
5. Pending Requests sind praktisch, um alle notwendigen Bedingungen für die Eröffnung von Gruppen festzulegen. Planen Sie im Voraus, und setzen Sie die Erwartung. Ich bestehe nicht darauf - es ist ein Mittel zur Planung von Trading-Taktiken und Techniken.
Die Antwort - all dies ist im ersten Teil zu realisieren, was beabsichtigt ist. Ich verstehe die Frage nicht - es gibt keinen Versuch, etwas zu versuchen. Dementsprechend - ich kann nur Worte verwenden.
Artem, guten Tag
Unglaubliche Arbeit in Bezug auf die Kapazität, vielen Dank
Ich habe eine Anmerkung: In den meisten Fällen sind meine MT4-Testterminals mit einem echten Handelskonto im Anlegermodus verbunden.
Die Idee ist, die Bedingungen des Handelskontos im Tester zu maximieren (Swaps, Kommissionen, Stop-Levels - alles, was im RTD nicht ausgetauscht wird).
Die Bibliothek erkennt jedoch, dass der Handel mit dem Konto verboten ist und verweigert den Handel. Im Testgerät.
Vielleicht ist es sinnvoll, einige der Beschränkungen für die Arbeit im Testgerät explizit zu lockern?
Anscheinend, genau hier:
//--- Prüfen Sie die Handelserlaubnis für dieses Konto (wenn eine Verbindung mit dem Handelsserver besteht) else if(!this.m_account.TradeAllowed() && !::MQLInfoInteger(MQL_TESTER)) { //--- Schreiben Sie den Fehlercode in die Liste und geben Sie false zurück - eine weitere Prüfung ist sinnlos this.m_error_reason_flags=TRADE_REQUEST_ERR_FLAG_ERROR_IN_LIST; this.AddErrorCodeToList(MSG_LIB_TEXT_ACCOUNT_NOT_TRADE_ENABLED); return false; }
Ich habe meine hinzugefügt, aber dies ist vielleicht nicht die einzige Prüfung, die es sinnvoll macht, im Tester zu ignorieren?

- www.mql5.com
Artem, guten Tag
Unglaubliche Arbeit in Bezug auf die Kapazität, vielen Dank
Ich habe eine Anmerkung: In den meisten Fällen sind meine MT4-Testterminals mit einem echten Handelskonto im Anlegermodus verbunden.
Die Idee ist, die Nutzung der Handelskontobedingungen im Tester zu maximieren (Swaps, Kommissionen, Stop-Levels - alles, was nicht im RTD ausgetauscht wird).
Die Bibliothek erkennt jedoch, dass der Handel mit dem Konto verboten ist und verweigert den Handel. Im Testgerät.
Vielleicht ist es sinnvoll, einige der Beschränkungen für die Arbeit im Testgerät ausdrücklich zu lockern?
Anscheinend, hier:
Ich habe meine hinzugefügt, aber das ist vielleicht nicht die einzige Prüfung, bei der es Sinn macht, sie im Tester zu ignorieren?
Danke, ich werde es korrigieren.
Hallo @Artyom Trishkin, ich danke Ihnen für diesen Code.
Ich habe versucht, die modifizierte Version in MT4 ohne Testbuttons auszuführen, um auf Konto-/Handelsereignisse zu hören, aber ich sehe ein falsches Ergebnis, wenn ich 3 Trades geöffnet und geschlossen habe:
01:17:13.849 entfernt
01:17:13.733 uninit Grund 4
01:15:36.860 OnDoEasyEvent: Position geschlossen
01:15:36.860 - Position geschlossen: 2020.08.20 23:45:29.000 -EURUSD Geschlossen Verkauf #573015195 zu Preis 1.18610, Gewinn -0.13 USD
01:15:35.489 CEventsCollection::CreateNewEvent, Zeile 768: Dieses Ereignis ist bereits in der Liste
01:15:35.019 OnDoEasyEvent: Position geschlossen
01:15:35.019 - Position geschlossen: 2020.08.20 23:45:27.000 -EURUSD Geschlossen Kauf #573015193 zu Preis 1.18623, Gewinn -0.13 USD
01:15:30.144 OnDoEasyEvent: Position eröffnet
01:15:30.144 - Position eröffnet: 2020.08.20 23:45:29.000 -EURUSD Eröffnet 0.01 Verkauf #573015195 [0.01 Market-order Verkauf #573015195] zum Preis 1.18610
01:15:28.724 OnDoEasyEvent: Position eröffnet
01:15:28.724 - Position eröffnet: 2020.08.20 23:45:28.000 -EURUSD Eröffnet 0.01 Buy #573015194 [0.01 Market-order Buy #573015194] zum Preis von 1.18623
01:15:28.263 OnDoEasyEvent: Position eröffnet
01:15:28.257 - Position eröffnet: 2020.08.20 23:45:27.000 -EURUSD Eröffnet 0.01 Buy #573015193 [0.01 Market-order Buy #573015193] zum Preis von 1.18623
01:14:49.639 initialisiert
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus uchar-Array erzeugen
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus einem uchar-Array erstellen
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus einem uchar-Array erzeugen
01:14:22.120 Konto ****: **** (****) **** USD, 1:100, Hedge, Demokonto MetaTrader 4
01:14:20.357 erfolgreich geladen
Was ist wahrscheinlich falsch in meinem Testcode?
Hallo @Artyom Trishkin, vielen Dank für diesen Code.
Ich habe versucht, modifizierte Version in MT4 ohne Test-Schaltflächen ausführen, um Konto/Handel Ereignisse zu hören. aber ich sehe falsches Ergebnis, wenn ich geöffnet und geschlossen 3 Trades:
01:17:13.849 entfernt
01:17:13.733 uninit Grund 4
01:15:36.860 OnDoEasyEvent: Position geschlossen
01:15:36.860 - Position geschlossen: 2020.08.20 23:45:29.000 -EURUSD Geschlossen Verkauf #573015195 zu Preis 1.18610, Gewinn -0.13 USD
01:15:35.489 CEventsCollection::CreateNewEvent, Zeile 768: Dieses Ereignis ist bereits in der Liste
01:15:35.019 OnDoEasyEvent: Position geschlossen
01:15:35.019 - Position geschlossen: 2020.08.20 23:45:27.000 -EURUSD Geschlossen Kauf #573015193 zu Preis 1.18623, Gewinn -0.13 USD
01:15:30.144 OnDoEasyEvent: Position eröffnet
01:15:30.144 - Position eröffnet: 2020.08.20 23:45:29.000 -EURUSD Eröffnet 0.01 Verkauf #573015195 [0.01 Market-order Verkauf #573015195] zum Preis 1.18610
01:15:28.724 OnDoEasyEvent: Position eröffnet
01:15:28.724 - Position eröffnet: 2020.08.20 23:45:28.000 -EURUSD Eröffnet 0.01 Buy #573015194 [0.01 Market-order Buy #573015194] zum Preis von 1.18623
01:15:28.263 OnDoEasyEvent: Position eröffnet
01:15:28.257 - Position eröffnet: 2020.08.20 23:45:27.000 -EURUSD Eröffnet 0.01 Buy #573015193 [0.01 Market-order Buy #573015193] zum Preis von 1.18623
01:14:49.639 initialisiert
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus uchar-Array erzeugen
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus einem uchar-Array erstellen
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus einem uchar-Array erzeugen
01:14:22.120 Konto ****: **** (****) **** USD, 1:100, Hedge, Demokonto MetaTrader 4
01:14:20.357 erfolgreich geladen
Was ist wahrscheinlich in meinem Testcode falsch?
Ich weiß nicht, was du dort geändert hast ...
Ich habe einige Codes im Zusammenhang mit Schaltflächen geschnitten, aber es ist möglich, einige notwendige Codes zu entfernen. Ich füge es jetzt bei.
Aber stimmen Sie zu, dass der Fehler für die Nichterfassung der ZWEITEN Schlusskaufposition nicht mit meinen Änderungen zusammenhängen sollte?
Ich habe einige Codes im Zusammenhang mit Schaltflächen geschnitten, aber es ist möglich, einige notwendige Codes zu entfernen. Ich füge es jetzt an.
Aber stimmen Sie zu, dass der Fehler für die Nichterfassung der ZWEITEN Schlusskaufposition nicht mit meinen Änderungen zusammenhängen sollte?
Funktioniert der Test-Advisor ohne Fehler?
Arbeitet der Testberater ohne Fehler?
Diese "Konto"-Fehler erscheinen im Standard-TestDoEasyPart34.ex4
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus uchar-Array erzeugen
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus einem uchar-Array erstellen
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus einem uchar-Array erzeugen
Ich lasse den modifizierten EA laufen, um meine Ereignisse zu beobachten, dann platziere ich manuell einige Trades und schließe sie so schnell wie möglich.
Diese "Konto"-Fehler erscheinen im Standard-TestDoEasyPart34.ex4
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus uchar-Array erzeugen
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus einem uchar-Array erstellen
01:14:22.120 CAccount::Load: Konnte keine Objektstruktur aus einem uchar-Array erzeugen
-----
Zu Ihrer Information:
Da wir die Struktur des Konto-Objekts geändert haben (die Größe der uchar-Arrays zum Speichern der String-Eigenschaften des Kontos geändert und eine weitere Integer-Eigenschaft hinzugefügt), werden alle zuvor gespeicherten Dateien der Konto-Objekte nicht mehr korrekt geladen. Wenn sie sich im gemeinsamen Ordner der Terminals im Verzeichnis \Files\DoEasy\Accounts\ befinden, müssen sie alle vor dem Start dieses Testberaters gelöscht werden - sie werden beim Wechsel von einem Konto zum anderen mit einer neuen Größe der Objektstruktur neu erstellt.
-----

- 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 Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XXXIII): Schwebende Handelsanfragen - Entfernen und Ändern von Orders und Positionen unter bestimmten Bedingungen :
In diesem Artikel werden wir die Beschreibung des Konzepts des Handels mit schwebenden Anfragen vervollständigen und die Funktionen zum Entfernen von Pending-Orders sowie zur Änderung von Orders und Positionen unter bestimmten Bedingungen schaffen. Auf diese Weise werden wir über die gesamte Funktionalität verfügen, die es uns ermöglicht, einfache benutzerdefinierte Strategien bzw. EA-Verhaltenslogiken zu entwickeln, die unter benutzerdefinierten Bedingungen aktiviert werden.
Kompilieren Sie den EA und starten Sie ihn im Tester im visuellen Modus. Um das Entfernen von Orders sowie die Änderung von Orders und Positionen zu überprüfen, eröffnen wir zwei Verkaufspositionen und platzieren einen Pending-Verkaufsorder ohne StopLoss- und TakeProfit-Preise. Als Nächstes erstellen wir schwebende Anfragen zur Änderung der Stop-Level der Orders und Positionen gemäß dem Preis. Wir warten auf die Aktivierung der schwebenden Anfragen und die Platzierung spezifizierter Stop-Preise und entfernen Orders und Positionen.
Eröffnen wir dann zwei Kaufpositionen und platzieren einen Pending-Kauforder. Danach erstellen wir schwebende Anfragen, um Orders zu entfernen und Positionen gemäß der Zeit zu schließen.
Wie wir sehen können, wurden die Stopp-Level am Schnittpunkt eines bestimmten Preisniveaus für die Aktivierung einer schwebenden Anfrage festgelegt. Die Positionen wurden nach einer bestimmten Zeit geschlossen, und die Order wurde entfernt.
Autor: Artyom Trishkin