Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 212

 
Aleksei Stepanenko:

Noch besser ist es, eine Struktur zu schaffen

Vergessen Sie nicht, die Elemente auf Null zu setzen, bevor Sie sie verwenden.

und dann bei Bedarf die Anzahl erhöhen

dann vergleichen

Sie haben nun bei jeder neuen Ker ze eine Schleife um die vorherigen 10 Kerzen gemacht. Das ist nicht rational. Sie sollten immer unnötige Zyklen vermeiden, indem Sie sich die Ergebnisse der Berechnungen der vorherigen Werte merken. In Ihrem Fall, wenn eine neue Kerze eintrifft, erhöhen Sie einfach den Zählerstand, wenn die Bedingung erfüllt ist, und wenn die Bedingung nicht erfüllt ist, ziehen Sie den Zählerstand ab, und prüfen Sie, ob es keinen Überschuss gibt. Ihr Zyklus für 10 Elemente wird nicht benötigt, nur der Hauptzyklus.

Aleksei, ich habe es versucht, aber es funktioniert immer noch nicht richtig:

zählt nicht mit. up

 for(int i=1;i<=10;i++)              
     {    
     count.up=0;
     count.dn=0;
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     count.up++;
     }
    else
    {
    count.dn++;
    }
    }
    
    
    if (count.up>=8)
    {
    Comment("dsdsD");
    }
 

Sie müssen aus der Schleife entfernen

count.up=0;
count.dn=0;

denn bei jeder Iteration werden die vorherigen Werte auf Null gesetzt. Schreiben Sie es vor die Schleife.

 
Aleksei Stepanenko:

Sie müssen aus der Schleife entfernen

denn bei jeder Iteration werden die vorherigen Werte auf Null gesetzt. Schreiben Sie es vor die Schleife

Vielen Dank, jetzt funktioniert es!

Aber es ist seltsam, ich habe dasselbe ohne die Struktur gemacht, aber mit normalen Werten wie

  for(int i=1;i<=10;i++)              
     {    
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     J=J+1;
    else
    {
    J=0;
    }
    }
    
    
    if (J>=8)
    {
    Comment("dfdf");

und es würde bei jedem Ticken ein Plus geben))

 

Die Struktur wird auch ticken. Um nur zu Beginn einer neuen Kerze zu arbeiten, muss die Zeit dieser Kerze verfolgt werden

datetime LastTime;

if(LastTime!=Time[0])
   {
   LastTime=Time[0];
   //Здесь ваш код
   }
 
Können Sie mich bitte beraten. Ich habe benutzerdefinierte Funktionen in separaten Dateien .mqh vorgeschrieben sie durch #include, rufe ich sie in den Start von Sequenz, wenn der Start geht zu einer Funktion, dann je nach den Aktionen das Programm braucht, um eine andere Datei zugreifen .mqh (zum Beispiel, um den Wert des Auftragsvolumens zu erhalten) und dies nicht geschehen. Wenn ich alles in ein Blatt schreibe, funktioniert es, oder wenn ich die Formel zur Berechnung des Loses direkt in die Auftragseröffnungsparameter schreibe. Ich habe mir die MQL4-Lektionen angesehen und die Programmdokumentation gelesen, aber ich habe nichts gefunden. Ich verstehe nicht wirklich, warum eine .mqh-Funktion nicht mit einer anderen .mqh-Funktion innerhalb von Berechnungen interagieren kann. Oder sollten wir das Programm zum Start zurückkehren lassen, wenn wir mit einer solchen Notwendigkeit konfrontiert sind - es würde das Ergebnis zum Start zurückgeben und dann mit dieser Berechnung zurück zur Funktion gehen, die einen .mqh-Auftrag öffnet? Das ist doch Blödsinn... Oder sollten wir vielleicht alle vorhandenen Funktionen irgendwie anders deklarieren, damit sie zusammenwirken? Danke
 
Guten Tag!
Wie kann ich am einfachsten die Jahreszahl (2020) und die Minuten in der Zeile loswerden? TimeToStr hat noch keine anderen Ausgabeformate?
TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
 
Nauris Zukas:
Guten Tag!
Wie kann ich am einfachsten die Jahreszahl (2020) und die Minuten in der Zeile loswerden? TimeToStr hat noch keine anderen Ausgabeformate?
tm=(string)Hour();
 
Vitaly Muzichenko:

Ich danke Ihnen!

 
Denis Diakonov:
Können Sie mir einen Tipp geben? Ich habe benutzerdefinierte Funktionen in separaten .mqh-Dateien und habe sie durch #include geschrieben. Ich rufe sie beim Start auf und wenn der Start zu einer Funktion geht, muss das Programm eine andere .mqh-Datei aufrufen (zum Beispiel, um einen Wert des Auftragsvolumens zu erhalten) und das passiert nicht. Wenn ich alles in ein Blatt schreibe, funktioniert es, oder wenn ich die Formel zur Berechnung des Loses direkt in die Auftragseröffnungsparameter schreibe. Ich habe mir die MQL4-Lektionen angesehen und die Programmdokumentation gelesen, aber ich habe nichts gefunden. Ich verstehe nicht wirklich, warum eine .mqh-Funktion nicht mit einer anderen .mqh-Funktion innerhalb von Berechnungen interagieren kann. Oder sollten wir das Programm zum Start zurückkehren lassen, wenn wir eine solche Notwendigkeit konfrontiert - es würde das Ergebnis zum Start zurückgeben und dann mit dieser Berechnung beginnen würde zurück zur Funktion gehen, die einen .mqh Auftrag öffnet? Das ist doch alles Quatsch... Oder sollten wir vielleicht alle vorhandenen Funktionen irgendwie anders deklarieren, damit sie zusammenwirken? Danke

Verweisen Sie von Funktionen aus auf Funktionen, nicht auf Dateien, wenn Sie eine Verbindung über eine Inline hergestellt haben. Wenn ich Sie richtig verstehe, natürlich.

 
Ich habe versucht, "olyakish_fractals_01" von jemand anderem so umzuschreiben, dass es meiner Idee entspricht, meine basiert auf Williams' Green Bars. Ich habe eine falsche Idee, ich habe eine falsche MQL4, es ist nicht auf dem Diagramm zu sehen. Wenn jemand einen Hinweis hat, bitte helfen Sie mir, wenn es Sie nichts kostet).
Dateien:
18wbguVOL.mq4  13 kb