„Dynamischer“ Zugriff auf Variablen in einer Struktur

 

Hallo zusammen,


Hab schon mehrfach im Forum und in der Doku gesucht, finde aber nichts passendes …


ich habe eine Struktur in der Form:

Beispiel.Long.Var_1

Beispiel.Short.Var_1

 

Jetzt würde ich gerne in einer Schleife im ersten Durchlauf die Long-Variable ändern (hier Beispiel.Long.Var_1), in einem zweiten Schleifendurchlauf die Short-Variablen (hier Beispiel.Short.Var_1).

Natürlich will ich den Code jetzt nicht einfach kopieren und Long durch Short ersetzen.


Welchen Befehl verwendet man in MQL5 am besten, dass ich beim ersten Schleifendurchlauf den string „Long“ und beim zweiten Schleifendurchlauf den string „Short“ verwenden kann, um die Variable Var_1 in der Struktur zu verändern?

 

Ganz einfach: struct schreiben im Editor, Cursor 'draufstellen und die Zaubertaste drücken: F1

Du kannst auch mal probieren, schreib: struct

und wenn der kleine Pfeil kommt drück die Tabulatortaste ;)

 
Carl Schreiber:

Ganz einfach: struct schreiben im Editor, Cursor 'draufstellen und die Zaubertaste drücken: F1

Du kannst auch mal probieren, schreib: struct

und wenn der kleine Pfeil kommt drück die Tabulatortaste ;)

Ja die F1 Taste kenn ich inzwischen ganz gut ;)

Bringt mich aber in diesem Fall nicht weiter.


Vielleicht habe ich mich auch zu undeutlich ausgedrückt.


Ich will nicht direkt über Beispiel.Long.Var_1 den Wert von Var_1 ändern.

Sondern ein string definieren, der beim 1.Schleifendurchlauf "Long", beim 2.Schleifendurchlauf "Short" heißt.

Dann will ich im 1.Schleifendurchlauf alle Long-Variablen ändern --> Beispiel.string.Var_1

Danach im 2.Schleifendurchlauf alle Short-Variablen ändern, mit dem selben Quellcode (also Beispiel.string.Var_1) nur das jetzt der string = "Short" ist.

Kleine Ergänzung: Die Variablen (hier Var_1) sind vom Typ double.


Falls man das auch unter F1 findet, bin ich wohl blind ^^

 
Newcomer2019:

Ja die F1 Taste kenn ich inzwischen ganz gut ;)

Bringt mich aber in diesem Fall nicht weiter.


Vielleicht habe ich mich auch zu undeutlich ausgedrückt.


Ich will nicht direkt über Beispiel.Long.Var_1 den Wert von Var_1 ändern.

Sondern ein string definieren, der beim 1.Schleifendurchlauf "Long", beim 2.Schleifendurchlauf "Short" heißt.

Dann will ich im 1.Schleifendurchlauf alle Long-Variablen ändern --> Beispiel.string.Var_1

Danach im 2.Schleifendurchlauf alle Short-Variablen ändern, mit dem selben Quellcode (also Beispiel.string.Var_1) nur das jetzt der string = "Short" ist.

Kleine Ergänzung: Die Variablen (hier Var_1) sind vom Typ double.


Falls man das auch unter F1 findet, bin ich wohl blind ^^

Was bringt das? Warum änderst du nicht alle in einer scheife?

 

In der Struktur Long & Short befinden sich viele Variablen, nicht nur Var_1.


Ich könnte sie alle ändern, indem ich sie alle aufzähle:

Beispiel.Long.Var_1 = 1;

Beispiel.Long.Var_2 = 2;

...

Beispiel.Short.Var_1 = 3;

Beispiel.Short.Var_2 = 4;

...

Aber das wäre ziemlich aufwendig.


Daher will ich in der ersten Schleife eine Art "dynmischen string", der im ersten Durchlauf "Long" heißt, im zweiten Durchlauf "Short".

In einer zweiten Schleife habe ich einen weiteren string, der im ersten Durchlauf "Var_1" heißt, im zweiten Durchlauf "Var_2" usw.


Damit hätte ich mit nur einer Codezeile (z.B.  Beispiel.string_1.string_2) Zugriff auf alle Elemente in der Struktur.

Ich kenn das so Matlab und fand es ziemlich praktisch.

Mir ist jedoch nicht klar ob und wenn ja wie das in MQL5 funktioniert.

 
  1. Kriegst Du keine Fehlmeldung wegen: Beispiel.Short.Var_1 ??
  2. Noch(?) gibt es keine Funktion, mit der alle Werte einer Struktur auf einmal initialisiert werden kann, es muss also einzeln geschehen!
  3. Das bring etwas Ersparnis:  a.v1 = a.v2 = a.v3 = ... = 42; (Sinn des Lebens)
  4. Alternativ könnte man mehrere Arrays verwenden und dann ArrayFill() oder ArrayInitialize() verwenden.
 
Carl Schreiber:
  1. Kriegst Du keine Fehlmeldung wegen: Beispiel.Short.Var_1 ??
  2. Noch(?) gibt es keine Funktion, mit der alle Werte einer Struktur auf einmal initialisiert werden kann, es muss also einzeln geschehen!
  3. Das bring etwas Ersparnis:  a.v1 = a.v2 = a.v3 = ... = 42; (Sinn des Lebens)
  4. Alternativ könnte man mehrere Arrays verwenden und dann ArrayFill() oder ArrayInitialize() verwenden.

Hi,

dann geht das was ich meine in MQL5 einfach nicht.

Dann kann ich natürlich lange suchen ;).


1. Nein, ich bekomme keine Fehlermeldung.

2. O.k., danke für die Info. Es geht mir aber gar nicht ums initialisieren, obwohl das auch eine Anwendung dafür wäre.

    Damit könnte ich mir allgemein einiges an Programmierarbeit ersparen.

3. Ist auch nicht schlecht...

4. Ja das benutze ich inzwischen auch, danke ;)

Grund der Beschwerde: