PositionSelect

Einloggen oder registrieren, um einen Kommentar zu schreiben
hausmannjack
174
hausmannjack  

Hallo nochmal,

ich wollte fragen, wie man herausfinden kann, ob es keine offene pending order gibt. Denn wenn ich herausfinden will ob keine normale position gibt, gebe ich ein:

if(PositionSelect(_Symbol)==false)
{

}

 Durch diese abfrage weiß ich, dass wenn es keine offene position gibt, wird diese funktion ausgeführt.

Wie aber mache ich das selbe für pending orders, um herauszufinden ob es keine offenen pending orders gibt.

eine antwort würde mir sehr helfen. danke.

MfG 

Carl Schreiber
Moderator
9934
Carl Schreiber  
Damit geht geht das wohl nicht!

Nimm PositionsTotal() und 'dreh' durch alle offenen Positionen:

int o = PositionsTotal();
while(o-->0) {
   ...
}



Christian
3220
Christian  
hausmannjack:

Hallo nochmal,

ich wollte fragen, wie man herausfinden kann, ob es keine offene pending order gibt. Denn wenn ich herausfinden will ob keine normale position gibt, gebe ich ein:

if(PositionSelect(_Symbol)==false)
{

}

 Durch diese abfrage weiß ich, dass wenn es keine offene position gibt, wird diese funktion ausgeführt.

Wie aber mache ich das selbe für pending orders, um herauszufinden ob es keine offenen pending orders gibt.

eine antwort würde mir sehr helfen. danke.

MfG 

Du musst immer angeben für was du solche Fragen stellst ! MQL4 oder MQL5 .

Unter MQL4 wäre das ok. Auch das von Carl.

Aber unter MQL5 sieht es dann so aus :

   int PositionsInMarket = PositionsTotal(); // Positiones
   int OrdersInMarket    = OrdersTotal();   // Pending Orders
   int OrderAndPositions_Total = OrdersInMarket+PositionsInMarket ;
    

   if (OrderAndPositions_Total > 0) ActiveOrders = true;

 Unter MQL5 sind die Positionen und Orders getrennt abzufragen 

Carl Schreiber
Moderator
9934
Carl Schreiber  
Oh - das wusste ich nicht. Dass ein und dieselbe Funktion Verschiedenes liefert, (OrdersTotal()) hätte ich jetzt mal nicht gedacht!
hausmannjack
174
hausmannjack  

Vielen Dank für die Hilfe. Allerdings habe ich jetzt ein neues Problem und zwar wenn ich versuche in MQL5 das Ticket der pending order auszulesen. Denn diese Funktion funktioniert nicht.

if(OrdersTotal()==1)
   {
      long Ticket=OrderGetInteger(ORDER_TICKET);
   }


 

Christian
3220
Christian  
hausmannjack:

Vielen Dank für die Hilfe. Allerdings habe ich jetzt ein neues Problem und zwar wenn ich versuche in MQL5 das Ticket der pending order auszulesen. Denn diese Funktion funktioniert nicht.

if(OrdersTotal()==1)
   {
      long Ticket=OrderGetInteger(ORDER_TICKET);
   }


 

Du musst schon etwas mehr mehr SELBER tun ..... Wenn du bei Google "MQL5 Order Ticket" eingibts kommst du zu ->

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

Also bitte nicht jede Funktion im Forum erfragen !

Ein Forum dient der Problemlösung  . Du bist nur faul :-)

Dokumentation zu MQL5: Handelsfunktionen / OrderGetTicket
Dokumentation zu MQL5: Handelsfunktionen / OrderGetTicket
  • www.mql5.com
Handelsfunktionen / OrderGetTicket - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
Christian
3220
Christian  
Carl Schreiber:
Oh - das wusste ich nicht. Dass ein und dieselbe Funktion Verschiedenes liefert, (OrdersTotal()) hätte ich jetzt mal nicht gedacht!
Nicht schlimm Carl :-) .... ich lerne auch noch ständig und wohl für immer 
hausmannjack
174
hausmannjack  

Das habe ich auch bereits versucht:

if(OrdersTotal()==1)
   {
      ulong Ticket=OrderGetTicket(ORDER_TICKET);
   }


 Und sogar auch mit der Klasse 

CHistoryOrderInfo

Hat aber alles nicht geklappt.
Christian
3220
Christian  
hausmannjack:

Das habe ich auch bereits versucht:

if(OrdersTotal()==1)
   {
      ulong Ticket=OrderGetTicket(ORDER_TICKET);
   }


 Und sogar auch mit der Klasse 

CHistoryOrderInfo

Hat aber alles nicht geklappt.

Du hast dir weder diese Seite RICHTIG durchgelesen noch das angewendet was auf der Seite Steht.

Der Beispiel Code auf der Seite wird zu 99% richtig sein.

Erfindet das Rad nicht immer neu.

OrderGetTicket() erwartet ein INT als Paramter. Und zwar ist da die INDEX Nummer der Order zu übergeben.

Du übergibst anscheinend ein ENUM . Deswegen scheitert die Funktion.

Nimm den Code und probier den aus :

Lesen und verstehen musst du selber.

void OnStart()
  {
//--- Variablen für Erhaltung der Werte aus Ordereigenschaften  
   ulong    ticket;
   double   open_price;
   double   initial_volume;
   datetime time_setup;
   string   symbol;
   string   type;
   long     order_magic;
   long     positionID;
//--- Anzahl der laufenden Warteorder  
   uint     total=OrdersTotal();
//--- gehen wir im Zyklus durch alle Ordern  
   for(uint i=0;i<total;i++)
     {
      //--- erhalten wir Orderticket in Bezug auf seine Position in der Liste  
      if((ticket=OrderGetTicket(i))>0)
        {
         //--- erhlaten wir Ordereigenschaften  
         open_price    =OrderGetDouble(ORDER_PRICE_OPEN);
         time_setup    =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
         symbol        =OrderGetString(ORDER_SYMBOL);
         order_magic   =OrderGetInteger(ORDER_MAGIC);
         positionID    =OrderGetInteger(ORDER_POSITION_ID);
         initial_volume=OrderGetDouble(ORDER_VOLUME_INITIAL);
         type          =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
         //--- bereiten wir die Information über Order vor und geben sie aus  
         printf("#ticket %d %s %G %s at %G was set up at %s",
                ticket,                 // Orderticket
                type,                   // Typ
                initial_volume,         // das gestellte Volumen  
                symbol,                 // Symbol, für das gestellt ist  
                open_price,             // der angegebene Eroeffnungspreis  
                TimeToString(time_setup)// Zeit der Orderstellung  
                );
       ;}
    ;}
//---
;}


 Das ist ein Skript Code. 

Lass hören wenn du erfolg hast ....vorher nicht :-) 

  noch was .....nimm dir mal ein Wochende Zeit und suche bei Youtube nach c++ Tutorials und schaue dir mal eine Serie an. Dir fehlen Grundlagen. 

Da sind einige mit ca 30 oder mehr Episoden. Da lernst du am besten Grundlagen. Weil du nur faul zugucken must.

MQL5 basiert auf C++ ist aber nicht das gleiche. Aber wer das eine versteht kann auch das andere gut verstehen.

Den Tip gebe ich auch allen anderen die frisch anfangen.  

hausmannjack
174
hausmannjack  
Danke, der Code hat geklappt. :-)
Christian
3220
Christian  
hausmannjack:
Danke, der Code hat geklappt. :-)
Aber nicht vergessen Youtube Weekend ! 
Einloggen oder registrieren, um einen Kommentar zu schreiben