ORDER_POSITION_ID

 

Hallo,


versteh ich das richtig, eine Order bekommt wenn ein Deal ausgelöst wird, und die Order daher eine Position ist rückwirkend eine Order ID?


danke

amando

 

Ist doch ganz einfach!

OrderSend() hat zwei Variablen:

bool  OrderSend(
   MqlTradeRequest&  request,      // query structure
   MqlTradeResult&   result        // structure of the answer
   );

request ist der Auftrag ('noch') ohne ID, und result die Antwort des Servers, jetzt mit ID.

Diese ID gibt das Terminal anscheinen Deinem Auftrag an den Broker gegeben hat:


request_id

Identifikator der Anforderung, der vom Terminal beim Senden eingesetzt wird

 
Carl Schreiber:

Ist doch ganz einfach!

OrderSend() hat zwei Variablen:

request ist der Auftrag ('noch') ohne ID, und result die Antwort des Servers, jetzt mit ID.

Diese ID gibt das Terminal anscheinen Deinem Auftrag an den Broker gegeben hat:


request_id

Identifikator der Anforderung, der vom Terminal beim Senden eingesetzt wird

Glaub ich habe mich da falsch ausgedrückt 


wenn ich eine pending order setze hat die noch keine id, die kommt erst rein wen daraus eine position wird oder?

 

Deswegen wird in MQL5 unterschieden zwischen Auftrag, Deals, und Position (wahrscheinlich) alle mit eigenen ID, wegen der Nachvollziehbarkeit.

Mehr steht dazu unter (F1 => Suchen: "Struktur der Handelstransaktion (MqlTradeTransaction)"

 
Carl Schreiber:

Deswegen wird in MQL5 unterschieden zwischen Auftrag, Deals, und Position (wahrscheinlich) alle mit eigenen ID, wegen der Nachvollziehbarkeit.

Mehr steht dazu unter (F1 => Suchen: "Struktur der Handelstransaktion (MqlTradeTransaction)"

Ich hab das bei einer bestehnden pending order probiert, da bekomme ich immer 0 raus

 

Also ich hab mal eine Sell-Limit-Order platztierrt und gelöscht und ich sehe die IDs (nach #):

2018.11.20 16:47:05.061 Trades  '12849600': order #324267312 sell limit 0.01 / 0.01 EURUSD at market done in 37.387 ms
2018.11.20 16:51:56.975 Trades  '12849600': cancel order #324267312 sell limit 0.01 EURUSD at 1.38140 sl: 1.39860 tp: 1.38000
2018.11.20 16:51:57.125 Trades  '12849600': accepted cancel order #324267312 sell limit 0.01 EURUSD at 1.38140 sl: 1.39860 tp: 1.38000
2018.11.20 16:51:57.159 Trades  '12849600': cancel #324267312 sell limit 0.01 EURUSD at 1.38140 done in 183.563 ms

Zufrieden?

 
Carl Schreiber:

Also ich hab mal eine Sell-Limit-Order platztierrt und gelöscht und ich sehe die IDs (nach #):

Zufrieden?

Ist das nicht die ticketnummer?

 

also ich verwende diesen Code


 ulong ticket;
   int total=OrdersTotal(); // Anzahl platzierter Pending Orders 
//--- in allen platzierten Pending Orders suchen
   for(int i=total-1; i>=0; i--)
     {
      if((ticket=OrderGetTicket(i))>0)
        {
         ulong  order_ticket=OrderGetTicket(i);                   // das Ticket der Order
         string order_symbol=OrderGetString(ORDER_SYMBOL);
         ulong  ordertype=OrderGetInteger(ORDER_TYPE); // MagicNumber der Position
         ulong  id =OrderGetInteger(ORDER_POSITION_ID);
         //--- wenn die MagicNumber übereinstimmt
         if(order_symbol==_Symbol )
           {
            Print(11111111111111111);
            Print(id  );
            Print(order_symbol);
           }
        }
     }


als Ergebnis bekomme ich


 

Bei einer Order kann es noch keine POSITION_ID geben. Gibt ja auch noch keinen Deal und somit auch keine Position.

Ist doch logisch, Oder?

 
Otto Pauser:
Bei einer Order kann es noch keine POSITION_ID geben. Gibt ja auch noch keinen Deal und somit auch keine Position.

Danke Otto, ich habs jetzt auch verstanden.


Hab mir mal was gebastelt wo ich in die alten orders reinsehen kann

double LastOrder(const string symbol,const int magicnumber)
  {
// --- determine the time intervals of the required trading history
   datetime end=TimeCurrent();                 // current server time
   datetime start=end-PeriodSeconds(PERIOD_H1)*Hours_Order_loockback;// set the beginning time to 24 hours ago

//--- request in the cache of the program the needed interval of the trading history
   HistorySelect(start,end);
//--- obtain the number of deals in the history
   int orders=HistoryOrdersTotal();

   if(orders>0)
     {
      for(int i=orders-1;i<orders;i++)
        {
         //--- obtain the ticket of the deals by its index in the list
         ulong order_ticket=HistoryOrderGetTicket(i);
         if(order_ticket>0) // obtain into the cache the deal, and work with it
           {
            string order_symbol        =HistoryOrderGetString(order_ticket,ORDER_SYMBOL);
            long order_magic           =HistoryOrderGetInteger(order_ticket,ORDER_MAGIC);
            ulong order_ident          =HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID);

            //--- process the deals with the indicated DEAL_MAGIC
            if(order_magic==magicnumber && order_symbol==symbol)
              {
               Print("Order_Ident ",order_ident);
              }

           }
         else // unsuccessful attempt to obtain a deal
           {
            PrintFormat("We couldn't select a order, with the index %d. Error %d",
                        i,GetLastError());
            Print("Last Deal Direction");
           }
        }
     }
   return(orders);
  }

das funktioniert soweit, ich bekomme auch die Position ID raus.

die tragt sich dort bei Eröffnung der Position ein 


bissi missverständlich erklärt in der Anleitung.

Dort könnte man annehmen, das es sich um eine eigenständige Identifikation handelt.

Grund der Beschwerde: