Ctrade

 

Hallo an die Experten


Wäre immer davon ausgegangen das ich bei MQLTradeResult auch die Order Nummer rausbekomme

      if(tick.ask<_priceBuy)
        {
         if(_trade.BuyStop(Lots,_priceBuy,_Symbol,SL_Neu,TP_Neu,ORDER_TIME_GTC,0,"BuyTrendLine "+_Symbol))
            Print(_trade.ResultOrder());
        }


ich bekomme immer 0 raus bei der Order Nummer, interessanterweise funktionieren die restlichen Result

so abwägig wäre der Gedankte auch nicht wenn ich in die Doku sehe


und wenn ich in die Ctrade #include reinsehe auch nicht

bool CTrade::OrderOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,const double limit_price,
                       const double price,const double sl,const double tp,
                       ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const string comment)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- check filling
   if(!FillingCheck(symbol))  
      return(false);    
//--- check order type
   if(order_type==ORDER_TYPE_BUY || order_type==ORDER_TYPE_SELL)
     {
      m_result.retcode=TRADE_RETCODE_INVALID;
      m_result.comment="Invalid order type";
      return(false);
     }
//--- check order expiration
   if(type_time==ORDER_TIME_GTC && expiration==0)
     {
      int exp=(int)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_MODE);
      if((exp&SYMBOL_EXPIRATION_GTC)!=SYMBOL_EXPIRATION_GTC)
        {
         //--- if you place order for an unlimited time and if placing of such orders is prohibited
         //--- try to place order with expiration at the end of the day
         if((exp&SYMBOL_EXPIRATION_DAY)!=SYMBOL_EXPIRATION_DAY)
           {
            //--- if even this is not possible - error
            Print(__FUNCTION__,": Error: Unable to place order without explicitly specified expiration time");
            m_result.retcode=TRADE_RETCODE_INVALID_EXPIRATION;
            m_result.comment="Invalid expiration type";
            return(false);
           }
         type_time=ORDER_TIME_DAY;
        }
     }
//--- setting request
   m_request.action      =TRADE_ACTION_PENDING;
   m_request.symbol      =symbol;
   m_request.magic       =m_magic;
   m_request.volume      =volume;
   m_request.type        =order_type;
   m_request.stoplimit   =limit_price;
   m_request.price       =price;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- check order type
   if(!OrderTypeCheck(symbol))
      return(false);
//--- check filling
   if(!FillingCheck(symbol))
     {
      m_result.retcode=TRADE_RETCODE_INVALID_FILL;
      Print(__FUNCTION__+": Invalid filling type");
      return(false);
     }
//--- check expiration
   if(!ExpirationCheck(symbol))
     {
      m_result.retcode=TRADE_RETCODE_INVALID_EXPIRATION;
      Print(__FUNCTION__+": Invalid expiration type");
      return(false);
     }
   m_request.comment=comment;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }


hab ich da einen Denkfehler order einen gravierenden Fehler? (Hab bisher nach einem Trade setzen die Order Nummer nie abgefragt ;-)

Update: auch den ResultPrice bekomme ich nicht raus

danke

 

Du solltest Dich schon an die verwendeten Fachbegriffe halte: Order Nummer gibt es nicht, es gibt neben der Magicnummer die Ticketnummern siehe dazu hier:

https://www.mql5.com/de/docs/constants/tradingconstants/orderproperties#enum_order_property_integer

Welche von denen meinst Du denn jetzt?

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Handelskonstanten / Ordereigenschaften
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Handelskonstanten / Ordereigenschaften
  • www.mql5.com
Befehlsanweisungen, Handelsoperationen durchzuführen, werden als Order formalisiert. Jede Order hat eine Menge der Eigenschaften für Lesen, die Information über die kann durch die Funktionen Identifikator der Position, den Order nach seine Durchführung erhält. Jede durchgeführte Order erzeugt einen Deal, das eine neue Position eroeffnet...
 
Carl Schreiber:

Du solltest Dich schon an die verwendeten Fachbegriffe halte: Order Nummer gibt es nicht, es gibt neben der Magicnummer die Ticketnummern siehe dazu hier:

https://www.mql5.com/de/docs/constants/tradingconstants/orderproperties#enum_order_property_integer

Welche von denen meinst Du denn jetzt?

Ja Carl, alles schön und gut, aber ich verwende die Cclass von Metatrade, es funktioniert ja nicht mit dem MQL Result, ich hab das genauso wies in der Doku steht.

das heist wirklich so in MQLTradeResult

https://www.mql5.com/de/docs/constants/structures/mqltraderesult

ich kann da mal echt nix dafür, ich will ja nicht eine order abfrage, ich will gleich das Ergebnis aus dem Result verwenden, was immer kommt sobald eine Order / Position gesetzt ist

Ich bekomme ja auch den Retcode dort raus

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Datenstrukturen / Struktur des Ergebnisses der Handelsanfoderung
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Datenstrukturen / Struktur des Ergebnisses der Handelsanfoderung
  • www.mql5.com
Als Antwort auf Handelsanforderung, gibt das Handelsserver Daten über Bearbeitungsergebnis der Handelsanforderung als eine vorbestimmte Sonderstruktur  MqlTradeResult zurück. Der Code des Fehlers, den ein externes Handelssystem zurückgegeben hat. Das Hinzufügen und die Typen dieser Fehler hängen mit dem Broker und dem externen...
 
Ich versteh immer noch nicht, was Du suchst wofür!
 
Carl Schreiber:
Ich versteh immer noch nicht, was Du suchst wofür!

Es gibt den MqlTradeRequest, mit dem sedest du die order

als Ergebnis bekommst du das MqlTradeResult.


im Trade Result hast du, lt. beschreibung die Info der order oder des deals drin. Nur ist das problem, das ich das ergebnis der order, wie z.b die order ticket nummer nicht zurück bekomme.


Das das trade Result gar nicht geht würde ich auch nicht sagen, da der Retcode ja auch über das Trade Result übertragen wird

 

Was meinst Du mit order?

Den Auftrag den Du abgeschickt hast, eine Pending-Order, der die Deals, die entstanden sind, die Position(en) die im Konto erscheinen?

 
Carl Schreiber:

Was meinst Du mit order?

Den Auftrag den Du abgeschickt hast, eine Pending-Order, der die Deals, die entstanden sind, die Position(en) die im Konto erscheinen?

Ja, soweit so klar Carl,

aber im MQlTradeResult sollten die Details zur Pending Order abgefragt werden können

siehe gelbe makierung


Hier noch die doku wie das funktionieren soll

https://www.mql5.com/de/docs/trading/ordersend

 

Also dann sucht Du die Ticketnummer, die Dein Auftrag erhalten hat - und was ist da jetzt das Problem?

Die Ticketnummer ist, bei einem Erfolg von OrderSen() in der Feldvariable order von m_result enthalten.

 
Carl Schreiber:

Also dann sucht Du die Ticketnummer, die Dein Auftrag erhalten hat - und was ist da jetzt das Problem?

Die Ticketnummer ist, bei einem Erfolg von OrderSen() in der Feldvariable order von m_result enthalten.

Ja genau die bekomme ich nicht zurück, das ist mein problem, da steht immer 0 drin

daher die frage, ist mein code falsch?

 
amando:

Ja genau die bekomme ich nicht zurück, das ist mein problem, da steht immer 0 drin

daher die frage, ist mein code falsch?

??

Ganz unten in Deinem obersten Code steht:

//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

Erst danach steht die Ticketnummer fest bzw. wird vom Server generiert.

 
Carl Schreiber:

??

Ganz unten in Deinem obersten Code steht:

Erst danach steht die Ticketnummer fest bzw. wird vom Server generiert.

Eben nicht, genau das passiert nämlich nicht, ich bekomme nur den retcode, alle anderen werte sind 0

Probiers mal aus mit der CTrade funktion