Вам нужен массив объектов, размер которого варьирует в зависимости от количества input параметров, без модификации кода?
Вам нужен массив объектов, размер которого варьирует в зависимости от количества input параметров, без модификации кода?
input int line_value_1=1000; input int line_value_2=2500; input int line_value_3=5000; input int line_value_4=9000; input int line_value_5=3000; input int line_value_6=4500; input int line_value_7=7000; input int line_value_8=9500; TLine *lines[]; int OnInit() { //--- indicator buffers mapping ArrayResize(lines, 8); for(int i=0; i<8; i++) { lines[i]=new TLine(); lines[i].lineValue= line_value_+i //Вот тут!!! ? SetIndexBuffer(i,lines[i].dLine,INDICATOR_DATA); PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0); PlotIndexSetString(i,PLOT_LABEL,lines[i].label); PlotIndexSetInteger(i,PLOT_LINE_COLOR,lines[i].lineColor); }Конечно, это не критично, но приятно было бы иметь такую возможность... сейчас я руками загоняю все инпуты в массив, а потом с этим массивом уже работаю... короче масло масленное.
Не проще массив после инпутов добавить и присвоить им занести в него инпуты
int line_value_a[5]; line_value_m[0]=line_value_1; line_value_m[1]=line_value_2; // и т.д.
Я бы вот так сделал:
#define SEPARATOR '_' // Разделитель между элементами input строки input string input_line; class TLine { public: TLine(long val) {Alert(val);} }; void OnStart() { string res[]; StringSplit(input_line, SEPARATOR, res); // Интерпретируем res ка хотим. TLine *lines[]; ArrayResize(lines, ArraySize(res)); for(int i = 0; i < ArraySize(res); i++) lines[i] = new TLine( StringToInteger(res[i]) ); }
Но нужно помнить, что сепаратор это тоже число, поэтому можно попасть в нехорошую ситуацию. В принципе, если сепаратор это строка (набор символов), то вероятность мала, но с таким сепаратором: "_" - не работает.
Если разработчики читают: функция StringSplit() не работае корректно со строками.
StringSplit(input_line, "_", res); // Не работает
Может баг?
Не, не баг, функция принимает ushort, тогда можно написать свой анализатор.
На мой последний пост лучше не смотреть, я зря заговорил о проблемах. Вариант, предложенный мной вначале, нормальный и работоспособный, можно пользоваться и не волноваться.
Не проще массив после инпутов добавить и присвоить им занести в него инпуты
Я бы вот так сделал:
Я давно работаю с php и там есть такое понятие 'Переменные переменных'...
В MQL можно изменить только имя Глобальной переменной терминала (см. функции, начинающиеся с GlobalVariable).
А для вашей задачи уже 2 варианта предложили, кроме них - разве что чтение из файла.

- www.mql5.com
Помнится видел я какой-то старый язык, где можно было также создавать имена переменных. Очень удобно было.
Можно конечно с помощью массивов или глобальных переменных это имитировать. Но это неудобно.
Лучше напрямую. Ведь не будут это делать метаквоты.... А жаль.
Помнится видел я какой-то старый язык, где можно было также создавать имена переменных. Очень удобно было.
Можно конечно с помощью массивов или глобальных переменных это имитировать. Но это неудобно.
Лучше напрямую. Ведь не будут это делать метаквоты.... А жаль.
Жалеть не о чём.
Дорогая и нахрен не нужная фича.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Я давно работаю с php и там есть такое понятие 'Переменные переменных'...
Цитата: "Иногда бывает удобно иметь переменными имена переменных. То есть, имя переменной, которое может быть определено и изменено динамически."
Небольшой кусок кода для иллюстрации:
Смысл такой, что к переменной с именем s_1 я могу спокойно обратиться через "строку" в фигурных скобках или любое выражение формирующее эту строку... Так вот есть ли такая штука у могучего MQL5 ?
Поясню для чего, в индикаторе я принимаю 5 значений для линий, line_1, line_2...line_5, и вот мне на столько стало неудобно обрабатывать их в цикле, что цикл for вобще теряет свой смысл, что и заставило меня напечатать сей пост. На все мои попытки MQL5 чётко сказал, массивы и объекты в инпут параметрах не принимаю... :/
А если линий будет 100, мне весь код перепечатывать???