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

 

Neuer Artikel Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators :

Die im MetaTrader 5 Client Terminal enthaltene MetaQuotes Programming Language 5 (MQL5) bietet im Vergleich zu MQL4 zahlreiche neue Möglichkeiten und bessere Performance. Dieser Beitrag hilft Ihnen dabei, sich mit dieser neuen Programmiersprache vertraut zu machen. In diesem Beitrag werden einfache Beispiele zum Schreiben eines Expert Advisors und eines benutzerdefinierten Indikators vorgestellt. Wir werden auch auf einige Details der MQL5-Sprache eingehen, die notwendig sind, um diese Beispiele zu verstehen.

Autor: Denis Zyatkevich

 
Ich kann den Debugger für einen Indikator, z. B. MACD oder Custom Moving Average, nicht starten. Wenn ich die Taste F5 drücke, ändert sich die Schaltfläche "Kompilieren" in die Schaltfläche "Abbrechen", nach einem Sekundenbruchteil blinkt der Bildschirm und alles kehrt in den Ausgangszustand zurück. Die Registerkarte "Debug" wird nicht angezeigt. Bei der Fehlersuche im Skript "AccountInfo" funktioniert der Debugger normal, Build 257.
 
Das Debugging von Indikatoren ist derzeit nicht implementiert.
 

Alles Gute zum Tag des Sieges!

Könnten Sie mich bitte beraten?

Der Expert Advisor enthält einen Zyklus zur abwechselnden Suche aller offenen Positionen. Die Funktion PositionGetDouble(POSITION_SL) wird in diesem Zyklus verwendet. Aus der Beschreibung des Parameters POSITION_SL geht hervor, dass er verwendet werden kann, um dasStop-Loss-Niveau für eine offene Position zu ermitteln.

Frage 1: Welchen Wert zeigt die Funktion PositionGetDouble(POSITION_SL) an, wenn eine offene Position durch das Auslösen mehrerer schwebender Aufträge mit unterschiedlichen Stop-Loss-Niveaus gebildet wurde?

Frage 2: Wenn eine offene Position durch das Auslösen mehrerer Pending Orders mit unterschiedlichen Stop-Loss-Levels gebildet wurde, wie kann man am besten Daten zu diesen Stop-Loss-Levels erhalten?

Wenn dieses Thema bereits diskutiert wurde, geben Sie bitte einen Link an.

Документация по MQL5: Торговые функции / PositionGetDouble
Документация по MQL5: Торговые функции / PositionGetDouble
  • www.mql5.com
Торговые функции / PositionGetDouble - Документация по MQL5
 
Yedelkin:

Fröhlichen Tag des Sieges!

Frage 1: Welchen Wert zeigt die Funktion PositionGetDouble(POSITION_SL) an, wenn eine offene Position durch das Auslösen mehrerer schwebender Aufträge mit unterschiedlichen Stop-Loss-Niveaus gebildet wurde?
Haben Sie überprüft, was die Funktion zurückgibt?
 
sergeev:
Haben Sie überprüft, was die Funktion zurückgibt?

Nein, das habe ich nicht. Weil ich nicht alle wichtigen Ausgangsbedingungen kenne, die bei der Überprüfung (dem Testen) einer bestimmten Funktion beachtet werden müssen. Und auch, weil ich die Möglichkeit, beim Erlernen einer für mich neuen Programmiersprache die wissenschaftliche Methode des Stocherns anzuwenden, ablehne.

Die Erklärung dafür. Die sehr geringe Anzahl von Artikeln, die sich mit Expert Advisors befassen, und das Fehlen eines Lehrbuchs über MQL5 zwingen den durchschnittlichen Benutzer, sich bei der Umsetzung seiner eigenen Handelsstrategie auf die im Internet verfügbaren Materialien zu verlassen, einschließlich dieses (sehr nützlichen) Artikels.

Wie Sie sehr gut verstehen, betreffen meine Fragen theoretische und angewandte Aspekte, die in der aktuellen Version des MQL5-Referenzhandbuchs sowie in den verfügbaren Artikeln über MQL5 Expert Advisors nicht enthalten sind.

Unter solchen Umständen halte ich es für viel sinnvoller, sachkundigen Personen (Sprachentwicklern und Autoren von Artikeln) Fragen zu einigen theoretisch-angewandten Aspekten von MQL5-Funktionen zu stellen, anstatt Experimente durchzuführen, zu prüfen, was eine Funktion unter bestimmten Bedingungen zurückgibt", und ähnliche Dilettantismen.

Ich stimme zu, dass eine Antwort von sachkundigen Personen darüber, "was sein sollte", optimaler aussieht als eine Gegenfrage wie "haben Sie überprüft, was die Funktion zurückgibt" (in Ermangelung meines Verständnisses der Besonderheiten ihrer Funktionsweise).

 

Ich habe die Antwort gefunden. Im Benutzerhandbuch für Client-Terminals:

...Уровни Тейк Профит и Стоп Лосс устанавливаются для позиции по последнему ордеру (рыночному или сработавшему отложенному).
Иными словами, стоп уровни в каждом последующем ордере по одной позиции заменяют предыдущие. 
...Срабатывание ордеров Тейк профит и Стоп Лосс приводит к полному закрытию позиции.  

Seltsam. Da für jedes Finanzinstrument nur eine offene Position möglich ist, zeigt sich, dass Szenarien mit teilweiser Schließung einer Position durch Stop-Loss prinzipiell nicht umsetzbar sind?

P.S. Nachdem ich diese MT5-eigene Besonderheit herausgefunden habe, ist es nicht mehr nötig, den von der Funktion PositionGetDouble(POSITION_SL) zurückgegebenen Wert zu überprüfen, wenn eine offene Position durch das Auslösen mehrerer Pending Orders mit unterschiedlichen Stop-Loss-Niveaus gebildet wurde.

 
Yedelkin:

Ich habe die Antwort gefunden. Im Benutzerhandbuch des Client-Terminals:

Seltsam. Da für jedes Finanzinstrument nur eine offene Position möglich ist, zeigt sich, dass Szenarien mit teilweiser Schließung einer Position durch Stop-Loss prinzipiell nicht umsetzbar sind?

P.S. Nachdem wir diese MT5-eigene Besonderheit herausgefunden haben, ist es nicht mehr nötig zu prüfen, welchen Wert die Funktion PositionGetDouble(POSITION_SL) zurückgibt, wenn eine offene Position durch das Auslösen mehrerer Pending Orders mit unterschiedlichen Stop-Loss-Niveaus gebildet wurde.

Es ist möglich, die Funktion "izpodvypodvert vypert vypert podvypert" zu erstellen, die den Take Profit entsprechend dem Volumen der Transaktionen auf dem gegebenen Instrument in Pending Orders nach Levels aufteilt.

Ich persönlich halte diese Funktion jedoch für unnötig, da ich mit offiziellen Handelsterminals vertraut bin, bei denen es kein Locking gibt.

 
CoreWinTT:

kann als Funktion "from-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub" erstellt werden ...

Ja, ich habe mir zu diesem Thema schon den Kopf zerbrochen. Es gibt drei Möglichkeiten :)

- entweder bestehende Szenarien für MT5-Eigenheiten kreativ überarbeiten;

- oder eine Klasse von Sub-Sub-Sub-Sub-Sub-Sub-Sub-Sub-Sub-Sub-Sub-Sub-Sub-Funktionen zu erstellen;

- oder die Verwendung von Stop-Losses und Take-Profits in Aufträgen zu vermeiden und stattdessen zunächst mit Bündeln von Aufträgen der entgegengesetzten Richtung zu arbeiten.

Macht nichts, wir schaffen das schon! :)

 

Frage zur Platzierung der ArraySetAsSeries-Funktionen im Expert Advisor.

ArraySetAsSeries Funktionen sind in der OnTick() Funktion direkt nach den CopyTime, CopyHigh und CopyLow Funktionen platziert.

Gibt es irgendwelche Hindernisse für die Platzierung von ArraySetAsSeries-Funktionen in der OnInit()-Funktion, oder sollten Arrays immer erst indiziert werden, nachdem sie kopiert wurden?

Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
Операции с массивами / ArraySetAsSeries - Документация по MQL5
 
Yedelkin:

Frage zur Platzierung der ArraySetAsSeries Funktionen im EA.

ArraySetAsSeries Funktionen sind in der OnTick() Funktion direkt nach den CopyTime, CopyHigh und CopyLow Funktionen platziert.

Gibt es irgendwelche Hindernisse für die Platzierung von ArraySetAsSeries-Funktionen in der OnInit()-Funktion, oder sollten Arrays immer erst indiziert werden, nachdem sie kopiert wurden?

Für Indikatorpuffer heißt es SetIndexBuffer:

Hinweis

Nach dem Verknüpfen wird das dynamische Array buffer[] wie in regulären Arrays indiziert, auch wenn das verknüpfte Array so eingestellt ist, dass es wie in Timeseries indiziert ist. Wenn es notwendig ist, die Reihenfolge des Zugriffs auf die Elemente des Indikator-Arrays zu ändern, ist es notwendig, die Funktion ArraySetAsSeries() nach dem Binden des Arrays mit der Funktion SetIndexBuffer() anzuwenden.

Für Expert Advisors sollte es ähnlich sein, siehe