Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   while Schleife für Sparsamkeit? (http://www.expert-advisor.com/forum/showthread.php?t=4476)

Raul0 20.09.15 09:41

while Schleife für Sparsamkeit?
 
Moin Moin,

einen Unterstützung für das manuelle Handeln.

Sehe ich das richtig, dass der EA solange in der while bleibt, bis eine Order vorhanden ist?
Das ist ein Teil in einer Funktion.

PHP-Code:

   bool Go false;

   while( 
Go == false ) {

      if( 
OrdersTotal() > ) {
         
Go true
         return(
true);
      }
   } 

Mir gehts vorrangig den EA so sparsam wie möglich laufen zu lassen.
Sprich er muss nicht ständig den ganzen Code durchlaufen, wenn er auf eine Order wartet.

Gruss, Raul

traderdoc 20.09.15 16:26

while-Schleifen sind immer mit Vorsicht zu benutzen, da es schnell passieren kann, dass der EA drin versackt.
Den u.g. Code würde ich erst einmal wie folgt schreiben:
Code:

bool Go = false;
while(!Go) {
  if(OrdersTotal() > 0) break;
}

Ob der Code einen Nutzen hat, hängt vom Rest ab. Fakt ist, dass der Rest nicht! durchlaufen wird, solange nicht eine MarketOrder geöffnet bzw. PendingOrder gesetzt wurde. Ich halte aber nichts von solchen "Endlosschleifen".
Und ohne das der EA in der Schleife hängt, würde ich diese Abfrage in eine separate Funktion packen oder noch besser direkt am Anfang in den Code einfügen, also:
Code:

void OnTick() {
...
 if(OrdersTotal() == 0) return;
...
}

//oder mit unnötigem Einsprung:

void OnTick() {
...
 if (!CheckOrders()) return;
...
}

bool CheckOrders() {
  bool Go = false;
  while(!Go) {
      if(OrdersTotal() > 0) return(true);
  }
  return(false); //ist eigentlich überflüssig, aber ohne würde ein Warnhinweis kommen
}

traderdoc

Raul0 21.09.15 00:20

Das ich den Befehl: Go = true; in der Schleife setze, ist vermutlich überflüssig. Mit break, oder return(true) ist die Schleife auch erlöst.

Jedoch stürzte der MT4 ab, den Grund fand ich dann schnell. Da ich Buy und Sell Abfrage in der Ordercheck-Funktion habe, entsteht HickHack.

Ich werde kommende Woche den Code nochmal ändern in zwei Abschnitte.
Erstmal gut für heute, vielen Dank für die Rückinfo.


PHP-Code:

   //OPEN Order
   
if( orders //Anzahl der Orders einhalten
   
{
      if( 
Ordercheck(OP_BUY) )
      {
         if( 
TakeProfit tp =  Ask TakeProfit Point;
         if( 
StopLoss )   sl Ask StopLoss Point;
         
openOrder(BaseLot,OP_BUYsltp,"Start");
      }
      
      if( 
Ordercheck(OP_SELL) )
      {
         if( 
TakeProfit tp =  Bid TakeProfit Point;
         if( 
StopLoss )   sl Bid StopLoss Point;
         
openOrder(BaseLot,OP_SELLsltp,"Start");
      }            
   } 



Alle Zeitangaben in WEZ +2. Es ist jetzt 02:56 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum