Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай, как пользоваться виджетами на MQL5.community
Sergey Deev
90589
Sergey Deev 2016.04.13 04:33 

например

ENUM_TIMEFRAMES x = PERIOD_H1;

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

Dmitry Fedoseev
42924
Dmitry Fedoseev 2016.04.13 04:56  
Вроде уже не не 1-е апреля.
Sergey Deev
90589
Sergey Deev 2016.04.13 05:08  
Dmitry Fedoseev:
Вроде уже не не 1-е апреля.

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

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

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

Dmitry Fedoseev
42924
Dmitry Fedoseev 2016.04.13 05:10  
Теперь понятно, в чем задача. Вроде никак. Делать свой массив.
George Merts
3612
George Merts 2016.04.13 06:37  
Sergey Deev:
 

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

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

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

Sergey Gritsay
6479
Sergey Gritsay 2016.04.13 06:53  
Sergey Deev:

например

ENUM_TIMEFRAMES x = PERIOD_H1;

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

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

Sergey Deev
90589
Sergey Deev 2016.04.13 07:00  
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); 

Igor Konyashin
3111
Igor Konyashin 2016.04.13 07:04  

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

Sergey Deev
90589
Sergey Deev 2016.04.13 07:06  
Igor Konyashin:

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

Я вкурсе. Но что мне даст то, что я вместо 60 получу строку 'PERIOD_H1' ?
Vladimir Karputov
Модератор
46261
Vladimir Karputov 2016.04.13 07:39  
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);
  }
//+------------------------------------------------------------------+
Sergey Deev
90589
Sergey Deev 2016.04.13 08:09  
Karputov Vladimir:

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий