Как получить следущее значение ENUM ?

 

например

ENUM_TIMEFRAMES x = PERIOD_H1;

как получить в переменной x значение PERIOD_M30, PERIOD_H4, PERIOD_D1 ? 

 
Вроде уже не не 1-е апреля.
 
Dmitry Fedoseev:
Вроде уже не не 1-е апреля.

А причем здесь 1-е апреля?

Я реально не знаю как получить следующее/предыдущее значение из перечисления - это вообще возможно?

Могу создать массив переменных со значением из типа перечисления и перебирать их. Но мы же не ищем легких путей. 

 
Теперь понятно, в чем задача. Вроде никак. Делать свой массив.
 
Sergey Deev:
 

Могу создать массив переменных со значением из типа перечисления и перебирать их. Но мы же не ищем легких путей. 

А что есть другие варианты ?

У меня прямо сделана функция GetNextTimeframe(), в которой через switch() выдается более высокий таймфрейм. В качестве бонуса - имею  не просто следующий таймфрейм (в МТ5 их довольно много), а "наиболее удобный следующий" (который сам считаю удобным)

 
Sergey Deev:

например

ENUM_TIMEFRAMES x = PERIOD_H1;

как получить в переменной x значение PERIOD_M30, PERIOD_H4, PERIOD_D1 ? 

p зависит от задачи как вы это хотите это использовать, вариантов реализации может быть множество.

 
Sergey Gritsay:

p зависит от задачи как вы это хотите это использовать, вариантов реализации может быть множество.

назовите хоть один без массива или простого перебора типа:

ENUM_TIMEFRAMES GetNextTimeframe(ENUM_TIMEFRAMES x)  {

switch (x) { 

case PERIOD_M30: return(PERIOD_H1);

case PERIOD_H1: return(PERIOD_H4);

}

return(x); 

 

Для топикстартера - кстати, есть функция EnumToString. Думаю, пригодится в ваших разработках.

 
Igor Konyashin:

Для топикстартера - кстати, есть функция EnumToString. Думаю, пригодится в ваших разработках.

Я вкурсе. Но что мне даст то, что я вместо 60 получу строку 'PERIOD_H1' ?
 
Sergey Deev:

назовите хоть один без массива или простого перебора типа:

ENUM_TIMEFRAMES GetNextTimeframe(ENUM_TIMEFRAMES x)  {

switch (x) { 

case PERIOD_M30: return(PERIOD_H1);

case PERIOD_H1: return(PERIOD_H4);

}

return(x); 

А чем вариант с массивом не подходит? Создаёте массив и сразу инициализируете его всеми доступными таймфреймами. Порядок расположения не важен - так как такой массив отлично сортируется.

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property script_show_inputs
ENUM_TIMEFRAMES x[5]={PERIOD_M10,PERIOD_H3,PERIOD_M2,PERIOD_H1,PERIOD_H6};
//+------------------------------------------------------------------+
//| Start                                                            |
//+------------------------------------------------------------------+ 
void OnStart()
  {
   for(int i=0;i<ArraySize(x);i++)
      PrintPeriod(x[i]);
   Print("ArraySort");
   ArraySort(x);
   for(int i=0;i<ArraySize(x);i++)
      PrintPeriod(x[i]);
  }
//+------------------------------------------------------------------+
void PrintPeriod(const ENUM_TIMEFRAMES  &period)
  {
   Print(period);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

А чем вариант с массивом не подходит? Создаёте массив и сразу инициализируете его всеми доступными таймфреймами. Порядок расположения не важен - так как такой массив отлично сортируется.

Вариант с массивом указан выше. С реализацией его понятно.

Причина обращения: