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

 
Hallo! Bitte helfen Sie mir bei einem Problem. Ich muss Daten von einem EA für verschiedene Symbole/TF erhalten. Im Handbuch heißt es:"Der Mechanismus des Zugriffs auf den Server für Daten hängt nicht davon ab, wie eine Anfrage initiiert wurde - von einem Benutzer beim Navigieren in einem Diagramm oder vom Programm in MQL4". In der Praxis passiert jedoch Folgendes, wenn wir zum Beispiel in Echtzeit die Anzahl der Balken auf einem anderen Symbol/TF als dem Symbol, auf dem der EA läuft, verfolgen Das neue Symbol lädt beim ersten Zugriff eine geringe Anzahl von Balken (etwa 1000 für M1), und diese Anzahl ändert sich nicht. Ich habe verschiedene Funktionen ausprobiert, um auf Zeitreihen zuzugreifen, ich habe versucht, die Verschiebung der Balken und die Zeit tiefer in der Geschichte anzugeben, als sie im Moment geladen ist, ich habe versucht, den ChartNavigate(_ID, CHART_BEGIN) zu verschieben - neue Daten werden nicht geladen und die Anzahl der Balken ändert sich nicht. Wenn ich jedoch ein Fenster programmatisch aus demselben Expert Advisor öffne (ich habe es zuvor für die Funktion ChartNavigate() geöffnet) und das Diagramm mit der Schaltfläche Pfeil/Home/PgUp nach links verschiebe, führt dies zur Vergrößerung der Zeitreihen-Arrays, die Anzahl der Balken wird in Echtzeit erhöht, d.h. die Daten werden geladen. Was muss getan werden, um den Verlauf programmatisch zu laden, ohne physische Tasten auf der Tastatur zu drücken? Danke)
 
Ihor Herasko:

Machen Sie es auf diese Weise. Der Code ist fast korrekt. Es fehlt nur noch ein Wort:

Ich danke Ihnen!
 
Alexandr Mordashov:
Hallo! Helfen Sie mir, das Problem zu lösen. Ich muss Daten von einem EA für verschiedene Symbole/TF erhalten. In der Hilfe heißt es:"Der Mechanismus des Zugriffs auf den Server für Daten hängt nicht davon ab, wie die Anfrage initiiert wurde - von einem Benutzer beim Navigieren in einem Diagramm oder von einem Programm in MQL4". In der Praxis passiert jedoch Folgendes, wenn wir zum Beispiel in Echtzeit die Anzahl der Balken auf einem anderen Symbol/TF als dem Symbol, auf dem der EA läuft, verfolgen Das neue Symbol lädt beim ersten Zugriff eine geringe Anzahl von Balken (etwa 1000 für M1), und diese Anzahl ändert sich nicht. Ich habe verschiedene Funktionen ausprobiert, um auf Zeitreihen zuzugreifen, ich habe versucht, die Verschiebung der Balken und die Zeit tiefer in der Geschichte anzugeben, als sie im Moment geladen ist, ich habe versucht, den ChartNavigate(_ID, CHART_BEGIN) zu verschieben - neue Daten werden nicht geladen und die Anzahl der Balken ändert sich nicht. Wenn ich jedoch ein Fenster programmatisch aus demselben Expert Advisor öffne (ich habe es bereits für die ChartNavigate()-Funktion geöffnet) und den Chart mit der Pfeil-/Home-/PgUp-Schaltfläche nach links verschiebe, führt dies zur Vergrößerung der Zeitreihen-Arrays, die Anzahl der Balken wird in Echtzeit erhöht, d.h. die Daten werden geladen. Was muss getan werden, um den Verlauf programmatisch zu laden, ohne physische Tasten auf der Tastatur zu drücken? Danke)

Sie müssen die Frage deutlicher formulieren. Wenn das Problem nicht gestellt wird, kann es auch nicht gelöst werden.

 
Galim_V:
Können Sie mir sagen, wie ich die unteren Indikatoren von einem anderen Zeitrahmen als dem, auf dem die Eule schwebt, erhalten kann?
double iRev()
{
 static int wtf;
 static int tf;  
 int xtf =Period();       // таймфрейм текущего графика 
 
                          //PERIOD_CURRENT;
 if(xtf != PERIOD_CURRENT)
 {
 Print("xtf  ",xtf);
   switch(xtf)
   {
    case 1: tf = PERIOD_H1;
    break;
    case 5: tf = PERIOD_H4; wtf = PERIOD_H1;
    break;
    case 15: tf = PERIOD_D1;
    break;
   }
     
 }
Print("tf == ",tf,"wtf ==",wtf);
 double  iRa =  NormalizeDouble(iCustom(NULL,tf,"iRevers",InpSARStep,InpSARMaximum,0),Digits);
 double  wRa =  NormalizeDouble(iCustom(NULL,wtf,"iRevers",InpSARStep,InpSARMaximum,0),Digits);
   if(iRa != 0) ObjectCreate("Ra",OBJ_HLINE,0,Time[0],iRa,0,0);
     
     ObjectSet("Ra",OBJPROP_TIME1,Time[0]);
     ObjectSet("Ra",OBJPROP_PRICE1,iRa);
   
   if(wRa != 0) ObjectCreate("weRa",OBJ_HLINE,0,Time[0],wRa,0,0); 
     ObjectSet("weRa",OBJPROP_TIME1,Time[0]);
     ObjectSet("weRa",OBJPROP_PRICE1,wRa); 
    
     
  Print("iRa   ",iRa,wRa);
 return(iRa);
}  
Funktioniert, aber nicht immer korrekt. Ich habe die Objekte zur visuellen Beurteilung beigefügt. Irgendwelche Tipps oder wo man suchen kann.
 
Galim_V:
Es funktioniert, aber nicht immer richtig. Ich habe die Objekte zur visuellen Beurteilung beigefügt. Bitte beraten Sie mich oder sagen Sie mir, wo ich suchen soll.

Wofür ist DRAW_LINE gedacht?

 double  iRa =  NormalizeDouble(iCustom(NULL,tf,"iRevers",InpSARStep,InpSARMaximum,DRAW_LINE,0),Digits);
 double  wRa =  NormalizeDouble(iCustom(NULL,wtf,"iRevers",InpSARStep,InpSARMaximum,DRAW_LINE,0),Digits);
 
Alexey Viktorov:

Wofür ist DRAW_LINE gedacht?

Ich habe den Code korrigiert. Aber es funktionierte nicht richtig, auch nicht wegen Fehlern im Code. Ich führe Tests im Terminal meines Brokers durch und überwache nicht immer die Verbindung mit dem Server. Das ist in diesem Fall sehr wichtig. Ich danke Ihnen.
 

Hallo. Wie erkenne ich den Schlusskurs bei M30, wenn der EA auf dem H1-Chart ist?

Close_M30= iClose(Symbol(),PERIOD_M30,1);
 
bij:

Hallo. Wie erkenne ich den Schlusskurs bei M30, wenn der EA auf dem H1-Chart ist?

Ich mag es, wenn Leute eine Frage stellen und sie selbst beantworten ))

Im Grunde ist alles richtig. Es gibt nur einen feinen Unterschied: Bevor wir Daten aus einem anderen Zeitraum verwenden, müssen wir sicherstellen, dass diese Daten überhaupt existieren.

Der vollständige korrekte Code würde also wie folgt aussehen

ResetLastError();
Close_M30= iClose(Symbol(),PERIOD_M30,1);
if (GetLastError() != ERR_NO_ERROR)
{
  // Значение Close_M30 использовать нельзя
}
 
Ihor Herasko:

Ich mag es, wenn Leute eine Frage stellen und sie dann selbst beantworten ))

Im Großen und Ganzen ist alles richtig. Es gibt nur eine Nuance: Bevor Sie Daten aus einer anderen TF verwenden, müssen Sie sicherstellen, dass diese Daten überhaupt existieren.

Der vollständige korrekte Code würde also wie folgt aussehen:

Danke, Aktion nur nach H1-Schluss, aber die Bedingung ist 30 Minuten vor H1-Schluss erfüllt.

 ResetLastError();
   niz_=NormalizeDouble(iCustom(NULL,PERIOD_M30,"mand v.1",2,1),Digits);
   Close_M30=iClose(Symbol(),PERIOD_M30,1);
   if(GetLastError() != ERR_NO_ERROR)return;
   if(Close_M30>niz_)//условие
     {
      //действие
     }
 
bij:

Danke, die Aktion ist nur nach dem H1-Schluss, aber die Bedingung ist 30 Minuten vor dem H1-Schluss erfüllt.

Wenn Sie die M30-Kerze nehmen wollen, die mit dem letzten H1-Schluss geschlossen hat, kann es sich um eine Kerze mit dem Index nicht nur 1, sondern auch 2 handeln. Außerdem ist nicht klar, warum der Schlusskurs von M30 genommen wird, wenn es derselbe Schlusskurs für die vorherige H1-Kerze ist. Das heißt, in diesem Fall macht es keinen Sinn, den Schlusskurs eines anderen TF abzufragen, da er mit dem Schlusskurs des aktuellen TF übereinstimmt.

Grund der Beschwerde: