pending orders tps addieren

Einloggen oder registrieren, um einen Kommentar zu schreiben
aercrist
84
aercrist  
Hallo ich hätte da eine kurze Frage - wie kann bei mehreren offenen pending orders (mql5) die gesetzten TP addieren und zB durch deren Anzahl dividieren (Mittelwert eruieren?) Danke
Otto Pauser
904
Otto Pauser  
aercrist:
Hallo ich hätte da eine kurze Frage - wie kann bei mehreren offenen pending orders (mql5) die gesetzten TP addieren und zB durch deren Anzahl dividieren (Mittelwert eruieren?) Danke

Da musst du die History durchsuchen.

Verwendest du den MT5 im Hedgingmode? Oder sind die Orders von unterschiedlichen Instrumenten (Charts)?

Man unterscheidet ja beim MT5 Orders, Deals und Positions.

Du benötigst die Funktionen: HistorySelect(...), HistoryOrdersTotal(), HistoryOrderGetTicket(...), usw.

Es gibt viele Beispiele, auch auf YT.

aercrist
84
aercrist  
Otto Pauser:

Da musst du die History durchsuchen.

Verwendest du den MT5 im Hedgingmode? Oder sind die Orders von unterschiedlichen Instrumenten (Charts)?

Man unterscheidet ja beim MT5 Orders, Deals und Positions.

Du benötigst die Funktionen: HistorySelect(...), HistoryOrdersTotal(), HistoryOrderGetTicket(...), usw.

Es gibt viele Beispiele, auch auf YT.

nein - kein hedgingmode und auch keine unterschiedlichen charts.
ich würde mich da gerne auf die deals konzentrieren - wie kann ich bei der history nur die noch offenen deals herausfinden?
was ist YT? 

Carl Schreiber
Moderator
7069
Carl Schreiber  

Das gilt für offenen Positionen:

    uint o = PositionsTotal(); // keine Pending-Orders
    while(o-->0) {
      if(   PositionGetTicket(o) <= 0
         || PositionGetSymbol(o) != _Symbol
         || PositionGetInteger(POSITION_MAGIC) != MagicNumber
      )  continue;
      ...

und wenn Du jetzt alle Position... durch Order ersetzt kriegst Du alle Pening-Orders:

    uint o = OrdersTotal(); // keine Pending-Orders
    while(o-->0) {
      if(   OrderGetTicket(o) <= 0
         || OrderGetString(ORDER_SYMBOL) != _Symbol
         || OrderGetInteger(ORDER_MAGIC) != MagicNumber
      )  continue;
      ...
      
Otto Pauser
904
Otto Pauser  
aercrist:

nein - kein hedgingmode und auch keine unterschiedlichen charts.
ich würde mich da gerne auf die deals konzentrieren - wie kann ich bei der history nur die noch offenen deals herausfinden?
was ist YT? 

Ich glaube du verwechselst Deals mit Orders.

Es können nur Orders offen sein. Ein Deal ist quasi der vorgang bei dem eine Order in eine Position übergeht.

Also Ausführung oder Teilausführung.

aercrist
84
aercrist  
Otto Pauser:

Ich glaube du verwechselst Deals mit Orders.

Es können nur Orders offen sein. Ein Deal ist quasi der vorgang bei dem eine Order in eine Position übergeht.

Also Ausführung oder Teilausführung.

ah ok danke - du hast recht.
eine letzte Frage noch - wie kann ich zB den TP - Mittelwert von allen offenen Orders berechnen?

Otto Pauser
904
Otto Pauser  

So, jetzt habe ich mir das zu Gemüte geführt. Das Ganze funktioniert in etwa so:

#define TYPE ENUM_ORDER_TYPE                       // abbreviations
#define DATE datetime

#property script_show_inputs

input uint inp_Lookback = 3;                       // Days to lookback in history

void OnStart() 
{ 
   datetime to   = TimeCurrent();                  // now
   datetime from = to-(86400*inp_Lookback);        // calculate startime

   HistorySelect(from,to);                         // request history 

   ulong    ticket;
   double   Order_price; 
   double   Order_volume; 
   string   symbol; 
   TYPE     type; 
   double   Order_TP;

   uint     total=HistoryOrdersTotal();            // number of current pending orders 

   for(uint i=0;i<total;i++)                       // iterate through orders
     { 
      if((ticket=HistoryOrderGetTicket(i))>0)      // return order ticket by its position in the list 
        {                                          // check the type
         symbol      =      HistoryOrderGetString (ticket,ORDER_SYMBOL); 
         type        =(TYPE)HistoryOrderGetInteger(ticket,ORDER_TYPE);
         Order_price =      HistoryOrderGetDouble (ticket,ORDER_PRICE_OPEN); 
         Order_volume=      HistoryOrderGetDouble (ticket,ORDER_VOLUME_INITIAL); 
         Order_TP    =      HistoryOrderGetDouble (ticket,ORDER_TP);
         switch(type)
           {
            case (ORDER_TYPE_BUY_STOP):
               DoPrint(type,Order_price,Order_volume,Order_TP);
               // 
               break;
            case (ORDER_TYPE_SELL_STOP): 
               DoPrint(type,Order_price,Order_volume,Order_TP);
               //
              break;
           }
        } 
     } 
} 

void DoPrint(TYPE aType,double aPrice, double aVolume, double aTP)
{
   Print(TypeToString(aType),
      " | price:",DoubleToString(aPrice,_Digits),
       " volume:",DoubleToString(aVolume,2),
           " TP:",DoubleToString(aTP,_Digits));
}

//+------------------------------------------------------------------+ 
//| Returns the string name of the order type                        | 
//+------------------------------------------------------------------+ 
string TypeToString(TYPE aType) 
{
    switch(aType) 
     { 
      case (ORDER_TYPE_BUY):            return("buy"); 
      case (ORDER_TYPE_SELL):           return("sell"); 
      case (ORDER_TYPE_BUY_LIMIT):      return("buy limit"); 
      case (ORDER_TYPE_SELL_LIMIT):     return("sell limit"); 
      case (ORDER_TYPE_BUY_STOP):       return("buy stop"); 
      case (ORDER_TYPE_SELL_STOP):      return("sell stop"); 
      case (ORDER_TYPE_BUY_STOP_LIMIT): return("buy stop limit"); 
      case (ORDER_TYPE_SELL_STOP_LIMIT):return("sell stop limit"); 
     } 
   return("unknown type"); 
}

Stell den Cursor auf HistoryOrdersTotal() und drück F1. Dort ist der Code her. Hier ist er entsprechend modifiziert.

LG

Einloggen oder registrieren, um einen Kommentar zu schreiben