Можно. Создать структуру, в ней массив. Этот массив будет буфером. Дальше создаем массив структур.
Dmitry Fedoseev:
Можно. Создать структуру, в ней массив. Этот массив будет буфером. Дальше создаем массив структур.
Да, или использовать двумерные массивы, где одно из измерений - номер буфера. Может работать чуть быстрее варианта со структурами.
Можно. Создать структуру, в ней массив. Этот массив будет буфером. Дальше создаем массив структур.
Alexey Volchanskiy:
Да, или использовать двумерные массивы, где одно из измерений - номер буфера. Может работать чуть быстрее варианта со структурами.
Продемонстрируйте на наглядном примере, пожалуйста.
Да, или использовать двумерные массивы, где одно из измерений - номер буфера. Может работать чуть быстрее варианта со структурами.
Dmitry Fedoseev:
Продемонстрируйте на наглядном примере, пожалуйста.
Продемонстрируйте на наглядном примере, пожалуйста.
Сорри, буфера-то индикаторные, не выйдет. Погорячился ))
А Ваш вариант типа такого?
//--- indicator buffers double Label1Buffer[]; double Label2Buffer[]; double Label3Buffer[]; struct SBuf { double buf[]; } strArr[3]; int OnInit() { SetIndexBuffer(0,strArr[0].buf); SetIndexBuffer(1,strArr[1].buf); SetIndexBuffer(2,strArr[2].buf); return(INIT_SUCCEEDED); }
Alexey Volchanskiy:
Да. Только не я изобретатель, в кодабазе видел.
...
А Ваш вариант типа такого?
Dmitry Fedoseev:
Можно. Создать структуру, в ней массив. Этот массив будет буфером. Дальше создаем массив структур.
Можно. Создать структуру, в ней массив. Этот массив будет буфером. Дальше создаем массив структур.
Сокращённый образец (для MT5)
struct BUFFERS { string s_Name; double da_Values[]; }; BUFFERS go_Currency_Buffers[], go_Symbol_Buffers[]; int OnInit() { // эта функция читает MarketWatch и готовит структуру буферов: Prepare_Currencies_Structure(Currencies_List, Market_Watch_Selected_Only); // отображаемые буфера: int i_Buffer_Num = gi_Currencies_Total; // gi_Currencies_Total - посчитано в Prepare_Currencies_Structure while(i_Buffer_Num-- > 0) { SetIndexBuffer(i_Buffer_Num, go_Currency_Buffers[i_Buffer_Num].da_Values, INDICATOR_DATA); PlotIndexSetString(i_Buffer_Num, PLOT_LABEL, go_Currency_Buffers[i_Buffer_Num].s_Name); PlotIndexSetDouble(i_Buffer_Num, PLOT_EMPTY_VALUE, EMPTY_VALUE); } // буфера для расчётов: i_Buffer_Num = gi_Currencies_Total + gi_Symbol_Buffers_Total; // gi_Symbol_Buffers_Total - посчитано в Prepare_Currencies_Structure while(i_Buffer_Num-- > gi_Currencies_Total) { SetIndexBuffer(i_Buffer_Num, go_Symbol_Buffers[i_Buffer_Num - gi_Currencies_Total].da_Values, INDICATOR_CALCULATIONS); PlotIndexSetDouble(i_Buffer_Num, PLOT_EMPTY_VALUE, 0.); } return(INIT_SUCCEEDED); }
Что неудобно - нельзя #property indicator_buffers менять динамически (в OnInit), поэтому приходиццо задавать с запасом
Alexander Puzanov:
Есть у меня в Projects проект Code Snippets. Пополнил вашим кодом. Кстати, советую всем так делать, а то готовые решения теряются, потом тратишь время, изобретая велосипеды.
Сокращённый образец (для MT5)
Что неудобно - нельзя #property indicator_buffers менять динамически (в OnInit), поэтому приходиццо задавать с запасом
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте,
делаю индикатор, в котором индикаторный буфер должен выбираться в цикле.
предварительно объявил
SetIndexBuffer(0,ind1);
SetIndexBuffer(1,ind2);
SetIndexBuffer(2,ind3);
....
SetIndexBuffer(19,ind20);
Далее нужно в цикле перебирать все эти буферы и заполнять нужными данными для отрисовки линий (их может быть от 1 до 20)
сейчас делаю перебор просто по имени буфера
ind1[i]=v[1];
ind2[i]=v[2];
ind20[i]=v[20]; ...
Код получается громоздким. Сейчас 20 буферов, а вдруг понадобится 100? ))
Нельзя ли и буферы перебирать в цикле
Что то вроде
for (int j=1; j<20;j++){
"ind"+j [i] = v[j]
}
В PHP есть конструкция $$var - где $var="ind" - название переменной, там легко можно прибавлять в цикле индекс $var="ind"+1, $var="ind"+2 ... в цикле. В итоге $var="ind1" или "ind2" и т.д.
И затем по $$var мы работаем с переменной по имени ind1 или ind2 и т.д.
Нельзя ли что-то подобное сделать на mql5?