Sıralı olarak bir numaralandırma üzerinde yineleme nasıl yapılır?

 

Diyelim ki bir numaralandırmamız var. Sıralı olarak, örneğin bir döngüde, bu numaralandırmanın tüm olası değerleri nasıl alınır?

 ENUM_TIMEFRAMES tf1;

Onlar. tf1++ sürekli olarak PERIOD_M1 , PERIOD_M2 , PERIOD_M5 döndürmelidir... Bunun dil araçları kullanılarak yapılamayacağını düşünüyorum.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
Bunu yapamazsınız, periyotların değeri birer birer artmadığı için kendi numaralandırma indeksinizi düzenlemeniz gerekir, bunun gibi bir şey
 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 :
Bunu yapamazsınız çünkü periyotların değeri birer birer artmaz, kendi numaralandırma indeksinizi düzenlemeniz gerekir, bunun gibi bir şey

Keşke her şey bu kadar basit olsaydı. Değerler eşit olarak dağılmamıştır. Diyelim ki PERIOD_H1 60 ve sonraki PERIOD_H2 periyodu zaten 120.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
C-4 :
Keşke her şey bu kadar basit olsaydı. Değerler eşit dağılmamıştır. Diyelim ki PERIOD_H1 60 ve sonraki PERIOD_H2 periyodu zaten 120.

Muhtemelen iki işlevi tanıtmanız gerekir: 1 - numaralandırmadaki öğelerin sayısını döndürür, 2 - öğeyi sayıya göre döndürür ...

 
Interesting :

Muhtemelen iki işlevi tanıtmanız gerekir: 1 - numaralandırmadaki öğelerin sayısını döndürür, 2 - öğeyi sayıya göre döndürür ...


bu doğru, MT4'te tam olarak bunu yaptım
 
C-4 :
Keşke her şey bu kadar basit olsaydı. Değerler eşit dağılmamıştır. Diyelim ki PERIOD_H1 60 ve sonraki PERIOD_H2 periyodu zaten 120.

Sonuç olarak, numaralandırma önceden tanımlanmış bir şeydir ve tüm değerleri görüntülenebilir,

bu nedenle sevgili sergey1294 , çeviri tablosunu seri bir çağrıya açıklamanızı tavsiye etti,

burada değer 1 artırıldığında, listedeki bir sonraki numaralandırma değeri çağrılır.

 
Genel olarak, tek bir çözüm var. Her numaralandırma için özel bir Numaralandırıcı işlevi yazın. Örneğin Zaman Çerçeveleri için:
 ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i);
Şimdi kaç tane numaralandırma olduğunu ve orada kaç tane dönüştürücü işlevi olması gerektiğini (her numaralandırma için bir tane) tahmin edelim.
 
C-4 :
Genel olarak, tek bir çözüm var. Her numaralandırma için özel bir Numaralandırıcı işlevi yazın. Örneğin Zaman Çerçeveleri için: Şimdi kaç tane numaralandırma olduğunu ve orada kaç tane dönüştürücü işlevi olması gerektiğini (her numaralandırma için bir tane) tahmin edelim.
MT5'te 21 zaman dilimi vardır. Son sürüm böyle görünecek
 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 :
MT5'te 21 zaman dilimi vardır. Son sürüm böyle görünecek
Standart numaralandırıcıların (tanımlayıcıların) geri kalanı için aynı şeyi yapmaya devam ediyor + başka bir şey varsa, özel şeyleri unutmayın ...
 
başka bir seçenek daha var, zaman aralığı değerlerini bir diziye yazıp bu diziyi yineleyerek gerekli değerleri elde edin.
Документация по MQL5: Предопределенные переменные / _Period
Документация по MQL5: Предопределенные переменные / _Period
  • www.mql5.com
Предопределенные переменные / _Period - Документация по MQL5
 

Genel olarak iki seçenek var

bir işlevi kullanan ilki, son gönderiye iki nokta üst üste koymayı unuttum

 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 );
  }
Bir dizi kullanarak ikinci seçenek
 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
  };
Neden: