Diskussion zum Artikel "Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators" - Seite 3

 

Frage 4: Im Artikel steht Folgendes:

...Geben wir in die Request-Struktur die Werte ein, die für die meisten Fälle des Aufrufs der OrderSend-Funktion in diesem Programm üblich sein werden:

   request.symbol      =Symbol();
   request.volume      =Lots;
   request.tp          =0;
   request.deviation   =0;
   request.type_filling=ORDER_FILLING_AON;

Das Element request.symbol enthält den symbolischen Namen des Instruments, mit dem die Handelsoperationen durchgeführt werden, das Element request.volume enthält den Wert des Kontrakts des Finanzinstruments, das Elementrequest.tp enthält den Wert des TakeProfit-Preises (in einigen Fällen wird der TakeProfit-Wert für die Order nicht angegeben, daher setzen wir Null in das Strukturelement request.tp )....

Aber warum setzen wir Null in das Strukturelement request.tp? Weil bei einem schwebenden Kaufauftrag request.tp=0 bedeutet, dass der TP immer unter dem aktuellen Geldkurs liegen wird. Und wie mir scheint, sollte eine Order mit einem solchen TP-Wert entweder wegen eines falsch angegebenen Wertes des TP-Parameters abgelehnt werden oder sofort zum aktuellen Geldkurs ausgeführt werden, nachdem der Server eine solche Order akzeptiert hat.

 

Frage 5: Im Artikel steht Folgendes:

...Bestimmen wir die lokalen Variablen, die in der Funktion OnTick verwendet werden sollen, und ihren Typ:

double h[], l[], ma[], atr_h[], atr_l[],
          lev_h, lev_l, StopLoss,
          StopLevel=_Point*SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL),
          Spread   =NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK) - SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits);

...Die Variable StopLevel wird verwendet, um den Wert STOP_LEVEL zu speichern - den Mindestabstand zwischen dem aktuellen Preis und der erteilten Order (in Preiseinheiten). Dieser Wert ergibt sich als Produkt aus dem Punktpreis (vordefinierte Variable _Point) und dem STOP_LEVEL-Wert in Punkten. Die Funktion SymbolInfoInteger gibt den STOP_LEVEL-Wert zurück. Der erste Parameter dieser Funktion ist der symbolische Name des Instruments und der zweite Parameter ist der Bezeichner der angeforderten Eigenschaft....

Im MQL5-Referenzhandbuch heißt es außerdem, dass"SYMBOL_TRADE_STOPS_LEVEL die Mindestspanne in Pips vom aktuellen Schlusskurs für das Setzen von Stop-Aufträgen ist ". Wie es mir scheint, geht es in beiden Fällen um die Erfüllung der Ungleichung

ORDER_PRICE_CURRENT-request.price>=SYMBOL_TRADE_STOPS_LEVEL(im Falle der Sell_Stop-Order).

Warum prüft der Expert Advisor Code dann den Abstand zwischen Bid (Ask) und StopLoss auf Überschreitung der minimalen StopLevel Marge?

               ...// liegt der neue StopLoss nicht in der Nähe des aktuellen Kurses?
               && NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID)-StopLoss-StopLevel,_Digits)>0
               
               ...// liegt der neue StopLoss nicht in der Nähe des aktuellen Kurses?
               && NormalizeDouble(StopLoss-SymbolInfoDouble(Symbol(),SYMBOL_ASK)-StopLevel,_Digits)>0

Ist eine solche Prüfung in allen Fällen erforderlich, oder handelt es sich um eine Besonderheit bei der Umsetzung einer bestimmten Strategie? Kurz gesagt, sollte ich immer den Abstand zwischen Bid (Ask) und StopLoss überprüfen, wenn ich eine Pending-Order platziere, um zu sehen, ob die minimale StopLevel-Marge überschritten wird?

 
Yedelkin:

Aber warum setzen wir Null in das Strukturelement request.tp? Denn wenn wir eine schwebende Kauforder haben , dann bedeutet request.tp=0, dass der TP immer unter dem aktuellen Geldkurs liegt. Und wie es mir scheint, sollte eine Order mit einem solchen TP-Wert entweder aufgrund eines falsch angegebenen Wertes des TP-Parameters abgelehnt werden oder sofort zum aktuellen Geldkurs ausgeführt werden, nachdem der Server eine solche Order akzeptiert hat.
Null bedeutet, dass es keinen TP gibt.
 
Yedelkin:

Kurz gesagt, sollte ich immer den Abstand zwischen Bid (Ask) und StopLoss überprüfen, wenn ich eine schwebende Order platziere, um zu sehen, ob die minimale StopLevel-Marge überschritten wird?

Es ist immer notwendig, das SL/TP/Entry-Kursniveau von Pending Orders auf die Mindestmarge zu überprüfen, wenn Sie mit der Einstellung von Orders sehr nahe am Markt arbeiten.

Wenn Sie mit Stops oder Pending Orders in einem vernünftigen und vom Markt entfernten Modus arbeiten (Dutzende und Hunderte von Punkten), können Sie eine solche Überprüfung überspringen.

 
Renat:

Sie sollten immer das SL/TP/Entry-Preis-Niveau von schwebenden Aufträgen auf minimale Einrückung überprüfen, wenn Sie mit Aufträgen arbeiten, die sehr nahe am Markt liegen.

Klärung der Frage 5.1.

Ich lasse den Expert Advisor drei Niveaus für jede schwebende Order berechnen: Einstiegskurs/SL/TP.

Da im Voraus nicht bekannt ist, wie nah/weit das Einstiegskursniveau im Verhältnis zum aktuellen Marktpreis liegen wird, wirft die Überprüfung des Einstiegskursniveaus auf Einhaltung der Mindestspanne keine Fragen auf.

Aber gegen welches Niveau sollten wir die beiden anderen SL/TP-Niveaus prüfen? Es ist etwas unlogisch, die SL/TP-Niveaus in Bezug auf den aktuellen Marktpreis zu prüfen, da das Einstiegskursniveau ziemlich weit vom aktuellen Marktpreis entfernt sein kann und eine solche Prüfung jede Relevanz verliert. Aus diesem Grund habe ich im Expert Advisor die Bedingung |Einstiegskurs-TP(SL)|>SYMBOL_TRADE_STOPS_LEVEL zur Überprüfung vorgesehen. Im Allgemeinen funktioniert der Expert Advisor mit solchen Bedingungen gut, aber als ich anfing, den EA-Code zu optimieren, fragte ich mich, ob eine solche Prüfung aus der Sicht der Verarbeitung ausstehender Aufträge durch den Server notwendig ist. Der Code des Expert Advisors ist nicht mit der Überprüfung dieser Bedingung überlastet (die Strategie des Expert Advisors selbst erfordert eine solche Überprüfung nicht).

Mit anderen Worten, sollte die schwebende Order mit drei Entry-Preis/SL/TP-Levels immer die SL/TP-Levels auf die Mindestspanne prüfen? Und wenn ja, sollte sie auf eine Mindestmarge in Bezug auf welches Niveau (Preis) geprüft werden?

 

Etwas fehlt die Möglichkeit, meinen Beitrag zu bearbeiten. Also werde ich hier hinzufügen:

= Für jede Pending Order berechnet der Expert Advisor unabhängig voneinander drei Stufen: Einstiegskurs/SL/TP. Der Zweck "eine Pending Order näher an den Marktzu setzen " wird nicht verfolgt. =

 

SL und TP in der Pending-Ebene werden vom Einstiegskurs so bewertet, dass sie nicht weniger als ein Mindestniveau davon entfernt sind.

Im MT4 funktioniert es genauso.

 
Renat:

SL und TP im Pending-Level werden vom Entry-Kurs aus bewertet, so dass sie mindestens ein Level von diesem entfernt sind.

Im MT4 funktioniert das genauso.

OK, jetzt habe ich alles verstanden. Also, ich kann den EA-Code nicht einfacher machen; zunächst wurde alles gemäß dem Artikel gemacht, d.h. korrekt.

Und ich kenne mich mit MT4 nicht aus, also sind solche Fragen "von einem Dummy". Vielen Dank!

 
Renat:

...Überprüfen Sie immer das SL/TP/Entry-Preis-Niveau der schwebenden Aufträge auf eine minimale Einrückung, wenn Sie mit Aufträgen arbeiten, die sehr nahe am Markt liegen.

...SL und TP in der Pending-Ebene werden vom Entry-Preis geschätzt, so dass sie nicht weniger als ein Mindestniveau davon entfernt sind.

Frage 6: Es ist klar, dass bei der Platzierung von Pending Orders die minimale Einrückung überprüft wird. Jetzt haben wir eine Frage zu den Besonderheiten der Überprüfung der Mindestspanne bei der Änderung des TP/SL einer offenen Position.

Situation: Eine offene Position hat einen festen TP und einen "Pull-up" SL, der sich dem festen TP nähert, wenn sich der Preis in eine günstige Richtung bewegt. In Analogie zum Setzen einer Pending Order prüft der Expert Advisor jedes Mal, wenn er einen Auftrag zur Änderung des TP/SL einer offenen Position sendet, die minimale Einrückung in Bezug auf die beiden Niveaus TP und SL.

In der Beschreibung der Funktion PositionModify der Klasse CTrade wird jedoch angegeben, dass der Parameter tp "Der neue Preis, bei dem der Take Profit ausgelöst wird (oder, wenn die Änderung nicht erforderlich ist, der vorherige Wert)" ist.

Dementsprechend lautet die Frage: Wenn eine Änderung des zuvor festgelegten TP-Niveaus nicht erforderlich ist, ist es dann notwendig, beim Senden eines Auftrags zur Änderung des TP/SL einer offenen Position die Mindestspanne dieses TP-Niveaus vom aktuellen (tatsächlichen) Preis zu prüfen? Oder reicht es in einer solchen Situation aus, die Mindestmarge nur in Bezug auf den zu ändernden SL zu prüfen?

Mit anderen Worten: Ist es möglich, bei der Übermittlung eines Auftrags zur Änderung des TP/SL einer offenen Position die Mindestspanne in Bezug auf den TP nicht zu prüfen, wenn dieses TP-Niveau bereits früher festgelegt wurde und keiner Änderung unterliegt, und im Änderungsauftrag einfach den vorherigen TP-Wert anzugeben?

 

Nachdem Sie die Datei "indicator_TP_de.mql5" heruntergeladen haben, benennen Sie sie bitte in "indicator_TP.mql5" um.