Wie gehe ich eine Aufzählung konsequent durch?

 

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.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
können Sie dies nicht tun, da der Wert der Perioden nicht um eins zunimmt, Sie müssen Ihren eigenen Aufzählungsindex wie folgt organisieren
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);
 }
}
 
sergey1294:
Dies ist nicht möglich, da der Periodenwert nicht um eins erhöht wird. Sie müssen Ihren eigenen Aufzählungsindex wie folgt organisieren

Wenn es nur so einfach wäre. Die Werte sind nicht gleichmäßig verteilt. Angenommen, PERIOD_H1 ist 60 und die nächste Periode PERIOD_H2 ist 120.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
C-4:
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...

 
Interesting:

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...


Das ist richtig, das habe ich in MT4 gemacht.
 
C-4:
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.

 
Im Allgemeinen gibt es nur eine Lösung. Schreiben Sie eine spezielle Enumerator-Funktion für jede Aufzählung. Zum Beispiel für Timeframes:
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).
 
C-4:
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).
Im MT5 gibt es insgesamt 21 Zeitrahmen. Die endgültige Version wird wie folgt aussehen
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);
  }
 
sergey1294:
Im MT5 gibt es insgesamt 21 Zeitrahmen. Die endgültige Variante sieht wie folgt aus
Jetzt müssen wir das Gleiche für andere Standard-Zähler (Bezeichner) tun + wenn es einige benutzerdefinierte Dinge gibt, die nicht vergessen werden dürfen...
 
Eine andere Möglichkeit besteht darin, die Werte des Zeitrahmens in ein Array zu schreiben und das Array zu durchlaufen, um den gewünschten Wert zu erhalten.
Документация по MQL5: Предопределенные переменные / _Period
Документация по MQL5: Предопределенные переменные / _Period
  • www.mql5.com
Предопределенные переменные / _Period - Документация по MQL5
 

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
  };
Grund der Beschwerde: