Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
в советнике в обход необходимости ввода значений для каждого индикатора.
Альтернативой в его бэктестере является ручное редактирование каждого индикатора
с помощью буфера сигналов.
Попробуйте этот немного прямолинейный, но пока единственный возможный подход.
Выходные данные:
ENUM элементов:
Count=3
0 x1=-10
1 x2=0
2 x3=11
Важно указать разумные значения для параметровstart иstop, так как цикл от минимального до максимального целочисленного значения (который используется по умолчанию, когда параметры пропущены) выполняется слишком медленно, учитывая, что внутри используются строковые функции.
bool AddEnum(ENUMTYPE enumIn) {
enumIn = 0;
//iterate through enum and add as combo box
for(int i = 0; i<sizeof(enumIn); i++, enumIn++) {
m_list.AddItem(EnumToString(enumIn),i);
PrintFormat("adding %i = %s", i, EnumToString(enumIn));
}
return(0);
}
Я добавил это в класс CComboBox, так что я могу передать любой тип ENUM, и он добавит его как комбобокс.
Но вы можете изменить его, чтобы сделать то, что вам нужно.
Проблема в том, что если вы не передадите ENUM и передадите что-то вроде double или float, вы можете завалить свое приложение.
Я не думаю, что есть способ проверить переданный тип данных.
bool AddEnum(ENUMTYPE enumIn) {
enumIn = 0;
//iterate through enum and add as combo box
for(int i = 0; i<sizeof(enumIn); i++, enumIn++) {
m_list.AddItem(EnumToString(enumIn),i);
PrintFormat("adding %i = %s", i, EnumToString(enumIn));
}
return(0);
}
Я добавил это в класс CComboBox, так что я могу передать любой тип ENUM, и он добавит его как комбобокс.
Но вы можете изменить его, чтобы сделать то, что вам нужно.
Проблема в том, что если вы не передадите ENUM и передадите что-то вроде double или float, вы можете завалить свое приложение.
Я не думаю, что есть способ проверить переданный тип данных.
Да, так и есть, упс. Я только что заметил это.
Просто так получилось, что когда я создавал это, ENUM, который я использовал, на самом деле имел 4 свойства:\
enum Combolist1{item1, item2, item3, item4, item5};
for(int i = 0; GetLastError()==0; i++) {Например, есть определение перечисления:
enum ENUM_FRUIT {APPLE, BANANA, GRAPE};
Далее, я хочу использовать его в цикле:
FRUIT_FIRST=APPLE, FRUIT_LAST=GRAPE};
for (ENUM_FRUIT i = APPLE; i <= FRUIT_LAST; ++i) {
Print(EnumToString(i));
}
#define FRUIT_FIRST APPLE
#define FRUIT_LAST GRAPE
for (ENUM_FRUIT i = APPLE; i <= FRUIT_LAST; ++i) {
Print(EnumToString(i));
}
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};
ENUM_TIMEFRAMES next(ENUM_TIMEFRAMES curr){
for(int i=0; gcPeriods[i] != curr; ++i){}
return gcPeriods[i+1];
}
Плохой дизайн чего
это означает количество членов в перечислении?
Я знаю, что этот разговор довольно старый, но вот простой способ заполнить массив любого типа enum.
Просто добавляю свое решение для будущих поколений о том, как я решил эту проблему.
Итак, проблема заключается в том, чтобы знать количество записей в перечислении динамически с возможностью добавлять или удалять значения перечисления. Мне нужно знать это для создания массивов фиксированного размера со значениями перечисления в качестве индекса массива. Я обычно добавляю зарезервированное значение в конец перечисления, которое используется только как значение длины. Вот пример.
Это удобно и просто, потому что вам не нужно привязываться к последней записи повсюду, как, например, в примереИли вы можете добавить больше записей в конец перечисления, и массив и цикл все равно будут работать.