Pending Order Expiration

 

Hallo,


mal eine Frage zum Verständnis,

bei einer Pending Order kann ich, muss ich aber nicht eine Experiation eintragen.

dazu verwende ich folgenden Code, ich nehme an das eine void hier richtig ist, falls man eine bool verwenden soll bitte mir verraten warum ;-)


void PendingOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,
                 const double OrderPrice,const double sl,const double tp,const int magic,
                 const string comment,const datetime time)
  {

   MqlTradeRequest neueOrder={0};
   MqlTradeResult result;
//--- setting request
   neueOrder.symbol       = symbol;
   neueOrder.type         = order_type;
   neueOrder.action       = TRADE_ACTION_PENDING;
   neueOrder.type_filling = ORDER_FILLING_FOK;
   neueOrder.type_time    = ORDER_TIME_SPECIFIED;
   neueOrder.volume       = volume;
   neueOrder.price        = OrderPrice;
   neueOrder.sl           = sl;
   neueOrder.tp           = tp;
   neueOrder.magic        = magic;
   neueOrder.comment      = comment;
   neueOrder.expiration   = time;

//--- action and return the result
  //return(OrderSendAsync(neueOrder,result));

   if(!OrderSend(neueOrder,result))
      PrintFormat("OrderSend error %d",GetLastError());  // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen
//--- Details zur Transaktion   
 PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }


der code funktioniert, das ist nicht das Problem.

normalerweise füge ich für die expiration

TimeCurrent() + Hours + 60 *60

ein, wobei ich für die Stunden eine Zahl verwende, nur damit keine Verwirrung kommt.


Jetzt habe ich aber bei MQL5 noch andere Möglichkeiten 

die stehen ja in der tollen Beschreibung

ORDER_TIME_GTC

ist völlig klar, da verwendet MT5 einfach 0, ist ja eine ENUM, der erste Wert = 0

jetzt gibts ja noch die anderen 3 Möglichkeiten

ORDER_TIME_DAY              // innerhalb des Handelstages
ORDER_TIME_SPECIFIED        // wie oben beschrieben, da verwende ich TimeCurrent() + Hours *60*60
ORDER_TIME_SPECIFIED_DAY    // gilt bis Tagesende

wenn ich das so einfügen, 

die Enumeration würde mir hier ja die Werte 1,2,3 ausgeben


damit hätte ich ja dann, wenn ich die Order bis um Mitternacht stehen haben will, als expiaration eine 3 stehen? Kennt das MQL5 auch so? Weil eigentlich werden da ja die Sekunden eingetragen

neueOrder.expiration   = 3;

und vielleicht kann mir mal wer den Unterschied zwischen ORDER_TIME_DAY und ORDER_TIME_SPECIFIC_DAY verraten?


danke

amando

 

Void ...Int ...Bool  Whatever you want :-)


Ist egal , kannst du selber wählen was für ein Rückgabetyp deine Funktion haben soll.

 
Christian:

Void ...Int ...Bool  Whatever you want :-)


Ist egal , kannst du selber wählen was für ein Rückgabetyp deine Funktion haben soll.

danke Christian,

aber wie definiere ich jetzt die Expiration? lt. Beschreibung sollte das ja eine datetime Variable sein

 

Order_TIME ..... benutzt das überhaupt jemand ?


Das sind Optionen eigentlich für Trader.

Die nicht ständig am Pc sitzen und möchten das ihre Pending Order selber wieder gelöscht wird.

Im EA hat man doch selber die "Kontrolle" über die Positionen.

Ist jetzt keine Hilfe aber Gedanken ....hach die Weihnachtszeit ... :-)

Andere ?

 
Christian:

Order_TIME ..... benutzt das überhaupt jemand ?


Das sind Optionen eigentlich für Trader.

Die nicht ständig am Pc sitzen und möchten das ihre Pending Order selber wieder gelöscht wird.

Im EA hat man doch selber die "Kontrolle" über die Positionen.

Ist jetzt keine Hilfe aber Gedanken ....hach die Weihnachtszeit ... :-)

Andere ?

ja ich verwende das eigentlich, hauptsächlich da ich gerne Pending order eingebe die nach 2-3 Stunden gelöscht werden sollen, du weist ja, das mit der Arbeit die vom Traden abhält ;-)

muss aber auch dazu sagen, ich habe das einen EA gebastelt, wo ich die Trades mit OBJ_HLINE in den Chart zeichnen kann, da ich 99% der Order über VPS und Tablet eingebe

 

Du must dein MqlTradeRequest erweitern um die expiration als datetime siehe hier

https://www.mql5.com/en/docs/constants/structures/mqltraderequest

Documentation on MQL5: Constants, Enumerations and Structures / Data Structures / Trade Request Structure
Documentation on MQL5: Constants, Enumerations and Structures / Data Structures / Trade Request Structure
  • www.mql5.com
Interaction between the client terminal and a trade server for executing the order placing operation is performed by using trade requests. The trade request is represented by the special predefined structure of MqlTradeRequest type, which contain all the fields necessary to perform trade deals. The request processing result is represented by...
 
amando:

und vielleicht kann mir mal wer den Unterschied zwischen ORDER_TIME_DAY und ORDER_TIME_SPECIFIC_DAY verraten?


1. ...endet um 23:59

2. ...endet am "spezifierten" Tag um 23:59

 
Christian:

Du must dein MqlTradeRequest erweitern um die expiration als datetime siehe hier

https://www.mql5.com/en/docs/constants/structures/mqltraderequest

das hab ich ja drinnen in meiner Order Send,

die Frage ist halt, wie übergebe ich, das die Order um Mitternacht endet?

ich kann natürlich die Zeit selbst berechnen, aber wofür sind dann die super auswahlmöglichkeiten vorhanden?


@Carl Schreiber hast Du eine Idee?

 

He da ...! Carl zückt eh nur die Karte mit der F1 Taste drauf :-)


Die Frage hatte ich doch beantwortet.

ORDER_TIME_DAY endet immer um 23:59

Bei ORDER_TIME_SPECIFIC_DAY übergibts du den Tag mit einem daytime.

Und die endet dan an dem Tag um 23:59 .

Zumindet sehe ich das so.

 
Christian:

He da ...! Carl zückt eh nur die Karte mit der F1 Taste drauf :-)


Die Frage hatte ich doch beantwortet.

ORDER_TIME_DAY endet immer um 23:59

Bei ORDER_TIME_SPECIFIC_DAY übergibts du den Tag mit einem daytime.

Und die endet dan an dem Tag um 23:59 .

Zumindet sehe ich das so.

das ist mir schon klar Christian,

aber wenn ich den Wert der ENUM übergebe, dann steht da 0,1,2,3 drin

prinzipell setzte ich ja den Trade so ab

PendingOpen(_Symbol,ORDER_TYPE_BUY_LIMIT,Lots,price,SL_Neu,TP_Neu,MN,Text,PendingVaild);

Jetzt übergebe ich PendingVaild als Datetime

wenn ich jetzt die ENUM übergebe habe ich ja keine Datetime drin.

dann kommt als Ergebnis

und genau da ist dar Problem, ich habe nähmlich in der OnInit die Auswahl 

   switch(Pending_Type_Vaild) // Enumeration für Pending Hours Vaild einfügen.
     {
      case ORDER_TIME_GTC              : {PendingVaild = 0;break;}
      case ORDER_TIME_DAY              : {PendingVaild = 1;break;}
      case ORDER_TIME_SPECIFIED        :
        {
         PendingVaild=TimeCurrent()+Pending_Vaild_Hours*60*60;
         Print(TimeCurrent()+Pending_Vaild_Hours*60*60);
         break;
        }
      case ORDER_TIME_SPECIFIED_DAY     : {PendingVaild=3;break;}

     };

und wenn ich da dann eben die 0 übergebe kommt da auch 0 rein, was ja vor der Ordereröffnung ist und erzeugt die Fehlermeldung.

Früher war das intelligenter, da war die Expiration in Sekunden von der Jetztzeit zu sehen, nehme an in MT4 ist das heute noch so

 
amando:

das ist mir schon klar Christian,

aber wenn ich den Wert der ENUM übergebe, dann steht da 0,1,2,3 drin

prinzipell setzte ich ja den Trade so ab

Jetzt übergebe ich PendingVaild als Datetime

wenn ich jetzt die ENUM übergebe habe ich ja keine Datetime drin.

dann kommt als Ergebnis

und genau da ist dar Problem, ich habe nähmlich in der OnInit die Auswahl 

und wenn ich da dann eben die 0 übergebe kommt da auch 0 rein, was ja vor der Ordereröffnung ist und erzeugt die Fehlermeldung.

Früher war das intelligenter, da war die Expiration in Sekunden von der Jetztzeit zu sehen, nehme an in MT4 ist das heute noch so

So hier mal die Liste wie ich sie sehe:


das datetime übergibts du ja nur bei den 3. und 4. Enum der Order_time_typ

Sonst bleibt es leer

jetzt klar ?