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"

 

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

 

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,

  1. 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.
  2. 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.
  3. der Gesamtumfang der ersten Reihe von Positionen sollte unter Berücksichtigung eines Verlusts von 2 % in der Bilanz bestimmt werden
  4. die kumulative Größe des zweiten Satzes von Positionen sollte unter Berücksichtigung eines 2%igen Verlustes bei den Mitteln bestimmt werden
  5. 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
Рынок — это место, где обычно происходит обмен товара на деньги или товара на товар. Если доступ на рынок свободный, то производители и потребители проводят обмен в условиях конкуренции. Существует
 
Nikolai Karetnikov:

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,

  1. Wenn bestimmte Marktbedingungen eintreten, öffnen Sie mehrere Positionen in der gleichen Richtung mit den gleichen Verlustniveaus und unterschiedlichen Gewinnniveaus.
  2. 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.
  3. der Gesamtumfang der ersten Reihe von Positionen sollte unter Berücksichtigung eines Verlusts von 2 % in der Bilanz bestimmt werden
  4. die kumulative Größe der zweiten Gruppe von Positionen sollte unter Berücksichtigung eines 2%igen Verlustes aus den Mitteln bestimmt werden
  5. 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?

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
, то позиции по каждому символу разрешается закрывать только в том порядке, в котором они были открыты — сначала самую старую, затем более новую и т.д. При попытке закрыть позиции в ином порядке будет получена ошибка. Уровень залоговых средств, при достижении которого происходит принудительное закрытие самой убыточной позиции (Stop Out). В...
 
Igor Ryabchikov:

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?

 
Mohammad Bazrkar :

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?

Dateien:
mhdbzr-34.mq4  46 kb
 
Mohammad Bazrkar :

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?

 
Artyom Trishkin:

Arbeitet der Testberater ohne Fehler?

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.
Ich benutze den Test-EA nicht, um Positionen zu öffnen/zu schließen.


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

 
Mohammad Bazrkar:
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.
Ich tue nicht verwenden Testen EA zu öffnen/schließen Position.


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

Ja, das werden sie. Denn dort wurde der Ansatz für die Speicherung Ihrer Kontodaten geändert. Das steht am Ende des Artikels als Warnung:
-----
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.
-----