Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XXXII): Orders unter bestimmten Bedingungen platzieren"

 

Neuer Artikel Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XXXII): Schwebende Handelsanfragen - Orders unter bestimmten Bedingungen platzieren :

Wir setzen die Entwicklung der Funktionsweisen fort, die es den Benutzern ermöglicht, mit schwebenden Anfragen zu handeln. In diesem Artikel werden wir die Möglichkeit einführen, Pending-Orders unter bestimmten Bedingungen zu platzieren.

Das Objekt der schwebenden Anfrage enthält das Array, in dem alle seine Aktivierungsbedingungen gespeichert sind. Die Klasse zur Handelsverwaltung (d.h. ihr Timer) ermöglicht die ständige Einsicht in die Liste der schwebenden Handelsanfragen. Wenn es an der Zeit ist, eine schwebende Handelsanfrage zu aktivieren (alle vordefinierten Aktivierungsbedingungen sind erfüllt), wird ein Handelsauftrag an den Server gesendet. Seine Parameter werden von der ausgelösten schwebenden Anfrage festgelegt.

Um Positionen zu eröffnen, müssen wir nur das Auftreten bestimmter Bedingungen kontrollieren. Sobald sie eintreten, wird der Handelsauftrag zur Eröffnung einer Position an den Server gesendet.
Es gibt jedoch eine Komplikation bei der Platzierung von Pending-Orders unter Verwendung der schwebenden Anfrageobjekte: Ein Auftrag wird in einem Abstand zum Preis platziert, während eine Position zum entsprechenden aktuellen Preis festgelegt wird.
Um unter bestimmten Bedingungen mit der Platzierung von ausstehenden Bestellungen arbeiten zu können, müssen wir daher auch die Entfernung der Platzierung der ausstehenden Bestellung berücksichtigen. Daraus ergibt sich eine Frage: Beim Erstellen einer schwebenden Anfrage geben wir den Abstand einer zukünftigen Pending-Order an. ABER... ab welchem Preis? Von dem Preis, der zum Zeitpunkt einer hängigen Anfrage vorliegt? Oder von dem Preis, der zum Zeitpunkt der Erfüllung aller Bedingungen, die im Objekt der Anfrage für ihre Aktivierung festgelegt wurden, vorhanden ist? Schließlich kann sich der Preis zum Zeitpunkt der Erfüllung aller Bedingungen weit von der Ebene entfernen, auf der die schwebende Anfrage erstellt wurde, während wir den zukünftigen Preis nur in einem Fall kennen können — wenn die einzige Aktivierungsbedingung einer schwebenden Anforderung ein bestimmter Preiswert ist. In anderen Fällen ist der zukünftige Preis, von dem wir eine Order festlegen müssen, unbekannt.

Autor: Artyom Trishkin

[Gelöscht]  

Ich habe das vorherige DoEasy-Verzeichnis in Include auf meinem Computer gelöscht, dann habe ich die MQL5.zip-Datei dieses Artikels heruntergeladen.

Beim Kompilieren von TestDoEasyPart32.mq5 habe ich 61 Kompilierfehler 😱.


Es ist nur so, dass ein /-Zeichen am Anfang der Zeile 114 der Datei Message.mqh in der Funktion CMessage::ToMail fehlt (siehe rosa Pfeil auf dem Bild oben)

Sobald das Schrägstrich-Zeichen hinzugefügt wird, um die Kommentarzeile zu definieren, gibt es keine Kompilierungsprobleme mehr.

Ich musste auch das Nur-Lese-Flag der Dateien im DoEasy-Verzeichnis ändern, damit die Änderung gespeichert werden konnte.

 
Laurent Soudron :

Ich habe das vorherige DoEasy-Verzeichnis in Include auf meinem Computer gelöscht, dann habe ich die MQL5.zip-Datei dieses Artikels heruntergeladen.

Beim Kompilieren von TestDoEasyPart32.mq5 habe ich 61 Kompilierungsfehler 😱.


Es ist nur so, dass ein /-Zeichen am Anfang der Zeile 114 der Datei Message.mqh in der Funktion CMessage::ToMail fehlt (siehe rosa Pfeil auf dem Bild oben)

Sobald das Schrägstrich-Zeichen hinzugefügt wird, um die Kommentarzeile zu definieren, gibt es keine Kompilierungsprobleme mehr.

Ich musste auch das Nur-Lese-Flag der Dateien im DoEasy-Verzeichnis ändern, damit die Änderung gespeichert werden konnte.

Dieser ärgerliche Fehler wurde bei der Übersetzung des Textes des Artikels und der Kommentare im Code vom Russischen ins Englische gemacht.

Im Quellcode, der dem Artikel im russischen Teil der mql5.com-Ressource beigefügt ist, gibt es keinen solchen Fehler:


Vielen Dank für Ihre Aufmerksamkeit und Sorge.

---------------------------------

Эта досадная ошибка была внесена при переводе текста статьи и комментариев в коде с русского языка на английский.
В исходниках, приложенных к статье в русской части ресурса mql5.com, такой ошибки нету.

Спасибо за вашу внимательность и неравнодушие.
 

Hallo,

auf meinem IC Markets Demo-Konto (MT5) wird ein Fehler bezüglich des falschen Ordertyps Filling Type angezeigt.

Ich habe Ihren Code debuggt und festgestellt, dass die Initialisierung mit ORDER_FILLING_IOC auf meinem Konto in Ordnung zu sein scheint. Wenn jedoch die Zeile engine.OpenBuy(lot,Symbol(),magic,stoploss,takeprofit); im EA aufgerufen wird und versucht wird, eine Position zu öffnen (oder zu schließen), dann wird der Füllungstyp nicht richtig eingestellt (siehe unten).

Ich habe eine schnelle (und schmutzige) Lösung gefunden, damit es funktioniert. Sie können die Änderungen sehen, indem Sie einen Vergleich mit Ihren Dateien in den 2 Dateien im Anhang machen. Bitte ersetzen Sie meinen Code durch den richtigen Code.


Trading.mqh um Zeile 2646:
Ich habe geändert:
res=trade_obj.OpenPosition(type,this.m_request.volume,this.m_request.sl,this.m_request.tp,magic,comment,deviation, this.m_request.type_filling ); //anstelle von type_filling


TradeObj.mqh

CTradeObj::ClosePosition:
Ich habe hinzugefügt:
this.m_request.type_filling=ORDER_FILLING_IOC;

CTradeObj::SetOrder:
Ich habe hinzugefügt:
ENUM_ORDER_TYPE_FILLING order_type_filling=(ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);
this.m_request.type_filling= (type_filling==WRONG_VALUE ? order_type_filling : ORDER_FILLING_IOC);

Dateien:
TradeObj.mqh  253 kb
Trading.mqh  445 kb
 
marco :

Hallo,

auf meinem IC Markets Demo-Konto (MT5) gibt es eine Fehlermeldung über den falschen Order Type Filling Type.

Ich habe Ihren Code debuggt und festgestellt, dass die Initialisierung mit ORDER_FILLING_IOC auf meinem Konto in Ordnung zu sein scheint. Wenn jedoch die Zeile engine.OpenBuy(lot,Symbol(),magic,stoploss,takeprofit); im EA aufgerufen wird und versucht wird, eine Position zu öffnen (oder zu schließen), dann ist der Füllungstyp nicht richtig eingestellt (siehe unten).

Ich habe eine schnelle (und schmutzige) Lösung gefunden, damit es funktioniert. Sie können die Änderungen sehen, indem Sie einen Vergleich mit Ihren Dateien in den 2 Dateien im Anhang machen. Bitte ersetzen Sie meinen Code durch den richtigen Code.


Trading.mqh um Zeile 2646:
Ich habe geändert:
res=trade_obj.OpenPosition(type,this.m_request.volume,this.m_request.sl,this.m_request.tp,magic,comment,deviation, this.m_request.type_filling ); //anstelle von type_filling


TradeObj.mqh

CTradeObj::ClosePosition:
Ich habe hinzugefügt:
this.m_request.type_filling=ORDER_FILLING_IOC;

CTradeObj::SetOrder:
Ich habe hinzugefügt:
ENUM_ORDER_TYPE_FILLING order_type_filling=(ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);
this.m_request.type_filling= (type_filling==WRONG_VALUE ? order_type_filling : ORDER_FILLING_IOC);

Danke! In späteren Artikeln wurde dies bereits behoben.

Спасибо. В последующих статьях это уже исправлено.

 
Artyom Trishkin:

Danke! In späteren Artikeln wurde dies bereits behoben.

Спасибо. В последующих статьях это уже исправлено.

Ich habe den Code aus Teil 34 ausprobiert, aber der Fehler bleibt weiterhin bestehen:


Ich habe auch versucht, den EA aus Teil 34 mit der DoEasy-Bibliothek aus deinem letzten Artikel Teil 43 zu verwenden, aber diese Bibliothek Teil 43 ist nicht kompatibel mit dem EA aus Teil 34 (geänderte engine.OnTimer-Methode etc.).

Was mache ich falsch? : ) Spasibo!

 
marco :

Ich habe den Code aus Teil 34 ausprobiert, aber der Fehler bleibt weiterhin bestehen:


Ich habe auch versucht, den EA aus Teil 34 mit der DoEasy-Bibliothek aus Ihrem letzten Artikel Teil 43 zu verwenden, aber diese Bibliothek Teil 43 ist inkompatibel mit dem EA aus Teil 34 (geänderte engine.OnTimer-Methode usw.).

Was mache ich falsch? : ) Spasibo!

Was genau machst du, um diesen Fehler zu erhalten? Welchen EA verwendest du? Ist dieser Test-Advisor aus dem Artikel unverändert?

Что именно вы делаете чтобы получить эту ошибку? Какой используете советник? Это тестовый советник из статьи без изменений?

 
Artyom Trishkin:

Was genau tun Sie, um diesen Fehler zu erhalten? Welchen EA verwenden Sie? Ist dieser Test Advisor aus dem Artikel unverändert?

Что именно вы делаете чтобы получить эту ошибку? Какой используете советник? Это тестовый советник из статьи без изменений?

Ich drücke "Kaufen" oder "Verkaufen", ohne dass "P" oder "T" aktiviert sind.

Ich habe den unveränderten EA aus Teil 34 verwendet.

 
marco :

Ich drücke "Kaufen" oder "Verkaufen", ohne dass "P" oder "T" aktiviert sind.

Ich habe den unveränderten EA aus Teil 34 verwendet.

Gibt es solche Fehler auch bei MetaQuotes-Demo?

 
Artyom Trishkin:

Gibt es solche Fehler bei MetaQuotes-Demo?

Keine Fehler bei MetaQuotes-Demo. Interessant...
Und jetzt?

 
marco :

Keine Fehler bei MetaQuotes Demo. Interessant...
Und jetzt?

Also - ich muss mich mit dem Handelsserver verbinden, bei dem Sie Fehler gefunden haben, und einen Grund finden, das Verhalten zu beheben.

Nennen Sie mir die Details für die Registrierung eines Demokontos.