Wie kann ich prüfen, ob eine Pending Order "aktiviert" wurde (MQL5)

 

Da ich, bisher nichts zum aktivierungscheck von PeningOrders in MQL5 finden konnte, frage ich hier:

Bisher habe ich in MQL4 dazufolgendes verwendet.

OrderCloseTime()==0

Da es hier aber speziell um eine Pending Order geht, bin ich unsicher ob folgendes funktionieren könnte.

OrderGetInteger(ORDER_TIME_SETUP)==0

( 2te Frage:Bzw wird eine Pending Order bei aktivierung in ORDER_TYPE_BUY / ORDER_TYPE_SELL umgewandelt?)

(3te Frage: Zeigt ORDER_STATE_FILLED an ob eine Pendingorder vollständig gesetzt oder auch "aktiviert" wurde?)


Danke euch für alle Antworten :)

 
Bayne:

Da ich, bisher nichts zum aktivierungscheck von PeningOrders in MQL5 finden konnte, frage ich hier:

Bisher habe ich in MQL4 dazufolgendes verwendet.

Da es hier aber speziell um eine Pending Order geht, bin ich unsicher ob folgendes funktionieren könnte.

( 2te Frage:Bzw wird eine Pending Order bei aktivierung in ORDER_TYPE_BUY / ORDER_TYPE_SELL umgewandelt?)

(3te Frage: Zeigt ORDER_STATE_FILLED an ob eine Pendingorder vollständig gesetzt oder auch "aktiviert" wurde?)


Danke euch für alle Antworten :)

Was meinstdu mit aktivierungscheck? 

Du bekommst ja einen retcode, den kannst du abfragen

retcode 10009= pending gesetzt 

 

amando:

Du bekommst ja einen retcode, den kannst du abfragen

retcode 10009= pending gesetzt 

retcode 10009 ????????????????????????

Ich würde es mit OnTradeTransaction() machen. F1 - da gibt es viel zu lesen und lernen.

 
void OrderDelete(const ulong ticket)
  {

   if(ticket>0)
     {
      MqlTradeRequest m_request={0};
      MqlTradeResult result;

      //--- setting request
      m_request.action    =TRADE_ACTION_REMOVE;
      m_request.order     =ticket;
      //--- action and return the result
      //return(OrderSend(m_request,result));
      if(!OrderSend(m_request,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);
     }
  }
Otto Pauser


:

retcode 10009 ????????????????????????

Ich würde es mit OnTradeTransaction() machen. F1 - da gibt es viel zu lesen und lernen.

Jede trade transaction gibt dir einen retcode zurück Otto. 

Steht dann auch im tab experten

https://www.mql5.com/de/docs/constants/errorswarnings/enum_trade_return_codes

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Kodes der Fehler und Warnungen / Rückgabecodes des Handelsservers
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Kodes der Fehler und Warnungen / Rückgabecodes des Handelsservers
  • www.mql5.com
beim Versuch, eine Position ganz oder teilweise zu schließen, wenn das Gesamtvolumen der vorhandenen Verkaufsorders und der zu platzierenden Order das aktuelle Volumen der Position übersteigt Die Anzahl offener Positionen, die man zur gleichen Zeit auf einem Konto haben kann, kann durch die Einstellungen des Servers beschränkt werden. Wenn ein...
 
Otto Pauser:

retcode 10009 ????????????????????????

Ich würde es mit OnTradeTransaction() machen. F1 - da gibt es viel zu lesen und lernen.

if (OnTradeTransaction(trans,request,result)

Wo bekomme ich

trans,request,result

her, wenn ich die order über

trade.BuyStop() 

eröffnet habe?



und für beide der von euch gennanten Optionen muss ich die Position auswählen,

soll ich sie als Position oder als Order auswählen?

(Mir wäre nur der Fall für eine Position bekannt)

if (OnTradeTransaction){
                        for(int i=PositionsTotal();i>0;i--;){ 
                        if(PositionGetSymbol(i)){Comment"Position"
                        if(CheckResultRetcode()==TRADE_RETCODE_DONE){...}
                        
 

So geht's sicher nicht! Du kannst das nicht mit if abfragen. Das ist eine Ereignisbehandlungsfunktion und wird automatisch vom System aufgerufen, wie zB OnTick() .

Setze den Cursor auf OnTradeTransaction drücke F1 und kopier dir das Beispiel aus der Reference und probier es aus. Einfach auf irgendeinen Chart ziehen.

Im EA musst du OnTradeTransaction(....) definieren. Siehe Beispiel.

void OnTradeTransaction(const MqlTradeTransaction &trans, 
                        const MqlTradeRequest &request, 
                        const MqlTradeResult &result) 
{ 
   // hier dein code
}

Dieses Ereignis wird an ALLE Charts gesendet!

Leute ihr müsst die Reference verwenden!!!!!!! Und am besten die englische Version. Die deutschen Überstzungen sind oft unverständlich.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Es geht aber viel einfacher:

bool posExists;

void OnTrade()
{
   posExists=PositionSelect(_Symbol);
}

Wurde die pending Order in eine Position umgewandelt, oder die bestehende Position vom TP oder SL 'gefressen',

ändert sich der Zustand von posExists.

 
Otto Pauser:

So geht's sicher nicht! Du kannst das nicht mit if abfragen. Das ist eine Ereignisbehandlungsfunktion und wird automatisch vom System aufgerufen, wie zB OnTick() .

Setze den Cursor auf OnTradeTransaction drücke F1 und kopier dir das Beispiel aus der Reference und probier es aus. Einfach auf irgendeinen Chart ziehen.

Im EA musst du OnTradeTransaction(....) definieren. Siehe Beispiel.

Dieses Ereignis wird an ALLE Charts gesendet!

Leute ihr müsst die Reference verwenden!!!!!!! Und am besten die englische Version. Die deutschen Überstzungen sind oft unverständlich.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Es geht aber viel einfacher:

Wurde die pending Order in eine Position umgewandelt, oder die bestehende Position vom TP oder SL 'gefressen',

ändert sich der Zustand von posExists.

Besten Dank :)
 

Das Ticket bekommst du dann (bei bestehender Position) mit:

long PosTicket=PositionGetInteger(POSITION_TICKET);

Wurde die Position per TP oder SL geschlossen erhältst du Information darüber so:

//+------------------------------------------------------------------+
//| Trading functions                                                |
//+------------------------------------------------------------------+

bool LastDealsInfo(string _symbol,
                   ulong &deal_ticket, 
                   ENUM_DEAL_TYPE &deal_type, 
                   long &deal_magic, 
                   double &deal_volume, 
                   double &deal_price, 
                   double &deal_profit, 
                   ENUM_DEAL_REASON &deal_reason,
                   int back=3600)
{
   datetime limit=TimeCurrent();
   datetime start=limit-back;                   // 3600=seconds of 1 hour, 86400=seconds of 1 day

   if(!HistorySelect(start,limit))              // select history
      return(false);                            // no history available

   uint     idx, 
            idxMax=HistoryDealsTotal()-1;
   //ulong    deal_ticket;
   string   deal_symbol;

   ENUM_DEAL_ENTRY  deal_entry;
   //ENUM_DEAL_REASON deal_reason;
   
   double   deal_commiss;
   double   deal_swap;
   double   deal_rawprof;

   for(idx=idxMax; idx>0; idx--)
      {
         deal_ticket = HistoryDealGetTicket(idx);                       // get ticket
         deal_symbol = HistoryDealGetString(deal_ticket,DEAL_SYMBOL);   // get symbol
         if(deal_symbol==_symbol)                                       // check symbol
            {
               deal_entry  = (ENUM_DEAL_ENTRY )HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);
               deal_reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(deal_ticket,DEAL_REASON);
               if(deal_entry==DEAL_ENTRY_OUT)                           // check entrytype
                //if(deal_reason==DEAL_REASON_SL)                       // check reason
                     {
                        deal_type    = (ENUM_DEAL_TYPE)HistoryDealGetInteger(deal_ticket,DEAL_TYPE);
                        deal_magic   =                 HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
                        deal_volume  =                 HistoryDealGetDouble (deal_ticket,DEAL_VOLUME);
                        deal_price   =                 HistoryDealGetDouble (deal_ticket,DEAL_PRICE);
                        deal_commiss =                 HistoryDealGetDouble (deal_ticket,DEAL_COMMISSION);
                        deal_swap    =                 HistoryDealGetDouble (deal_ticket,DEAL_SWAP);
                        deal_rawprof =                 HistoryDealGetDouble (deal_ticket,DEAL_PROFIT);

                        deal_profit  = deal_commiss+deal_swap+deal_rawprof;
                        return(true);
                     }
            }
      }
   return(false);
}

double LastDealsProfit(string _symbol, int back=3600)
{
   datetime limit=TimeCurrent();
   datetime start=limit-back;                   // 3600=seconds of 1 hour, 86400=seconds of 1 day

   if(!HistorySelect(start,limit))              // select history
      return(NULL);                             // no history available

   uint     idx, 
            idxMax=HistoryDealsTotal()-1;
   ulong    deal_ticket;
   string   deal_symbol;
   long     deal_entry;
   long     deal_reason;
   
   double   deal_commiss;
   double   deal_swap;
   double   deal_profit;
   double   deal_result;

   for(idx=idxMax; idx>0; idx--)
      {
         deal_ticket = HistoryDealGetTicket(idx);                       // get ticket
         deal_symbol = HistoryDealGetString(deal_ticket,DEAL_SYMBOL);   // get symbol
         if(deal_symbol==_symbol)                                       // check symbol
            {
               deal_entry  = (ENUM_DEAL_ENTRY )HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);
               deal_reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(deal_ticket,DEAL_REASON);
               if(deal_entry==DEAL_ENTRY_OUT)                           // check entrytype
                //if(deal_reason==DEAL_REASON_SL)                       // check reason
                     {
                        deal_commiss = HistoryDealGetDouble (deal_ticket,DEAL_COMMISSION);
                        deal_swap    = HistoryDealGetDouble (deal_ticket,DEAL_SWAP);
                        deal_profit  = HistoryDealGetDouble (deal_ticket,DEAL_PROFIT);
                        deal_result  = deal_commiss+deal_swap+deal_profit;
                        return(deal_result);
                     }
            }
      }
   return(NULL);
}

double LastDealsPrice(string _symbol, int back=3600)
{
   datetime limit=TimeCurrent();
   datetime start=limit-back;                   // 3600=seconds of 1 hour, 86400=seconds of 1 day

   if(!HistorySelect(start,limit))              // select history
      return(NULL);                             // no history available

   uint     idx, 
            idxMax=HistoryDealsTotal()-1;
   ulong    deal_ticket;
   string   deal_symbol;
   long     deal_entry;
   long     deal_reason;
   
   double   deal_price;

   for(idx=idxMax; idx>0; idx--)
      {
         deal_ticket = HistoryDealGetTicket(idx);                       // get ticket
         deal_symbol = HistoryDealGetString(deal_ticket,DEAL_SYMBOL);   // get symbol
         if(deal_symbol==_symbol)                                       // check symbol
            {
               deal_entry  = (ENUM_DEAL_ENTRY )HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);
               deal_reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(deal_ticket,DEAL_REASON);
               if(deal_entry==DEAL_ENTRY_OUT)                           // check entrytype
                //if(deal_reason==DEAL_REASON_SL)                       // check reason
                     {
                        deal_price   = HistoryDealGetDouble (deal_ticket,DEAL_PRICE);
                        return(deal_price);
                     }
            }
      }
   return(NULL);
}

Kleiner Auszug aus meiner Bibliothek ;)

Donations werden gerne entgegengenommen (siehe mein Profil)

 
Otto Pauser:
bool posExists;

void OnTrade()
{
   posExists=PositionSelect(_Symbol);
long PosTicket=PositionGetInteger(POSITION_TICKET);
}

100% sicher dass man so das Ticket der gerade Eröffneten Position bekommt

und nicht eines der anderen Positionen die bereits auf sind?
 
Bayne:

100% sicher dass man so das Ticket der gerade Eröffneten Position bekommt

und nicht eines der anderen Positionen die bereits auf sind?
Auf einem Netting-Account JA