fxsaber: TickSize на MIX равен 25, Digits - 0. Нормализация целочисленный цены, не кратной 25, вызовет ошибку OrderSend.
Ну, с такой логикой и в случае шага 0.25 нормализация выдавала бы ошибку. Задача нормализации не в том, чтобы подогнать цену до какого-то экзотического шага цены, а в округлении числа с плавающей точкой до заданной точности. Ни к каким ошибкам это не приводит.
Sergei Vladimirov: Ну, с такой логикой и в случае шага 0.25 нормализация выдавала бы ошибку. Задача нормализации не в том, чтобы подогнать цену до какого-то экзотического шага цены, а в округлении числа с плавающей точкой до заданной точности. Ни к каким ошибкам это не приводит.
Нормализация изначально вводилась только для одного (и это в справке упоминается) - для торговых функций.
Наверно нужно ввести две функции: 1 - возвращает количество элементов в перечислении, 2 - возвращает элемент по номеру...
В enum можно присваивать элементам любые значения, например, как ниже. enum - это не массив.
enum crazy
{
e1 = 100500,
e2 = -200,
e3 = -100500,
e4 = 0
};
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
int z10 = e2;
int z1 = e4;
}
Языки типа C# требуют указания имени enum, а С++ и следовательно MQL4/5 довольно вольно обращаются с enum. На всякий случай проверил, на MQL5 этот бред компилируется, как и на С++
#define ENUM_QQ \
ENUM_QQ_HELPER(el_1, 3) \
ENUM_QQ_HELPER(el_2, 9) \
ENUM_QQ_HELPER(el_3, 38) \
ENUM_QQ_HELPER(el_4, 1)
enum Enum_qq
{
#define ENUM_QQ_HELPER(el, val) el = val,
ENUM_QQ
#undef ENUM_QQ_HELPER
};
void get_enumqq_array(int &ar[])
{
int temp[] = {
#define ENUM_QQ_HELPER(el, val) el,
ENUM_QQ
#undef ENUM_QQ_HELPER
};
ArrayResize(ar, ArraySize(temp));
for(int i = 0; i < ArraySize(temp); ++i)
ar[i] = temp[i];
}
voidOnStart()
{
int q[];
get_enumqq_array(q);
for(int i = 0; i < ArraySize(q); ++i)
Alert(q[i]);
}
Теперь если нам надо редактировать перечисление, то мы редактируем один раз и в одном месте. Надо добавить новый элемент, например element_new = 56, добавляем
ENUM_QQ_HELPER(element_new , 56)
И не паримся о правки функции get_enumqq_array(). Техника называется X Macro https://en.wikipedia.org/wiki/X_Macro. При желании разработчиков, легко можно допилить стандартные перечисления подобным образом.
Может не очевидно сразу, перечисление получилось таким:
Допустим, имеем перечисление. Как последовательно, например в цикле, получить все возможные значения этого перечисления?
Т.е. tf1++ должно последовательно возвращать PERIOD_M1, PERIOD_M2, PERIOD_M5... Думаю, что средствами языка это сделать нельзя.
не испробовано, но по идее если есть ENUM_MYENUM то (ENUM_MYENUM)INT_MAX должен давать максимальное значение из энума. Иначе это БАГ приведения типов. Просто из соображений что оператор приведения к типу (type) обязан возвращать значение этого самого типа.. Не обязательно валидное в контексте, но допустимое для типа.
С чего вдруг?
TickSize на MIX равен 25, Digits - 0. Нормализация целочисленный цены, не кратной 25, вызовет ошибку OrderSend.
Как раз только что в соседней ветке советовал утопить комп в ванне, тогда все будет дискредитировано еще сильнее.
TickSize на MIX равен 25, Digits - 0. Нормализация целочисленный цены, не кратной 25, вызовет ошибку OrderSend.
Ну, с такой логикой и в случае шага 0.25 нормализация выдавала бы ошибку. Задача нормализации не в том, чтобы подогнать цену до какого-то экзотического шага цены, а в округлении числа с плавающей точкой до заданной точности. Ни к каким ошибкам это не приводит.
Наверно нужно ввести две функции: 1 - возвращает количество элементов в перечислении, 2 - возвращает элемент по номеру...
В enum можно присваивать элементам любые значения, например, как ниже. enum - это не массив.
Языки типа C# требуют указания имени enum, а С++ и следовательно MQL4/5 довольно вольно обращаются с enum. На всякий случай проверил, на MQL5 этот бред компилируется, как и на С++
В enum можно присваивать элементам любые значения, например, как ниже. enum - это не массив.
И что с того? Речь шла о том, чтобы перебрать эти элементы в порядке объявления.
На заметку программистам:
Теперь если нам надо редактировать перечисление, то мы редактируем один раз и в одном месте. Надо добавить новый элемент, например element_new = 56, добавляем
ENUM_QQ_HELPER(element_new , 56)И не паримся о правки функции get_enumqq_array(). Техника называется X Macro https://en.wikipedia.org/wiki/X_Macro. При желании разработчиков, легко можно допилить стандартные перечисления подобным образом.
Может не очевидно сразу, перечисление получилось таким:
Допустим, имеем перечисление. Как последовательно, например в цикле, получить все возможные значения этого перечисления?
Т.е. tf1++ должно последовательно возвращать PERIOD_M1, PERIOD_M2, PERIOD_M5... Думаю, что средствами языка это сделать нельзя.