int TF(int i) { switch(i) { case 1: return(PERIOD_M1); case 2: return(PERIOD_M5); case 3: return(PERIOD_M15); case 4: return(PERIOD_M30); case 5: return(PERIOD_H1); case 6: return(PERIOD_H4); case 7: return(PERIOD_D1); case 8: return(PERIOD_W1); case 9: return(PERIOD_MN1); } }
Dies ist nicht möglich, da der Periodenwert nicht um eins erhöht wird. Sie müssen Ihren eigenen Aufzählungsindex wie folgt organisieren
- www.mql5.com
Wenn es nur so einfach wäre. Die Werte sind nicht gleichmäßig verteilt. Nehmen wir an, PERIOD_H1 ist 60 und die nächste Periode PERIOD_H2 ist 120.
Wahrscheinlich gibt es zwei Funktionen, die eingegeben werden müssen: 1 - gibt die Anzahl der Elemente in der Aufzählung zurück, 2 - gibt das Element nach Nummer zurück...
Wahrscheinlich gibt es zwei Funktionen, die eingegeben werden müssen: 1 - gibt die Anzahl der Elemente in der Aufzählung zurück, 2 - gibt das Element nach Nummer zurück...
Wenn es nur so einfach wäre. Die Werte sind nicht gleichmäßig verteilt. Nehmen wir an, PERIOD_H1 ist 60 und die nächste Periode PERIOD_H2 ist 120.
Der Punkt ist, dass die Aufzählung eine vordefinierte Sache ist und alle ihre Werte eingesehen werden können,
Deshalb riet Ihnen der geschätzte sergey1294 , die Umrechnungstabelle in einen seriellen Aufruf zu beschreiben,
Wenn sich der Wert um 1 erhöht, wird der nächste Aufzählungswert in der Liste aufgerufen.
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i);
Lassen Sie uns nun abschätzen, wie viele Aufzählungen es gibt und wie viele Enumerator-Funktionen es geben sollte (eine für jede Aufzählung).
Im Allgemeinen gibt es nur eine Lösung. Schreiben Sie für jede Aufzählung eine spezielle Enumerator-Funktion. Zum Beispiel für Timeframes: Schätzen wir nun, wie viele Aufzählungen es insgesamt gibt und wie viele Enumerator-Funktionen es geben sollte (eine für jede Aufzählung).
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i) { switch(i) { case 0 return(PERIOD_M1); case 1 return(PERIOD_M2); case 2 return(PERIOD_M3); case 3 return(PERIOD_M4); case 4 return(PERIOD_M5); case 5 return(PERIOD_M6); case 6 return(PERIOD_M10); case 7 return(PERIOD_M12); case 8 return(PERIOD_M15); case 9 return(PERIOD_M20); case 10 return(PERIOD_M30); case 11 return(PERIOD_H1); case 12 return(PERIOD_H2); case 13 return(PERIOD_H3); case 14 return(PERIOD_H4); case 15 return(PERIOD_H6); case 16 return(PERIOD_H8); case 17 return(PERIOD_H12); case 18 return(PERIOD_D1); case 19 return(PERIOD_W1); case 20 return(PERIOD_MN1); } return(-1); }
Im MT5 gibt es insgesamt 21 Zeitrahmen. Die endgültige Variante sieht wie folgt aus
- www.mql5.com
Im Allgemeinen gibt es zwei Möglichkeiten der Aufzählung
Zuerst eine Funktion verwenden, ich habe vergessen, einen Doppelpunkt in meinem letzten Beitrag zu setzen
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i) { switch(i) { case 0: return(PERIOD_M1); case 1: return(PERIOD_M2); case 2: return(PERIOD_M3); case 3: return(PERIOD_M4); case 4: return(PERIOD_M5); case 5: return(PERIOD_M6); case 6: return(PERIOD_M10); case 7: return(PERIOD_M12); case 8: return(PERIOD_M15); case 9: return(PERIOD_M20); case 10: return(PERIOD_M30); case 11: return(PERIOD_H1); case 12: return(PERIOD_H2); case 13: return(PERIOD_H3); case 14: return(PERIOD_H4); case 15: return(PERIOD_H6); case 16: return(PERIOD_H8); case 17: return(PERIOD_H12); case 18: return(PERIOD_D1); case 19: return(PERIOD_W1); case 20: return(PERIOD_MN1); } return(-1); }Die zweite Möglichkeit ist die Verwendung eines Arrays
ENUM_TIMEFRAMES GetPeriodEnumerator[21]= { PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6, PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1, PERIOD_H2, PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12, PERIOD_D1, PERIOD_W1, PERIOD_MN1 };
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Nehmen wir an, wir haben eine Aufzählung. Wie können wir alle möglichen Werte dieser Aufzählung nacheinander abrufen, z. B. in einer Schleife?
ENUM_TIMEFRAMES tf1;
D.h. tf1++ muss nacheinander PERIOD_M1, PERIOD_M2, PERIOD_M5... zurückgeben. Ich denke, dass dies mit den Sprachwerkzeugen nicht möglich ist.