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 |
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)"
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?
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?
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.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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