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 MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   Setzen und löschen von Pendingorders (http://www.expert-advisor.com/forum/showthread.php?t=7315)

Hippi 18.03.23 12:14

Setzen und löschen von Pendingorders
 
Hallo zusammen!

Ich möchte zu einer bestimmten Zeit ein Schleifendurchlauf starten. Was auch funktioniert.
Dann weise ich der ersten While-Schleife (Zeile18) an das sie 240 mal durchlaufen werden soll.
Danach wird die Variable „_time_waiting“ (Zeile19) auf „TimeCurrent() + 10 Sekunden“ gesetzt.
In Zeile 20 folgt nun die zweite While-Schleife und setzt die beiden PendingOrders.
Nach 10 Sekunden werden die PendingOrders gelöscht (Zeilen 26,27,28).
In Zeile 31 wird die erste While-Schleife um 1 weiter gezählt.

Das Problem:
Wenn die PendingOrders gesetzt wurden bleiben sie für 10 Sekunden stehen. Danach werden sie nicht gelöscht sondern es kommt nur ein kurzes blinken (an/aus). Und dann werden die PendingOrders wieder an die gleiche Stelle gesetzt wo sie vorher waren mit den gleichen Preisen. Obwohl sich der Chart verändert hat. Das heißt, die PendingOrders gehen mit dem Chart nicht mit.

Kann es sein, dass der EA durch die While-Schleifen blockiert wird?
Wenn ja, wie müsste man den Code ändern?

Ich wäre wirklich für jede Hilfe dankbar.


MfG Hippi


Code:

#property strict   
    #include <Trade\Trade.mqh>
    CTrade trade;
     
     
    double kontrakt = 0.01;
    int anfang = 1;
    int ende = 240;
    datetime _time_waiting = 0;
   
    void OnTick(void){
   
   
    datetime Istzeit = TimeCurrent();
    string Std_Min_Sek = TimeToString(Istzeit,TIME_SECONDS);
   
    if(Std_Min_Sek == "19:45:15"){
    while (anfang < ende){  //1. while-Schleif
    _time_waiting = TimeCurrent() + 10;
    while ( TimeCurrent() < _time_waiting ){  //2. while-Schleife   
    if(OrdersTotal() == 0)
    trade.BuyStop(kontrakt,Ask+3500*_Point,_Symbol,0,0,ORDER_TIME_GTC,0,"Automatisch");
    if(OrdersTotal() == 1)
    trade.SellStop(kontrakt,Bid-3500*_Point,_Symbol,0,0,ORDER_TIME_GTC,0,"Automatisch");}
   
    for(int i= OrdersTotal()-1; i >= 0; i--){
    ulong ticket = OrderGetTicket(i);
    trade.OrderDelete(ticket);}     
   
    Comment(Std_Min_Sek, "\n \n", anfang);
    anfang = anfang + 1;}}
   
    }//End OnTick



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 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