Fehler, Irrtümer, Fragen - Seite 1088

 
MoneyJinn:

Nach der Neukompilierung des Indikators trat bei der Arbeit mit dynamischen Ar rays der Fehler "array out of range" auf.

Das hat es vorher nicht gegeben. Was ist zu tun?

Wenn Sie ähnliche Zeilen am Anfang der Datei haben

#include <Datei.mqh> , diese Include-Dateien sind höchstwahrscheinlich seit der letzten Kompilierung geändert worden, von Ihnen oder von jemand anderem.

 
Olegts:

Wenn Sie ähnliche Zeilen am Anfang Ihrer Datei haben

#include <File.mqh>, ist es wahrscheinlich, dass diese Include-Dateien seit der letzten Kompilierung geändert wurden, von Ihnen oder von jemand anderem.

Es gibt keine Include-Dateien.

 
MoneyJinn:

Es gibt keine Plug-in-Dateien.

dann sollten Sie den Indikator veröffentlichen, vielleicht sieht ihn sich jemand in Ruhe an)
 

Warum sollte ein"Array out of range"-Fehler überhaupt auftreten, wenn man versucht, etwas in ein dynamisches Array zu setzen? Es handelt sich um ein dynamisches Array.

Array B1[] Als entsprechender Indikatorpuffer eingestellt

SetIndexBuffer(0,B1,INDICATOR_DATA); ArraySetAsSeries(B1,true);

Die Größe des Arrays ist hier eindeutig nicht benutzergesteuert.

 
MoneyJinn:
Warum sollte ein"Array out of range"-Fehler überhaupt auftreten, wenn man versucht, etwas in ein dynamisches Array zu setzen? Es ist eine dynamische Anordnung.
Dies bedeutet nicht, dass die Größe des Arrays selbst erhöht wird, die Funktion ArrayResize tut dies und dann können Sie Daten hinzufügen, aber nicht mehr als die neue Arraygröße
 
MoneyJinn:
Warum sollte ein"Array out of range"-Fehler überhaupt auftreten, wenn man versucht, etwas in ein dynamisches Array einzugeben? Es ist dynamisch.
(fcplm)
 
TheXpert:
(fcplm)

Wer wird ihn einsperren? Er ist ein Denkmal!

 

Plattform-Fehler.

Wenn beim Füllen des B1-Arrays des Indikatorpuffers die Prozedur SetIndexBuffer(0,B1,INDICATOR_DATA) wiederholt aufgerufen wird,

Wenn zum Beispiel der Indikator initialisiert wird, führt der nächste Versuch, etwas in das Array B1 zu schreiben, zu dem Fehler"Array out of range".

Wenn Sie die Prozedur SetIndexBuffer(0,B1,INDICATOR_DATA) einmal aufrufen, funktioniert alles einwandfrei.

So etwas gab es früher nicht.

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
MoneyJinn:

Plattform-Fehler.

Wenn beim Füllen des B1-Arrays des Indikatorpuffers die Prozedur SetIndexBuffer(0,B1,INDICATOR_DATA) wiederholt aufgerufen wird,

Wenn beispielsweise der Indikator initialisiert wird, führt der nächste Versuch, etwas in das Array B1 zu schreiben, zu dem Fehler"Array out of range".

Wenn ein einzelner Aufruf der Prozedur SetIndexBuffer(0,B1,INDICATOR_DATA) erfolgt, funktioniert alles einwandfrei.

Das hat es vorher nicht gegeben.

Aber warum tun Sie das immer wieder?

Die Bindung eines Puffers bedeutet, dass er geleert und für die dynamische Bindung für nachfolgende Berechnungen vorbereitet wird. Wenn Sie die Funktion ein zweites Mal aufrufen, wird der vorherige Puffer geleert und erst beim nächsten Aufruf der Indikator-Neuberechnung wieder gefüllt.

 
Renat:

Warum tun Sie das immer wieder?

Die Bindung des Puffers bedeutet, dass er geleert und auf die dynamische Bindung für die nächsten Berechnungen vorbereitet wird. Wenn Sie die Funktion ein zweites Mal aufrufen, wird der vorherige Puffer geleert und erst beim nächsten Aufruf der Indikator-Neuberechnung wieder gefüllt.

Dies war die standardmäßige vollständige Initialisierung des Indikators, die beim ersten Start des Indikators über Oninit() erfolgt.

Manchmal ist es auch notwendig, die Historie zu aktualisieren usw.

Niemand hat daran gedacht, dass die wiederholte Initialisierung des Indikators über Oninit() dazu führen würde, dass die Arrays nicht mehr reagieren.

Grund der Beschwerde: