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

 

Ich kann nicht verstehen, was rates_total und prev_calculated letztendlich bedeuten.

In der Dokumentation heißt es: Der erste Parameter rates_total enthält die Anzahl der Balken, die dem Indikator für die Berechnung zur Verfügung stehen, und entspricht der Anzahl der auf dem Chart verfügbaren Balken.

Zum Beispiel MA5, Durchschnitt von 5 Balken, eingestellt auf die Anzeige von 100 Balken. Dann rechnet der Indikator vom 104. bis zum 100. Balken und beginnt mit dem Zeichnen der Linie beim 100sten Balken. Dann ist rates_total=5, oder 100, oder 104?

 
Novichokkk Anzahl der Balken, die dem Indikator für die Berechnung zur Verfügung stehen, und entspricht der Anzahl der im Diagramm verfügbaren Balken.

Zum Beispiel MA5, Durchschnitt von 5 Balken, eingestellt auf die Anzeige von 100 Balken. Dann rechnet der Indikator vom 104. bis zum 100. Balken und beginnt mit dem Zeichnen der Linie beim 100sten Balken. Dann ist rates_total=5, oder 100, oder 104?

Rates_total ist die Anzahl der für die Berechnung verfügbaren Balken des Charts. Mit anderen Worten, es ist Bars().

prev_calculated gibt an, wie viele Balken der Indikator beim vorherigen OnCalculate()-Aufruf berechnet hat. Sie ist notwendig, um wirtschaftliche Berechnungen zu organisieren.

Wenn prev_calculated gleich rates_total ist, bedeutet dies, dass noch nichts berechnet wurde, und es ist notwendig, die Puffer des Indikators zu initialisieren und eine vollständige Berechnung der gesamten Historie durchzuführen.

Im Allgemeinen können wir die folgende Konstruktion verwenden:

//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }
 
Artyom Trishkin #:

rates_total ist die Anzahl der für die Berechnung verfügbaren Diagrammbalken. Mit anderen Worten, es ist Bars().

prev_calculated gibt an, wie viele Balken der Indikator beim letzten Aufruf von OnCalculate() berechnet hat. Es ist notwendig, wirtschaftliche Berechnungen zu organisieren.

Wenn prev_calculated gleich rates_total ist, bedeutet dies, dass noch nichts berechnet wurde, und es ist notwendig, die Puffer des Indikators zu initialisieren und eine vollständige Berechnung der gesamten Historie durchzuführen.

Im Allgemeinen können wir die folgende Konstruktion verwenden:

Warum schreibt man nicht statt rates_total - Bars()?

int limit=Bars()-prev_calculated;

Tut mir natürlich leid, dass ich ein Lahmarsch bin. Ich wühle mich durch die Dokumentation, mehrere Bücher über MKL5. Nicht alle Nuancen werden erklärt. Auch nicht in den Büchern. Unabhängig davon ist die Sprache in den Büchern klar. Wie Konstruktionen zusammengesetzt werden, was woher und wofür.... Ich fange an, mich damit zu beschäftigen. Viele Checks und Double-Checks. Ich habe einen einfachen Mashki-Code geöffnet, und es sind so viele Zeilen. Und es schien, dass alles, was Sie tun müssen, ist, ein Array zu entladen (oder darauf zuzugreifen), für einen Wert von so-und-so-Index im Array zu so-und-so zu berechnen, und durch ein Schiebefenster mit diesen Berechnungen auf dem Array zu gehen, die durch Indizes von wo bis wo angeben. Ja, um die Zeile auf dem Bildschirm anzuzeigen. Nein.
 
Novichokkk #:

Warum nicht Bars() anstelle von rates_total schreiben ?

Tut mir natürlich leid, dass ich ein Lahmarsch bin. Ich wühle mich durch die Dokumentation, mehrere Bücher über MKL5. Nicht alle Nuancen werden erklärt. Auch in den Büchern. Unabhängig davon ist die Sprache in den Büchern klar. Wie Konstruktionen zusammengesetzt werden, was woher und wofür.... Ich fange an, mich damit zu beschäftigen. Viele Checks und Double-Checks. Ich habe einen einfachen Mashki-Code geöffnet, und es sind so viele Zeilen. Und es schien, dass alles, was Sie tun müssen, ist ein Array zu entladen (oder darauf zuzugreifen), für einen Wert von so-und-so-Index im Array zu so-und-so zu berechnen, und gehen Sie durch ein Schiebefenster mit diesen Berechnungen auf dem Array, die durch Indizes von wo bis wo. Ja, um die Zeile auf dem Bildschirm anzuzeigen. Und nein.

Sie können auch eine solche Konstruktion verwenden. Aber wozu? Wenn es bereits vordefinierte Variablen in den Parametern des Handlers gibt...

Bars() sollte nur verwendet werden, wenn Sie es wirklich brauchen - wenn Sie die Anzahl der verfügbaren Balken durch ein anderes Symbol/Zeitstempel erhalten.

 
Artyom Trishkin #:

Sie können dieses Design auch verwenden. Aber warum? Wenn es bereits vordefinierte Variablen in den Parametern des Handlers gibt...

Bars() sollte nur dann verwendet werden, wenn es wirklich benötigt wird - wenn die Anzahl der verfügbaren Balken durch ein anderes Symbol/Zeitfenster ermittelt wird.

Artyom, manchmal wird jeder müde und macht Fehler. Betrachten Sie es nicht als Kritik, aber rates_total - Bars() wird immer Null sein...

Im Allgemeinen ist es sehr schwierig, diesem Zeichen zu erklären. Ein Opfer der USE...

 
Alexey Viktorov #:

Artyom, manchmal wird jeder müde und macht Fehler. Betrachten Sie es nicht als Kritik, aber rates_total - Bars() wird immer Null sein...

Im Allgemeinen ist es sehr schwierig, dieses Zeichen zu erklären. Ein Opfer der USE...

Ja, Sie haben Recht. Ich hätte nicht gedacht, dass sich jemand entschließen würde, so zu rechnen. Ich habe aus dem Augenwinkel heraus Bars in der Berechnung gesehen und dachte, es sei anstelle von rates_total.

Das kommt vor, danke.

 
Artyom Trishkin #:
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }

Ich verstehe, dass Sie der Person helfen wollten, aber offenbar haben Sie sie aus Versehen nur verwirrt.

Die wirtschaftliche Fehlkalkulation sieht in diesem Fall ein wenig anders aus.

for(int i=limit;i<rates_total;i++)
 
Aleksandr Slavskii #:

Ich verstehe, dass Sie der Person helfen wollten, aber offenbar aus Versehen nur verwirrt haben.

Die wirtschaftliche Fehlkalkulation sieht in diesem Fall ein wenig anders aus.

Was habe ich Ihrer Meinung nach falsch geschrieben? Begründen Sie es bitte.

Was ist die Grenze und woher kommt die Schleife in meinem und Ihrem Beispiel.

 
Novichokkk #:

Warum nicht Bars() anstelle von rates_total schreiben ?

Im Grunde genommen sind rates_total und Bars() dasselbe , nurBars() ist eine Funktion, so dass ihr Aufruf mehr Ausführungszeit kostet als das Lesen des Wertes der Variablen rates_total.

 
Artyom Trishkin #:

Was habe ich Ihrer Meinung nach falsch geschrieben? Begründen Sie es bitte.

Was ist die Grenze und woher kommt die Schleife in meinem und Ihrem Beispiel.

Ups))))))

Ich habe es nicht richtig gesehen

if(limit>1)

Ich habe überhaupt nicht verstanden, was Sie geschrieben haben.

Ich entschuldige mich dafür.

Grund der Beschwerde: