Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1019

 
Сергей Таболин:

Der erste Weg half )))) Danke.

Eine weitere Frage: Ich reiße 3 Indikatorinstanzen im Indikator ab, um Daten von verschiedenen TFs zu erhalten. Aber wenn ich sie an ein Diagramm anhänge, erhalte ich diese Art von Tabellenkalkulation:

Was würde das bedeuten?

Ich kann es nicht mit Sicherheit sagen, aber vielleicht wurde der 2. Puffer zu spät initialisiert.

Um herauszufinden, was genau der Grund dafür ist, sollten Sie die folgenden Zeilen wie folgt anpassen

if(CopyBuffer(handle_MA,0,0,ma_values_to_copy,buffer_MA) < 0 ) // копируем данные из индикаторного массива в массив buffer_MA
   {                                                                                // если не скопировалось
      Print("Не удалось скопировать данные из индикаторного буфера в buffer_MA, код ошибки "+ IntegerToString(GetLastError()));   // то выводим сообщение об ошибке
      return(0);                                                                    // и выходим из функции
   }

Danach können wir mit größerer Sicherheit sagen, was falsch ist

 
Oleg Peiko:

Ich kann es nicht mit Sicherheit sagen, aber vielleicht wurde der 2. Puffer zu spät initialisiert.

Um herauszufinden, woran es genau liegt, sollten Sie die folgenden Zeilen wie folgt anpassen

Danach können wir mit größerer Sicherheit sagen, was los ist.

2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Не удалось скопировать данные из индикаторного буфера в buffer_MA2
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        4806
2019.03.23 22:58:11.637 my_HMA5_123.ex5::my_HMA5 (GBPUSD,M15)   BarsCalculated() вернул -1, код ошибки 4806
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
ERR_INDICATOR_DATA_NOT_FOUND    4806    Запрошенные данные не найдены

Kann man damit etwas anfangen?

Diese Kopie wird übrigens auf M15 geöffnet.

Das Gleiche gilt aber auch für andere TFs...

 
Сергей Таболин:

Können Sie etwas dagegen tun?

Diese Kopie wird übrigens auf M15 geöffnet.

Das Gleiche gilt auch für andere Zeitrahmen...

Fragen Sie im Timer alle zwei Minuten nach den Daten für den gewünschten Zeitraum. Auf diese Weise verfügen Sie immer über aktuelle Daten für den jeweiligen Zeitraum.

Außerdem: In OnCalculate(), ganz am Anfang, fordern Sie es zum Beispiel an:

   if(iTime(NULL,PERIOD_M15,1)==0)
      return 0;

Bis die Daten des fünfzehnminütigen Zeitrahmens verfügbar sind, wartet der Indikator also auf den nächsten Tick.
Mit der Funktion CopyXXX können Sie die richtige Menge an Daten für die Berechnung anfordern:

   datetime array[];
   if(CopyTime(NULL,PERIOD_M15,0,number_of_datas,array)!=number_of_datas)
      return 0;

In diesem Fall wartet der Indikator auf den nächsten Tick, bis die erforderliche Anzahl von Daten verfügbar ist.

Wenn Sie sich für die Funktion

Bars(NULL,PERIOD_M15);

..., sollten Sie beachten, dass die Datenmenge für die Berechnung nicht größer sein sollte als die rates_total, da sie sonst die Grenzen des Arrays überschreitet. Mit anderen Worten, wenn es auf dem aktuellen Zeitrahmen weniger Balken gibt als auf M15, dann sollten wir die Anzahl der Balken nehmen, die ihrer Anzahl auf dem aktuellen Zeitrahmen entspricht = rates_total

 
Artyom Trishkin:

Fordern Sie im Timer alle zwei Minuten beliebige Daten für den gewünschten Zeitraum an. Auf diese Weise verfügen Sie immer über aktuelle Daten für den jeweiligen Zeitraum.

Außerdem: in OnCalculate() ganz am Anfang fordern Sie z.B.:

Bis die Daten des 15-Minuten-Zeitrahmens verfügbar sind, wartet der Indikator also auf den nächsten Tick.
Mit der Funktion CopyXXX können Sie die richtige Menge an Daten für die Berechnung anfordern:

In diesem Fall wartet der Indikator auf den nächsten Tick, bis die erforderliche Datenmenge in number_of_datas verfügbar ist.

Wenn Sie sich für die Funktion

..., sollten Sie beachten, dass die Datenmenge für die Berechnung nicht größer sein sollte als die rates_total, da sonst die Grenzen des Arrays überschritten werden. Mit anderen Worten, wenn es auf dem aktuellen Zeitrahmen weniger Balken gibt als auf M15, dann sollten wir die Anzahl der Balken nehmen, die ihrer Anzahl auf dem aktuellen Zeitrahmen entspricht = rates_total

Danke.

Ich habe es so gemacht:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   
   if(iTime(NULL,PERIOD_CURRENT,1)==0)  return(0); 
   if(iTime(NULL,periodTF1,1)==0)       return(0); 
   if(iTime(NULL,periodTF2,1)==0)       return(0); 
   
   int ma_values_to_copy; 
   int ma_calculated = 0;
   if(PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF1) && PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF2))   ma_calculated = BarsCalculated(handle_MA);
   else
   if(PeriodSeconds(periodTF1) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF1) < PeriodSeconds(periodTF2))        ma_calculated = BarsCalculated(handle_MA2);
   else
   if(PeriodSeconds(periodTF2) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF2) < PeriodSeconds(periodTF1))        ma_calculated = BarsCalculated(handle_MA3);
   
   if(ma_calculated <= 0){ 
      PrintFormat("BarsCalculated() вернул %d, код ошибки %d",ma_calculated,GetLastError()); 
      return(0); 
     }  
   if(prev_calculated == 0 || ma_calculated != ma_bars_calculated || rates_total > prev_calculated + 1){ 
      if(ma_calculated > rates_total) ma_values_to_copy = rates_total; 
      else ma_values_to_copy = ma_calculated; 
     } else { 
      ma_values_to_copy = (rates_total - prev_calculated) + 1; 
     } 

Ergebnis:

2019.03.24 00:56:38.056 my_HMA5_125 (GBPUSD,M30)        BarsCalculated() вернул -1, код ошибки 4806
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c3

Ich tue mich schwer mit Indikatoren ))))

 

Hallo zusammen!
Bitte beraten Sie mich über die Funktion CopyHigh.
Ich habe in der Definition dieser Funktion gelesen: "Ruft die historischen Daten in einem Array mit dem maximalen Barpreis für ein bestimmtes Symbol und einen bestimmten Zeitraum ab".

Handelt es sich um ein Bid- oder Ask-Preisfeld? Oder gibt es eine Möglichkeit, die Art des benötigten Preises festzulegen?

 
renatmt5:

Hallo zusammen!
Bitte informieren Sie mich über die Funktion CopyHigh.
Ich habe in der Definition dieser Funktion gelesen: "Ruft Historiendaten in Form eines Arrays maximaler Barpreise für ein bestimmtes Symbol und einen bestimmten Zeitraum ab".

Handelt es sich um ein Bid- oder Ask-Preisfeld? Oder ist es möglich, die Art des benötigten Preises irgendwie festzulegen?

Referenz:Merkmale des Plottens

Merkmale der Diagrammerstellung

Die Verlaufsdaten, auf deren Grundlage die Diagramme erstellt werden, sind auf der Festplatte gespeichert. Wenn Sie ein Diagramm öffnen, werden die Daten von der Festplatte heruntergeladen, und die letzten fehlenden Daten werden vom Handelsserver heruntergeladen. Wenn die historischen Daten eines Finanzinstruments nicht auf der Festplatte verfügbar sind, werden die letzten 512 Balken der Historie heruntergeladen.

Um frühere Daten herunterzuladen, bewegen Sie das Diagramm in den gewünschten Bereich. Sobald der Chart geöffnet ist, erhält die Plattform Informationen zu den aktuellen Kursen. So wird die weitere Kursbewegung in Echtzeit gebildet. Diese Informationen werden automatisch in einer Verlaufsdatei gespeichert und beim erneuten Öffnen dieser Karte verwendet.

  • Der Parameter "Max bars on chart" wird in den Plattformeinstellungen festgelegt. Mit diesem Parameter lässt sich die Menge der im Diagramm angezeigten historischen Daten steuern.
  • Die Charts sind gegen die Geldkurse aufgetragen. Wenn dieMarkttiefe für das Symbol verfügbar ist, werden die Charts zu den letzten Preisen (dem Preis des letzten ausgeführten Handels) gezeichnet.
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
Vladimir Karputov:

Referenz:Merkmale der grafischen Darstellung

Merkmale der Diagrammerstellung

Die historischen Daten, auf deren Grundlage die Diagramme erstellt werden, werden auf der Festplatte gespeichert. Wenn Sie ein Diagramm öffnen, werden die Daten von der Festplatte heruntergeladen, und die letzten fehlenden Daten werden vom Handelsserver heruntergeladen. Wenn die historischen Daten eines Finanzinstruments nicht auf der Festplatte verfügbar sind, werden die letzten 512 Balken der Historie heruntergeladen.

Um frühere Daten herunterzuladen, bewegen Sie das Diagramm in den gewünschten Bereich. Sobald der Chart geöffnet ist, erhält die Plattform Informationen zu den aktuellen Kursen. So wird die weitere Kursbewegung in Echtzeit gebildet. Diese Informationen werden automatisch in einer Verlaufsdatei gespeichert und beim erneuten Öffnen dieser Karte verwendet.

  • Der Parameter "Max bars on chart" wird in den Plattformeinstellungen festgelegt. Mit diesem Parameter können Sie die Menge der im Diagramm angezeigten historischen Daten steuern.
  • Die Charts sind gegen die Geldkurse aufgetragen. Wenn dieMarkttiefe für das Symbol verfügbar ist, werden die Charts zu den letzten Preisen (letzter Handelspreis) gezeichnet.

Guten Tag Vladimir, wie immer hilfst du mir weiter :) Ich danke Ihnen!

 
Einen guten Tag an alle. Bitte geben Sie an, wie das Volumen der Position auf der Grundlage der der Transaktion zugewiesenen Mittel zu berechnen ist.
 

Wie findet man die kleinste Kerze von N in mql5?

In mql4

   min=99999;
   N=5;
   for(int i=1;i<=N;i++)
     {
      if(High[i]-Low[i]<min) min=High[i]-Low[i];
     }
 
yiduwi:

Wie findet man die minimale Kerze von N in mql5?

In mql4

Im Expert Advisor oder in einem Indikator? Für den aktuellen Zeitraum oder für einen anderen?