[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 188

 
Aber ich weiß nicht, wie ich die Pending Order löschen kann, wenn der Pentamino weniger als 30 Pips beträgt.
 
hoz:

Ja, na und?

Bei der Arbeit im Visualisierungsmodus gibt es eine Reihe von Einschränkungen
 

Was habe ich falsch gemacht!!!!

Ich habe folgende Lösung für mein Problem gefunden

int start()
  {
     double Price=Ask+300*Point;    
     double SL=Price-300*Point;    
     double TP=Price+150*Point;
     bool New_Bar;
                          
     if (Time[0])                                                                           //   если образовался новый бар               
         int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP ); //   выставить отложенный ордер
     return ;
     Fun_New_Bar();                                                                      
     if ( New_Bar==true)                                                // если образовался следующий бар
        OrderDelete(Ticket);                                          // удалить отложенный ордер
  
//+------------------------------------------------------------------+
     void  Fun_New_Bar();                            //НО ПО ОТНОШЕНИЮ К ЭТОЙ СТРОКЕ КОМПИЛЯТОР ПИШЕТ ОШИБКУ       '(' - function definition unexpected  
       {                                                                           
          static datetime New_Time=0;
          New_Bar=false;
                                
         if( New_Time!==Time[0])                       
            New_Time=Time[0];                         
         New_Bar=true;                             
      }

/* Entschuldigung, ich habe den Beitrag leicht verändert - damit das Vinin lesbar ist */

 
Vielen Dank für Ihr Interesse. Welche Taste muss ich drücken, um den Code in diesem Format zu erhalten?
 
solnce600:

Was habe ich falsch gemacht!!!!

Ich habe folgende Lösung für mein Problem gefunden

/* Entschuldigung, ich habe den Beitrag ein wenig geändert - um Vinin lesbar zu machen */

Diese Linie
 if (Time[0])

bedeutet: "wenn die Zeit des letzten Taktes nicht Null ist". Sie ist also immer ungleich Null.

Außerdem ist die Variable

bool New_Bar;

wird innerhalb der Funktion start() definiert, so dass sie in anderen Funktionen nicht sichtbar ist. Außerdem können Sie die Funktion Fun_New_Bar(), die Sie innerhalb des start()-Körpers zu definieren versucht haben, in MQL nicht verwenden, da alle Funktionen auf der globalen Modulebene deklariert werden müssen. Die Deklaration von New_Bar sollte ebenfalls dort platziert werden.

 

Außerdem können Sie während einer Ausführung der Funktion start() (wenn sie nicht in einer Schleife ausgeführt wird) nicht die Bildung eines Balkens festlegen und dann auf die Bildung des nächsten Balkens warten: start() wird per Definition bei jedem Tick aufgerufen und beendet (mit Nuancen, aber im Allgemeinen ist es so).

Ich empfehle, die Hilfe erneut zu lesen und Lücken in der MQL-Programmausführung zu beseitigen, und ein Beispiel für das Schreiben eines geschleiften Programms zu sehen, auch nicht geschleift.

 
solnce600:
Vielen Dank für Ihre Aufmerksamkeit. Welche Taste muss ich drücken, um den Code in diesem Format zu erhalten?

SRC----------------------------\|/

--------------------------------------- V

 
Er hat das Recht dazu.
 
alsu:
Diese Linie
 if (Time[0])

bedeutet: "wenn die Zeit des letzten Taktes ungleich Null ist". Sie ist also immer ungleich Null.


Danke, aber ich verstehe nicht, wo das "NOT" in dieser Zeile steht. Nicht gleich wird durch das Symbol !== angezeigt.

Was ich meinte, war, dass, sobald der Zeitpunkt der Eröffnung eines neuen Balkens erscheint, d.h. ein neuer Balken erscheint, der Auftrag eröffnet wird.

Und dies ist in der Tat der Code, der einen Auftrag bei der Eröffnung von jeweils fünf Takten eröffnet

 int start()

  {
 double Price=Open[0]+300*Point;	
 double SL=Price-300*Point;	
 double TP=Price+150*Point;
 if (Time[0])                         
 int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
  

 
 }


 

Ich entschied mich für den meiner Meinung nach einfacheren Weg.

Die Pending-Order nicht zu löschen - sondern eine Pending-Order nur zu platzieren, wenn eine Fünf-Minuten-Kerze noch nicht beendet ist

Das heißt, der schwebende Auftrag sollte nur erteilt werden, wenn zwei Bedingungen erfüllt sind. Wenn die erste Bedingung erfüllt ist

 if (Time[0])

- Ich habe es überprüft, die Reihenfolge ist festgelegt.

Wie soll ich die zweite Bedingung setzen, d.h. eine Pending Order nur dann setzen, wenn noch keine 5 Minuten vergangen sind. if (---------- && ?????????)

int start()

  {
 double Price=Open[0]+300*Point;    
 double SL=Price-300*Point;     
 double TP=Price+150*Point;
 
  
 
 
                          
   if (Time[0]&& ?????????  )                         
 int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
 return(0);
 
  }