Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 426

 
Boss11:

Guten Tag, liebe Forumsnutzer.

Bitte helfen Sie mir bei der folgenden Aufgabe:

Ich brauche die Indikatordaten in mt4 mit mql, z.B. MA5 mit 1d Zeitrahmen, ab 14.30 Uhr von vorgestern.

Wenn ich also das iMA-Skript vorgestern um 14.30 Uhr ausführe, stellen sich keine Fragen, aber wie bekomme ich es heute?

sagen Sie mir wenigstens, wo ich graben soll

Es ist ganz einfach. Sie müssen 7 Parameter einstellen, um die iMA zu berechnen. Der erste Parameter, der Name des Symbols, ist offensichtlich. Als zweiten Zeitrahmen setzen Sie M1. Der dritte Parameter - der Zeitraum - kann so oft wie nötig eingestellt werden, wobei die Anzahl der Tage mehr als eine Minute beträgt. Der vierte Parameter - Verschiebung = 0. Die nächsten beiden Parameter - die Methode der Mittelwertbildung und der Preistyp - sind Ihnen bekannt. Die letzte Zahl ist die Taktzahl, die Sie bitte berechnen, wenn Sie die benötigte Zeit wissen. Das ist alles! Überprüfen Sie dies, indem Sie Berechnungen für die Zeiträume M5 und M15 anstellen. Vielleicht sogar für M30.

 
STARIJ:

Es ist ganz einfach. Für die Berechnung der iMA werden 7 Parameter benötigt. Der erste Parameter, der Name des Symbols, ist offensichtlich. Als zweiten Parameter, Zeitrahmen, stellen Sie M1 ein. Der dritte Parameter - der Zeitraum - kann so oft wie nötig eingestellt werden, wobei die Anzahl der Tage mehr als eine Minute beträgt. Der vierte Parameter - Verschiebung = 0. Die nächsten beiden Parameter - die Methode der Mittelwertbildung und der Preistyp - sind Ihnen bekannt. Die letzte Zahl ist die Taktzahl, die Sie bitte berechnen, wenn Sie die benötigte Zeit wissen. Das ist alles! Überprüfen Sie dies, indem Sie Berechnungen für die Zeiträume M5 und M15 anstellen. Vielleicht sogar für M30.

Leider ist das nicht einfach. Nimmt man den MA5, Zeitrahmen 1440 (1 Tag), wählt Bar Nummer 2 (vorgestern), erhält man den MA5 für die Eröffnung oder Schließung der letzten Kerze, aber nicht den Zeitpunkt 14.30 Uhr. Und das ist es, was wir spezifizieren müssen. Noch einmal. Die technischen Indikatoren werden aus mehreren Kerzen berechnet, sie öffnen um 00.00 Uhr (wenn es sich um einen Tag handelt), sie schließen um 23.59 Uhr, aber die letzte Kerze (wenn es sich um einen 0-Balken handelt) wird nicht geschlossen, und wir nehmen den letzten Preis des 0-Balkens für ihre Berechnung. Wenn der MA auf dem Null-Balken liegt, ist dies einfach, aber wenn er nicht auf dem Null-Balken liegt, sondern in der Mitte des Vortages, was sollen wir dann tun? Wie kann man МА in der Mitte des vorangegangenen Tages in TF 1440 berechnen?

 
Artyom Trishkin:

Herzlichen Dank! Ich werde mich an die Arbeit machen und den Code schreiben :) Ich werde Sie über die Ergebnisse informieren.

 
Boss11:

Leider ist das nicht einfach. Nimmt man den MA5, Zeitrahmen 1440 (1 Tag), wählt Bar Nummer 2 (vorgestern), erhält man den MA5 für die Eröffnung oder Schließung der letzten Kerze, aber nicht den Zeitpunkt 14.30 Uhr. Und das ist es, was wir spezifizieren müssen. Noch einmal. Die technischen Indikatoren werden aus mehreren Kerzen berechnet, sie öffnen um 00.00 Uhr (wenn es sich um einen Tag handelt), sie schließen um 23.59 Uhr, aber die letzte Kerze (wenn es sich um einen 0-Balken handelt) wird nicht geschlossen, und wir nehmen den letzten Preis des 0-Balkens für ihre Berechnung. Wenn der MA auf dem Null-Balken liegt, ist dies einfach, aber wenn er nicht auf dem Null-Balken liegt, sondern in der Mitte des Vortages, was sollen wir dann tun? Wie kann ich МА in der Mitte des vorangegangenen Tages in TF 1440 berechnen?


Es ist sehr einfach

void OnStart()
  {
// Формируем время  
   Alert("14.30  позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));

//14.30  позавчерашнего дня
   datetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");

//Бар 14.30  позавчерашнего дня
   int     shift=iBarShift(NULL,0,time);

//Машка 14.30  позавчерашнего дня  
   double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);

   Alert("Машка 14.30  позавчерашнего дня = ",DoubleToString(ma,Digits));
}

Wie diese

 

Haben Sie eine Idee, wie Sie das Senden von Signalen per Skript organisieren können?

 

Ich brauche die Hilfe von Fachleuten

Ich habe einen EA-Quellcode, er wurde 2014 kompiliert und alles war in Ordnung.

Ich habe beschlossen, ein neues Konto zu schreiben und kompilieren die EA auf sie, aber es will nicht kompilieren

Ich habe 23 Fehler wie diese ( } )

Was sollte ich tun und was hat sich seit 2014 geändert?

 
Boss11:

Leider ist das nicht einfach. Nimmt man den MA5, Zeitrahmen 1440 (1 Tag), wählt Bar Nummer 2 (vorgestern), erhält man den MA5 für die Eröffnung oder Schließung der letzten Kerze, aber nicht den Zeitpunkt 14.30 Uhr. Und das ist es, was wir spezifizieren müssen. Noch einmal. Die technischen Indikatoren werden aus mehreren Kerzen berechnet, sie öffnen um 00.00 Uhr (wenn es sich um einen Tag handelt), sie schließen um 23.59 Uhr, aber die letzte Kerze (wenn es sich um einen 0-Balken handelt) wird nicht geschlossen, und wir nehmen den letzten Preis des 0-Balkens für ihre Berechnung. Wenn der MA auf dem Null-Balken liegt, ist dies einfach, aber wenn er nicht auf dem Null-Balken liegt, sondern in der Mitte des Vortages, was sollen wir dann tun? Wie kann ich den MA in der Mitte des Vortages in TF 1440 berechnen?

Es ist ganz einfach. Für die Berechnung der iMA werden 7 Parameter benötigt. Der erste Parameter, der Name des Symbols, ist offensichtlich. Für den zweiten Parameter, den Zeitrahmen, stellen Sie M1 ein. Der dritte Parameter - der Zeitraum - kann so oft wie nötig eingestellt werden, wobei die Anzahl der Tage mehr als eine Minute beträgt. Der vierte Parameter - Verschiebung = 0. Die nächsten beiden Parameter - die Methode der Mittelwertbildung und der Preistyp - sind Ihnen bekannt. Bitte berechnen Sie die Taktzahl, wenn Sie die benötigte Zeit wissen. Das ist alles! Überprüfen Sie dies, indem Sie Berechnungen für die Zeiträume M5 und M15 anstellen. Vielleicht sogar für M30.
 

Hallo. Vielen Dank anSTARIJ undArtyom Trishkin für die letzte Beratung. Aber da ich noch ein Neuling bin, stellen sich andere Fragen. Zum Beispiel das Folgende. Ich verwende die folgende Funktion, um nur eine Position in einem Takt zu öffnen:

void Fun_New_Bar()                              // Ф-ия обнаружения нового бара   
  {                                             
   static datetime New_Time=0;                  // Время текущего бара  
   New_Bar=false;                               // Нового бара нет  
   if(New_Time!=Time[0])                        // Сравниваем время  
     {  
      New_Time=Time[0];                         // Теперь время такое  
      New_Bar=true;                             // Поймался новый бар  
     }  
  }

Und sofort stellt sich eine Frage: Warum muss ich bei jedem Zugriff auf die Funktion eine statische Variable "an den Anfang der Zeit" schicken? Immerhin nimmt er beim ersten Aufruf selbst den Wert Null an und lässt ihn dann bis zum nächsten Aufruf den Wert des vorherigen Nullbalkens speichern, anstatt auf Null zurückgesetzt zu werden. Vielleicht könnte diese einfache Funktion vereinfacht werden. Ich selbst habe jedoch Angst, es zu vermasseln. Und noch eine Frage zu dieser Funktion: Kann es nicht sein, dass der AusdruckNew_Time=Time[0]; nicht die Millisekunde erfasst, wenn ein neuer Balken geöffnet wird? Was passiert dann? Danke.

 
novichok2018:

Hallo. Vielen Dank auch anSTARIJ für die letzte Beratung. Da ich aber immer noch ein Neuling bin, stellen sich andere Fragen. Zum Beispiel das Folgende. Ich verwende die folgende Funktion, um nur eine Position in einem Bar zu öffnen:

Und sofort stellt sich eine Frage: Warum muss ich bei jedem Zugriff auf die Funktion eine statische Variable "an den Anfang der Zeit" schicken? Immerhin nimmt er beim ersten Aufruf selbst den Wert Null an und lässt ihn dann bis zum nächsten Aufruf den Wert des vorherigen Nullbalkens speichern, anstatt auf Null zurückgesetzt zu werden. Vielleicht könnte diese einfache Funktion vereinfacht werden. Ich selbst habe jedoch Angst, es zu vermasseln. Und noch eine Frage zu dieser Funktion: Kann es nicht sein, dass der AusdruckNew_Time=Time[0]; nicht die Millisekunde erfasst, wenn ein neuer Balken geöffnet wird? Was passiert dann? Danke.

Und Sie können ablesen, wie oft eine statische Variable initialisiert wird. Und die Frage selbst wird wegen ihrer Absurdität verschwinden ;)
 
novichok2018:

Hallo. Vielen Dank anSTARIJ undArtyom Trishkin für die letzte Beratung. Aber da ich noch ein Neuling bin, stellen sich andere Fragen. Zum Beispiel das Folgende. Ich verwende die folgende Funktion, um nur eine Position in einem Takt zu öffnen:

Und sofort stellt sich eine Frage: Warum muss ich bei jedem Zugriff auf die Funktion eine statische Variable "an den Anfang der Zeit" schicken? Immerhin nimmt er beim ersten Aufruf selbst den Wert Null an und lässt ihn dann bis zum nächsten Aufruf den Wert des vorherigen Nullbalkens speichern, anstatt auf Null zurückgesetzt zu werden. Vielleicht könnte diese einfache Funktion vereinfacht werden. Ich selbst habe jedoch Angst, es zu vermasseln. Und ich habe noch eine Frage zu dieser Funktion: Ist es nicht möglich, dass der AusdruckNew_Time=Time[0]; nicht die Millisekunde erfasst, wenn ein neuer Balken geöffnet wird? Was passiert dann? Danke.


Zu der zweiten Frage,

Wenn der erste Tick nicht verfängt, dann wird es der zweite tun.

Grund der Beschwerde: