Bitte sagen Sie mir, wie ich richtig mit einem Array arbeiten kann, dessen Elemente Mqlrates-Strukturen sind.
Das ist genau das, was ich wissen möchte:
MqlRates AdaptedRates[];
ArraySetAsSeries(AdaptedRates,true);
AdaptedRates[300].open=1;
Der Debugger gibt einen Fehler aus - Ungültiger Array-Zugriff.
Ich habe verstanden, dass wir mit dieser Form der Aufzeichnung nur Elemente einer Struktur lesen können, die ein Element eines Arrays ist.
Die Frage ist, wie man die Strukturelemente richtig schreibt . Ich interessiere mich nicht für alle, wichtig ist der Preis von .open .high .low .close.
Ich entschuldige mich im Voraus für diese Frage wahrscheinlich sehr trivial (ich bin nicht der Programmierer), aber in der Hilfe habe ich nicht die Antwort gefunden. Ich werde für jede Hilfe dankbar sein.
Sie verwenden ein dynamisches Array AdaptedRates[]. Soweit ich mich erinnere, sollte bei der Arbeit mit dynamischen Arrays deren Größe mit der Funktion ArrayResize() festgelegt werden. Aber bisher hat sich der Compiler über den Index 300 in der dritten Zeile beschwert.
Yedelkin: Sie verwenden ein dynamisches Array AdaptedRates[]. Soweit ich mich erinnere, sollten Sie bei der Arbeit mit dynamischen Arrays deren Größe mit der Funktion ArrayResize() festlegen. Und bis jetzt stürzt der Compiler bei dem in der dritten Zeile angegebenen Index 300 ab.
Statische Arrays können nicht als Zeitreihen dargestellt werden, d.h. die Funktion ArraySetAsSeries(), die den Zugriff auf Arrayelemente vom Ende eines Arrays zu seinem Anfang setzt, ist auf sie nicht anwendbar. Wenn Sie den Zugriff auf ein Array wie bei Timeseries ermöglichen wollen, verwenden Sie ein dynamisches Array-Objekt.
Dies ist ein Zitat aus der Hilfe.
Swan, Yedelkin, vielen Dank für die schnelle Antwort.
:) Sie setzen kein statisches Array, sondern ein dynamisches Array mit ArrayResize().
Nun, wie ArrayResize(AdaptedRates,302); usw.
Vielen Dank für die beliebte Erklärung, soweit ich verstehe, ist es ratsam,ArrayResize esauf die richtigen Grenzen vor jedem Verweis auf eine dynamische Array-Zelle, ich werde es versuchen.
Plötzlich hält er an und alle lokalen und entfernten Agenten sind fertig und bleiben hängen.
Können Sie mir sagen, wie ich wieder anfangen kann, es ist schade, wieder von vorne anzufangen?
Ich mache das regelmäßig :-) Ich kann es nicht wieder starten, ich muss Clouds deaktivieren und dann wieder starten. Noch schlimmer ist es, wenn es nachts passiert, bleibt es an, bis ich aufwache :-)
Neofit: Vielen Dank für die beliebte Erklärung, soweit ich verstehe, ist es wünschenswert, ArrayResize es auf die erforderlichen Grenzen vor jedem Verweis auf eine dynamische Array-Zelle , ich werde es versuchen.
Anmerkung. Nur bei Indikatorpuffern ist dies nicht erforderlich. Das ausführende Subsystem des Terminals erledigt dies selbst.
Anmerkung 2:ArrayResize() sollte vorzugsweise nur dann angewendet werden, wenn es notwendig ist, die Größe eines dynamischen Arrays zu ändern, und nicht vor jedem Zugriff auf dessen Elemente. Es kann durchaus sein, dass einem dynamischen Array einmal eine Größe zugewiesen wird und das Programm dann einfach auf seine Elemente zugreift.
Anmerkung. Nur bei Indikatorpuffern ist dies nicht erforderlich. Das ausführende Subsystem des Terminals erledigt dies selbst.
Anmerkung 2:ArrayResize() sollte vorzugsweise nur dann angewendet werden, wenn es notwendig ist, die Größe eines dynamischen Arrays zu ändern, und nicht vor jedem Zugriff auf dessen Elemente. Es kann durchaus sein, dass ein dynamisches Array einmal dimensioniert wird und das Programm dann einfach auf seine Elemente zugreift.
Nun, ich bin dumm zu sagen, so, eigentlich verstehe ich, dass, wenn ich bereits ein dynamisches Array auf 302 erweitert, ich kann jedes Element von 0 bis 301 ohne ArrayResize zugreifen.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Bitte sagen Sie mir, wie ich richtig mit einem Array arbeiten kann, dessen Elemente Mqlrates-Strukturen sind.
Das ist genau das, was ich wissen möchte:
MqlRates AdaptedRates[];
ArraySetAsSeries(AdaptedRates,true);
AdaptedRates[300].open=1;
Der Debugger gibt einen Fehler aus - Ungültiger Array-Zugriff.
Ich habe verstanden, dass wir mit dieser Form der Aufzeichnung nur Elemente einer Struktur lesen können, die ein Element eines Arrays ist.
Die Frage ist, wie man die Strukturelemente richtig schreibt . Ich interessiere mich nicht für alle, wichtig ist der Preis von .open .high .low .close.
Ich entschuldige mich im Voraus für diese Frage wahrscheinlich sehr trivial (ich bin nicht der Programmierer), aber in der Hilfe habe ich nicht die Antwort gefunden. Ich werde für jede Hilfe dankbar sein.
Legen Sie die Größe des Arrays fest. ArrayResize
Soweit ich weiß, kann ich bei der Definition der Größe, z. B.
:) Sie setzen kein statisches Array, sondern setzen die dynamische Array-Größe mit ArrayResize().
Nun, etwa: ArrayResize(AdaptedRates,302); usw.
Sie verwenden ein dynamisches Array AdaptedRates[]. Soweit ich mich erinnere, sollten Sie bei der Arbeit mit dynamischen Arrays deren Größe mit der Funktion ArrayResize() festlegen. Und bis jetzt stürzt der Compiler bei dem in der dritten Zeile angegebenen Index 300 ab.
Dies ist ein Zitat aus der Hilfe.
Swan, Yedelkin, vielen Dank für die schnelle Antwort.
Soweit ich das verstanden habe, kann ich, wenn ich eine Größe definiere, z. B.
ja.
MqlRates AdaptedRates[];//dadurch bleibt das Array dynamisch
ArrayResize(AdaptedRates,302);//und die richtige Größe einstellen
:) Sie setzen kein statisches Array, sondern ein dynamisches Array mit ArrayResize().
Nun, wie ArrayResize(AdaptedRates,302); usw.
Eine Panne im Strategietestprogramm.
Plötzlich hält er an und alle lokalen und entfernten Agenten sind fertig und bleiben hängen.
Können Sie mir sagen, wie ich wieder anfangen kann, es ist schade, wieder von vorne anzufangen?Vielen Dank für die beliebte Erklärung, soweit ich verstehe, ist es wünschenswert, ArrayResize es auf die erforderlichen Grenzen vor jedem Verweis auf eine dynamische Array-Zelle , ich werde es versuchen.
Anmerkung. Nur bei Indikatorpuffern ist dies nicht erforderlich. Das ausführende Subsystem des Terminals erledigt dies selbst.
Anmerkung 2:ArrayResize() sollte vorzugsweise nur dann angewendet werden, wenn es notwendig ist, die Größe eines dynamischen Arrays zu ändern, und nicht vor jedem Zugriff auf dessen Elemente. Es kann durchaus sein, dass einem dynamischen Array einmal eine Größe zugewiesen wird und das Programm dann einfach auf seine Elemente zugreift.
Anmerkung. Nur bei Indikatorpuffern ist dies nicht erforderlich. Das ausführende Subsystem des Terminals erledigt dies selbst.
Anmerkung 2:ArrayResize() sollte vorzugsweise nur dann angewendet werden, wenn es notwendig ist, die Größe eines dynamischen Arrays zu ändern, und nicht vor jedem Zugriff auf dessen Elemente. Es kann durchaus sein, dass ein dynamisches Array einmal dimensioniert wird und das Programm dann einfach auf seine Elemente zugreift.