Если вы не будете принудительно назначать числовые значения элементам перечисления (судя по примеру - не будете), то можно сделать, например, так:
// Объявляем перечислениеenum ENUM_NAME {
ENAME_1,
ENAME_JSDF,
ENAME_ERT,
ENAME_QWERTY,
ENAME_FEF
};
// Обявляем константу, хранящую количество элементов перечисления#define ENUM_NAME_SIZE 5// Массив для хранения элементов перечисления
ENUM_NAME E_NAME[ENUM_NAME_SIZE];
intOnInit() {
// Заполняем массив значениями, преобразуя к типу ENUM_NAMEfor(int i = 0; i < ENUM_NAME_SIZE; i++) {
E_NAME[i] = (ENUM_NAME) i;
}
// Пользуемся массивомArrayPrint(E_NAME);
for(int i = 0; i < ENUM_NAME_SIZE; i++) {
Print(EnumToString(E_NAME[i]));
}
return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason) {}
В этом случае вам понадобится при добавлении элементов в перечисление изменять еще и константу, хранящую количество элементов.
И еще, префикс ENUM_ лучше использовать только для названия самого перечисления, а для его элементов использовать какой-то другой префикс. Такое соглашение используется во всех стандартных перечислениях MQL.
Если вы не будете принудительно назначать числовые значения элементам перечисления (судя по примеру - не будете), то можно сделать, например, так:
В этом случае вам понадобится при добавлении элементов в перечисление изменять еще и константу, хранящую количество элементов.
И еще, префикс ENUM_ лучше использовать только для названия самого перечисления, а для его элементов использовать какой-то другой префикс. Такое соглашение используется во всех стандартных перечислениях MQL.
Спасибо за помощью. Уже столько лет пользуюсь ENUM, что даже в голову не пришло почитать справку.
jeremy10p100 # : Здравствуйте и спасибо за ваш ответ. Я смог сделать скрипт, который соответствует моим ожиданиям, но, к сожалению, есть две ошибки, которые я не могу понять или исправить. Не могли бы вы знать, к кому обратиться за помощью? Это всего лишь две строки кода, которые регистрируются как ошибки после компиляции...
Вы можете создать вакансию фрилансера и выбирать из разработчиков, которые претендуют на вашу работу
Пытаюсь отправить json через WebRequest, сервер возвращает: "\u0022BTCUSD\u0022is not a valid bundle type for denormalization."
Т.е. ему не нравится кодировка кавычек \u0022. Перепробовал везде указывать все варианты кодировок и в headers и в StringToCharArray, ничего не помогает.
Из питона все улетает без проблем: response = requests.post(url, data=json.dumps(data), headers=headers) т.е. с сервером все ok
Переформулирую вопрос немного иначе. Можно ли оптимизатору дать команду в блоке OnInit при определенных условиях пропустить вариант тестирования/оптимизации.
input group "Входные настройки Стохастик"
input bool Stoch = false; // Стохастик включен/выключен
input int in_StochK = 14; // период основной линии K
input int in_StochD = 3; // период первичного сглаживания D
input int in_StochSlow = 3; // период окончательного сглаживания
int OnInit() {
if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0)))
{
// Некая команда, которая говорит, что такой вариант даже не стоит пробовать оптимизировать
}
}
Пробовал делать так, но это приводит к некорректным вариантам оптимизации.
if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0)))
{
Print("Такой вариант тестирования не имеет смысла");
return(INIT_FAILED);
}
Цель - чтобы при оптимизации я мог включить перебор вариантов 4-х параметров стохастика (Stoch, in_StochK, int in_StochD, int in_StochSlow).
При включенном стохастике (Stoch = true) оптимизатор перебирает переменные in_StochK, in_StochD, in_StochSlow. В этой части все работает корректно.
При выключенном стохастике (Stoch = false) оптимизатор все равно перебирает переменные in_StochK, in_StochD, in_StochSlow. А мне нужно сделать какую-то заглушку в коде, чтобы он их не перебирал, если Stoch = false.
Возможно, причина некорректной работы оптимизатора в этой неточности в коде:
Причина не в этом. Код сделал для примера логики работы. Полная версия кода слишком большая - много разных осцилляторов. При оптимизации хочу добиться - чтобы оптимизатор пробовал разные комбинации (включен один осциллятор, включено два осциллятора, три и т.п.).
- При использовании данной заглушки оптимизатор быстро завершает работу с малым число проходок, хотя их должно быть огромное количество.
- Без использования такой ограничения оптимизатор работает лучше, но выдает множество пустых вариантов (на пример выше - при выключенном Стохастике все равно перебирает его параметры). Бог с ними с пустыми вариантами, но это и лишнее время на оптимизацию, и пустые проходки вместо полезных.
Вы используете генетическую или полную оптимизацию?
Я тоже использовал подобный подход для исключения заведомо ненужных комбинаций параметров и не заметил некорректной работы оптимизатора. Наоборот, оптимизатор работал именно так, как ожидалось.
Можно попробовать добавить сохранение пропускаемых комбинаций параметров в БД или общий файл, чтобы проверить, сколько и какие действительно пропускаются и разобраться в причинах.
Здравствуйте, @pivomoe
Если вы не будете принудительно назначать числовые значения элементам перечисления (судя по примеру - не будете), то можно сделать, например, так:
В этом случае вам понадобится при добавлении элементов в перечисление изменять еще и константу, хранящую количество элементов.
И еще, префикс ENUM_ лучше использовать только для названия самого перечисления, а для его элементов использовать какой-то другой префикс. Такое соглашение используется во всех стандартных перечислениях MQL.
Здравствуйте, @pivomoe
Если вы не будете принудительно назначать числовые значения элементам перечисления (судя по примеру - не будете), то можно сделать, например, так:
В этом случае вам понадобится при добавлении элементов в перечисление изменять еще и константу, хранящую количество элементов.
И еще, префикс ENUM_ лучше использовать только для названия самого перечисления, а для его элементов использовать какой-то другой префикс. Такое соглашение используется во всех стандартных перечислениях MQL.
Спасибо за помощью. Уже столько лет пользуюсь ENUM, что даже в голову не пришло почитать справку.
Здравствуйте и спасибо за ваш ответ. Я смог сделать скрипт, который соответствует моим ожиданиям, но, к сожалению, есть две ошибки, которые я не могу понять или исправить. Не могли бы вы знать, к кому обратиться за помощью? Это всего лишь две строки кода, которые регистрируются как ошибки после компиляции...
Вы можете создать вакансию фрилансера и выбирать из разработчиков, которые претендуют на вашу работу
https://www.mql5.com/fr/job
Пытаюсь отправить json через WebRequest, сервер возвращает: "\u0022BTCUSD\u0022 is not a valid bundle type for denormalization."
Т.е. ему не нравится кодировка кавычек \u0022.
Перепробовал везде указывать все варианты кодировок и в headers и в StringToCharArray, ничего не помогает.
Из питона все улетает без проблем:
response = requests.post(url, data=json.dumps(data), headers=headers)
т.е. с сервером все ok
Как решить проблему?
Переформулирую вопрос немного иначе. Можно ли оптимизатору дать команду в блоке OnInit при определенных условиях пропустить вариант тестирования/оптимизации.
Пробовал делать так, но это приводит к некорректным вариантам оптимизации.
if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0))) { Print("Такой вариант тестирования не имеет смысла"); return(INIT_FAILED); }Цель - чтобы при оптимизации я мог включить перебор вариантов 4-х параметров стохастика (Stoch, in_StochK, int in_StochD, int in_StochSlow).
Здравствуйте, @taramortom.
Скорее всего, вам поможет просто заменить
на
Здравствуйте, @taramortom.
Скорее всего вам поможет просто заменить
на
Возможно, причина некорректной работы оптимизатора в этой неточности в коде:
Возможно, причина некорректной работы оптимизатора в этой неточности в коде:
Причина не в этом. Код сделал для примера логики работы. Полная версия кода слишком большая - много разных осцилляторов. При оптимизации хочу добиться - чтобы оптимизатор пробовал разные комбинации (включен один осциллятор, включено два осциллятора, три и т.п.).
- При использовании данной заглушки оптимизатор быстро завершает работу с малым число проходок, хотя их должно быть огромное количество.
- Без использования такой ограничения оптимизатор работает лучше, но выдает множество пустых вариантов (на пример выше - при выключенном Стохастике все равно перебирает его параметры). Бог с ними с пустыми вариантами, но это и лишнее время на оптимизацию, и пустые проходки вместо полезных.