[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 306

 
drknn:

Ein Array "unendlicher" Länge kann in einem Indikator deklariert werden. Deklarieren Sie es und schreiben Sie dann in der Schleife sofort die gefundenen Werte in das Array. Die Frage ist nur, wie man die notwendige Auswahl in den Expert Advisor/Skript überträgt? Es gibt einige Instrumente, aber wir müssen die Komplexität bewerten. Vielleicht wäre es wirklich einfacher, 2 Durchläufe zu machen - im ersten berechnen wir die Anzahl der gefilterten Werte, ändern dann die Dimension des Arrays, und im zweiten geben wir die Werte in das Array ein?

Danke, aber die Variante mit dem Indikator ist nicht geeignet - vor der Übergabe der erhaltenen Probe an den Expert Advisor, gibt es ein Problem mit der Übergabe der Probe Bedingungen aus dem Expert Advisor an den Indikator.
 
PapaYozh:

Deklarieren Sie ein Array, das größer ist als die maximal erforderliche Größe.


Ganz genau :) Es wird funktionieren, wenn wir die Größe um ein Vielfaches erhöhen. Wir wissen zum Beispiel im Voraus, dass die Anzahl der gefilterten Werte tausend nicht überschreiten darf. Wir deklarieren ein Array mit mehreren tausend Zellen und sind fertig :)

Aber es wird einen Teil des notwendigen Speichers beanspruchen. :(

 
drknn:


Ganz genau :) Es wird funktionieren, wenn wir die Größe um ein Vielfaches erhöhen. Wir wissen zum Beispiel im Voraus, dass die Anzahl der gefilterten Werte tausend nicht überschreiten darf. Wir deklarieren ein Array mit mehreren tausend Zellen und sind fertig :)

Aber es wird einen Teil des notwendigen Speichers beanspruchen. :(


Wenn "wir im Voraus wissen, dass die Anzahl der gefilterten Werte tausend nicht überschreiten darf", reicht es aus , ein Array mit der Größe 1000 zu deklarieren.
 
splxgf:

https://docs.mql4.com/ru/math/MathPow nein? Oder die elementaren Operationen sind eine Bedingung des Problems. http://bpascal. ru/download/desc/436.php wenn Sie alles von Hand machen, dann implementieren Sie Exponent und Logarithmus mit Ihren eigenen Funktionen.

Ja, das entspricht genau der Bedingung. Danke für den Link, das ist genau das, was ich brauche!
 
Elenn:
Guten Tag, ein Ratschlag: Die Schleife sucht nach Werten, die bestimmte Bedingungen erfüllen. Die gefundenen Werte werden in ein Array geschrieben. Da im Voraus nicht bekannt ist, wie viele Werte gefunden werden, ist auch die Größe des zu deklarierenden Arrays nicht bekannt. Aus Zeit- und Ressourcengründen würde ich lieber nicht zwei Durchläufe machen (damit ich im ersten Durchlauf die Anzahl der gefundenen Werte zählen, im zweiten Durchlauf das Array deklarieren und Daten in das Array schreiben kann). Gibt es eine Möglichkeit, das gewünschte Ergebnis in einem Durchgang zu erzielen?
Sie können das Feld für jeden gefundenen Wert um eine Zelle vergrößern. Aber das ist nicht sehr schnell. Sie können optimieren, indem Sie die Größe um mehrere Zellen erhöhen und dann die Größenänderung für mehrere Iterationen auslassen.
 
PapaYozh:

Wenn Sie "im Voraus wissen, dass die Anzahl der gefilterten Werte tausend nicht überschreiten darf", können Sie einfach ein Array der Größe 1000 deklarieren.


Aber wie sieht es mit einem Notfallplan für den Fall höherer Gewalt aus? Würden Sie einen Code schreiben, der über einen Fehler informiert und den Expert Advisor blockiert? Nun, ein Mensch sieht das vielleicht nicht - er war in diesem Moment gerade bei der Arbeit.

Ja, es gibt in der Tat mehr als eine Lösung für dieses Problem. Ich denke, die beste Lösung ist die von Zhunko vorgeschlagene - dynamisch erhöhen die Dimensionalität des Arrays innerhalb der Filterschleife. Ehrlich gesagt, bin ich mit dieser Antwort sehr zufrieden. Daran habe ich nie gedacht :)

 
drknn:


Ich denke, die beste Lösung wäre immer noch die von Zhunko vorgeschlagene - dynamisch die Dimensionalität des Arrays innerhalb der Filterschleife erhöhen. Ehrlich gesagt, bin ich mit dieser Antwort sehr zufrieden. Daran habe ich nie gedacht :)

Die Lösung ist wirklich originell, ich sollte sie ausprobieren. Aber gehen beim erneuten Deklarieren des Arrays nicht die Daten durch die Neuinitialisierung verloren?
 
Elenn:
Die Lösung ist wirklich originell, wir sollten sie ausprobieren. Aber wenn Sie das Array neu deklarieren, gehen die Daten dann nicht durch die Neuinitialisierung verloren?

Ich mache das oft. Ich erstelle ein erstes Array. Dann (wenn nötig) erhöhe ich es um einen Wert (man kann nicht, es dauert zu lange, um Array-Operationen durchzuführen) und überprüfe einfach die Größe des tatsächlich gefüllten Arrays in meiner Arbeit. Bislang gab es keine Probleme
 
Vinin:

Array-Operationen benötigen zu lange zum Abschluss
Sind alle Array-Operationen lang, oder nur bestimmte?
 
Elenn:
Dauert es sehr lange, alle Array-Operationen auszuführen oder nur bestimmte?

Insbesondere bei der Größenänderung eines Arrays. Es ist besser, sie so selten wie möglich durchzuführen.