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