так делать нельзя так как значение периодов не увеличивается на единицу, нужно организовать свой собственный индекс перечисления, примерно так
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:
так делать нельзя так как значение периодов не увеличивается на единицу, нужно организовать свой собственный индекс перечисления, примерно так
Если бы все было так просто. Значения распределены не равномерно. Допустим PERIOD_H1 это 60, а следующий период PERIOD_H2 это уже 120.
так делать нельзя так как значение периодов не увеличивается на единицу, нужно организовать свой собственный индекс перечисления, примерно так
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
- www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
Interesting:
все верно, в МТ4 я так и делал
Наверно нужно ввести две функции: 1 - возвращает количество элементов в перечислении, 2 - возвращает элемент по номеру...
C-4:
Если бы все было так просто. Значения распределены не равномерно. Допустим PERIOD_H1 это 60, а следующий период PERIOD_H2 это уже 120.
Если бы все было так просто. Значения распределены не равномерно. Допустим PERIOD_H1 это 60, а следующий период PERIOD_H2 это уже 120.
Суть в том что перечисление вещь предопределённая и все её значения можно посмотреть,
поэтому уважаемый sergey1294 вам и посоветовал описать таблицу перевода в последовательный вызов,
где при увеличении значения на 1 происходит вызов следующего по списку значения перечисления.
В общем решение одно. На каждое перечисление писать специальную функцию Enumerator. Например для Timeframes:
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i);
Теперь прикинем, сколько всего есть перечислений и сколько тогда должно быть функций конверторов (по одной на каждое перечисление).
C-4:
В общем решение одно. На каждое перечисление писать специальную функцию Enumerator. Например для Timeframes: Теперь прикинем, сколько всего есть перечислений и сколько тогда должно быть функций конверторов (по одной на каждое перечисление).
всего в МТ5 21 таймфрейм. Окончательный вариант будет выглядеть такВ общем решение одно. На каждое перечисление писать специальную функцию Enumerator. Например для Timeframes: Теперь прикинем, сколько всего есть перечислений и сколько тогда должно быть функций конверторов (по одной на каждое перечисление).
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:
всего в МТ5 21 таймфрейм. Окончательный вариант будет выглядеть так
Осталось сделать тоже самое для остальных стандартных нумераторов (идентификаторов) + если что еще и пользовательские вещи не забыть...
всего в МТ5 21 таймфрейм. Окончательный вариант будет выглядеть так
еще есть один вариант, записать значения таймфреймов в массив и перебирать этот массив, получая необходимое значения.
Документация по MQL5: Предопределенные переменные / _Period
- www.mql5.com
Предопределенные переменные / _Period - Документация по MQL5
В общем есть два варианта перечисления
первый с помощью функции, забыл в прошлом посте проставить двоеточие
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); }Второй вариант с помощью массива
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 };
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Допустим, имеем перечисление. Как последовательно, например в цикле, получить все возможные значения этого перечисления?
ENUM_TIMEFRAMES tf1;
Т.е. tf1++ должно последовательно возвращать PERIOD_M1, PERIOD_M2, PERIOD_M5... Думаю, что средствами языка это сделать нельзя.