Einzelnen Beitrag anzeigen
  #20 (permalink)  
Alt 19.09.15
Eberhard Eberhard ist offline
Neues Mitglied
 
Registriert seit: Mar 2014
Beiträge: 20
Eberhard befindet sich auf einem aufstrebenden Ast
Standard Laufzeitbegrenzung der Trades

Vor mehr als einem Jahr habe ich die Fragestellung der "Laufzeitbegrenzung der Trades" erstmalig ins Forum gebracht. Dabei ging es um eine Lösung für einen EA im MetaTrader 5, also in Mql5 und hier speziell bezogen auf eine CExpert-Anwendung. Zu meiner jetzigen Überraschung wurden die Diskussionsbeiträge dazu mit am Häufigsten angeklickt. Deshalb gehe ich davon aus, dass es weiterhin auch ein allgemeines Interesse zu dieser Fragestellung gibt, insbesondere deshalb, weil wir es damals nicht lösen konnten.

Für die Lösungsfindung kann praktisch jeder EA, programmiert in CExpert, herangezogen werden, denn die Lösung selbst hängt nicht vom implementierten Trading-Algorithmus ab.

Einen ersten wichtigen Hinweis zur Lösung findet man unter "Ordereigenschaften" in der MetaEditor-Hilfe "MQL5-Reference":


"Gültigkeitsfrist einer Order kann im Feld type_time der speziellen Struktur MqlTradeRequest angegeben werden beim Senden der Handelsanforderung durch die Funktion OrderSend(). Zulässig sind Werte aus der Aufzählung ENUM_ORDER_TYPE_TIME. Für die Erhaltung des Wertes dieser Eigenschaft verwenden Sie die Funktion OrderGetInteger() oder HistoryOrderGetInteger() mit dem Modifikator ORDER_TYPE_TIME.

ENUM_ORDER_TYPE_TIME

Identifikator
Beschreibung

ORDER_TIME_GTC
Warteorder vor der Ablehnung

ORDER_TIME_DAY
Order wird nur innerhalb des Handelstages gültig

ORDER_TIME_SPECIFIED
Order wird bis zum Ablauffrist gültig

ORDER_TIME_SPECIFIED_DAY
Order wird bis 23:59:59 Uhr am angegebenen Datum gültig. Wird diese Zeit nicht auf dem Handelszeit fallen, wird der Ablauf in naher den Handelszeit auftreten."



Leider gibt es dazu aber wohl kein konkretes Anwendungsbeispiel. Und dieser zitierte Hinweis bezieht sich nicht nur auf die Anwendung im CExpert, sondern soll allgemein anwendbar sein.

Für eine allgemeine Anwendung für ENUM_ORDER_TYPE_TIME wiederum habe ich aber im Netz folgenden Eintrag gefunden:

"MqlTradeRequest Request;
ZeroMemory(Request);
Request.type_time= ORDER_TIME_SPECIFIED;
Request.expiration = TimeCurrent()+PERIOD_M30*60;

Thanks for suggestion! It turns out MetaQuotes removed the following line: m_request.expiration = expiration;"


Dies scheint - gemäß der Kommentierung - in allgemeiner Form auch zu funktionieren.


Insofern wäre dies immerhin schon ein richtungsweisender Lösungansatz, ist jedoch in einer CExpert-Anwendung, wie ich feststellen musste, so nicht einfach umsetzbar.



Doch bietet CExpert eine spezielle Datei "ExpertTrade.mqh", worin z.B. ein "Setting order expiration type for easy trade operations"-Handler eingetragen ist. Diese Datei steuert u.a. letztendlich auch die Datei Trade.mqh mit den oben bereits erwähnten Einträgen für MqlTradeRequest und dann auch den SendOrder()-Handler.

Weiterhin gibt es die Eintragmöglichkeit von Flags für die unterschiedlichen "Modifikator ORDER_TYPE_TIME". Sie finden sich in der MQL5-Reference unter "Information über das Symbol":

"für jedes finanzielles Instrument können mehrere Modi der Gültikeitsfrist (Ablauffrist) der wartenden Ordern angegeben werden. Für jeden Modus gibt es eine Flagge, Flaggen können miteinander durch die Operation des logischen ODER (|) kombiniert werden, ZB, SYMBOL_EXPIRATION_GTC|SYMBOL_EXPIRATION_SPECIFIED. Für Prüfung der Zulässigkeit des bestimmten Modus für Instrument muss man das Ergebnis der logischen UND (&) mit der Flagge des Modus vergleichen.

Wenn für Symbol die Flagge SYMBOL_EXPIRATION_SPECIFIED angegeben wird, kann beim Senden der wartenden Order ihre Gültigkeitsfrist explizit angegeben werden.

Identifikator
Wert
Beschreibung

SYMBOL_EXPIRATION_GTC
1
Order ist zeitlich uneigeschränkt gültig, bis zu seiner expliziten Annullierung

SYMBOL_EXPIRATION_DAY
2
Order ist bis zum Tagesende gültig

SYMBOL_EXPIRATION_SPECIFIED
4
Ablauffrist wird in der Order angegeben werden

SYMBOL_EXPIRATION_SPECIFIED_DAY
8
Ablaufdatum wird in der Order angegeben werden ".


Die aufgeführten Zahlen sind also die Flags, denn die Modi können auch als Zahlen eingesetzt werden. Man sollte nun eigentlich davon ausgehen können, dass der Eintrag der entsprechenden Flag-Zahl in den Handler

"void CExpertTrade::CExpertTrade(void) : m_symbol(NULL), m_order_type_time(ORDER_TIME_GTC),
m_order_expiration(0)"

und der Abänderung des voreingestellten Eintrags von ORDER_TIME_GTC z.B. in ORDER_TIME_SPECiFIED bereits die Lösung sein würde(?).

Es bliebe dann jedoch zusätzlich noch offen, an welcher Stelle in CExpert die veränderte expiration eingetragen werden muss. Hier habe ich einige Versuche unternommen (vor allem in der Datei Expert.mqh, in der sich an mehreren Stellen die Einstellung der darin bereits angeführten expiration anbieten würde), bin aber leider nicht weitergekommen. Die Backtests haben bislang keine Veränderung gezeigt gegenüber den Ergebnissen des ohnehin voreingestellten Modifikators ORDER_TIME_GTC.


Falls hier jemand Erfahrungen mit MetaTrader 5-CExpert hat und eine Lösung dazu weiß, würde ich mich über eine Rückmeldung sehr freuen. Vielleicht können meine dazu wiedergegebenen Überlegungen ja zu einer Lösungsfindung beitragen.