array out of range при оптимизации в значениях индикатора - страница 2

 
Vladimir Karputov:
Перечитайте свой первый пост. Поймёте, что Вы спросили о чём-то , но ничего прт этом не сказали.
Здесь технический форум - хотите ответ: правильно задайте вопрос.

Пока не зададите правильно вопрос - будут ответы в стиле Ванги.

Ок В моем понимании - правильный вопрос, но это субъективно. Я попробую попросить вставить в ответ пропущенные слова

"Проблема с динамическим массивом (в части "выхода за его пределы") не всегда возникает при одиночном тестировании, но обязательно возникнет в случае оптимизации если... В примере кода видно, что массив используется в структуре, далее в него пишутся значения индикатора (последние 10), потом происходит сортировка этих значений, но это не решит проблемы, ошибка будет возникать потому что нет ... и надо использовать функцию ... " Лучше?

PS  функция CopyBuffer() старается распределить размер принимающего массива под размер копируемых данных (c) 

PSS не возникает проблем относительно размера массива при использовании его в copybuffer Может ли это быть следствием того, что просто не пишутся никакие данные по какой-то причине в него и он пустой и кол-во элементов 0? Но почему он не пустой при тестировании? Может даже риторическое

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
VVT:

Раззадорило Ваше телепатическое общение с Модератором )

Попытайтесь сами разобраться array out of range line 15, col 51 https://www.mql5.com/ru/docs/series/copybuffer

Я полагаю, что именно copybuffer Но как-то выборочно - только при оптимизации. И вот кажется решение уже рядом. Индюков несколько и грузятся их параметры из БД - агентов 48 (ядер). Выходит, что тупо не успевают получить значения - прогрузиться (при одиночном - один агент и все происходит быстрее, а в 48 тормозит и не успевает за тиком)? 

 
Покажите как вычисляете data[0]
 
Artem Mordvinkin:

Ок В моем понимании - правильный вопрос, но это субъективно. Я попробую попросить вставить в ответ пропущенные слова

"Проблема с динамическим массивом (в части "выхода за его пределы") не всегда возникает при одиночном тестировании, но обязательно возникнет в случае оптимизации если... В примере кода видно, что массив используется в структуре, далее в него пишутся значения индикатора (последние 10), потом происходит сортировка этих значений, но это не решит проблемы, ошибка будет возникать потому что нет ... и надо использовать функцию ... " Лучше?

В Вашем вопросе "выхода за его пределы" есть ответ -> увеличьте пределы и не усложняйте жизнь )

 
VVT:

В Вашем вопросе "выхода за его пределы" есть ответ -> увеличьте пределы и не усложняйте жизнь )

Пределы задает copybuffer (ну как бы в теории если я правильно понимаю) Ну и на всякий - делал я ресайз и на 11 элементов - не решило задачу. Проблема в том, что нет в нем ничего по какой-то причине (это пока догадка) он уже [0] выходом за пределы При тестировании есть, при оптимизации - нет

 
Dmitry Fedoseev:
Покажите как вычисляете data[0]

Если правильно понимаю вопрос

// копируем значения индикаторов 
CopyBuffer((int)Envelopes_handle[instr_arr[id_instrument], period_arr[i]],0,0,10,Envelopes_up[instr_arr[id_instrument], period_arr[i]].data);
CopyBuffer((int)Envelopes_handle[instr_arr[id_instrument], period_arr[i]],1,0,10,Envelopes_low[instr_arr[id_instrument], period_arr[i]].data);

//сортируем
ArraySetAsSeries(Envelopes_up[instr_arr[id_instrument], period_arr[i]].data,true);
ArraySetAsSeries(Envelopes_low[instr_arr[id_instrument], period_arr[i]].data,true);
 
Artem Mordvinkin:

Пределы задает copybuffer (ну как бы в теории если я правильно понимаю) Ну и на всякий - делал я ресайз и на 11 элементов - не решило задачу. Проблема в том, что нет в нем ничего по какой-то причине (это пока догадка) При тестировании есть, при оптимизации - нет

Пределы задаете Вы а copybuffer выполняет 

Dmitry Fedoseev:
Покажите как вычисляете data[0]

Похоже что проблема в этом

 
VVT:

Пределы задаете Вы а copybuffer выполняет 

Похоже что проблема в этом

функция CopyBuffer() старается распределить размер принимающего массива под размер копируемых данных (c) 

Это из документации

 
Такая проблемка у меня возникла, когда я захотел совершенства - универсальности. Сделал структуры, универсальные многомерные массивы,  чтобы удобнее было работать с БД, да и в целом код порезать (ранее под каждый инструмент и тайм фрейм был динамический массив и ничего не сбоило)
 

Ну вот - шах и мат Часть локальных агентов успевают схватить котировки и наполнить массив Но большая часть вываливается в аут из-за скорости. Не в массивах дело и не в коде, а в процедуре. Теперь (поскольку я с таким не сталкивался, а хочется решить задачку как можно быстрее, уж простите - не лень, а оптимизация времени). Кто подскажет: как в случае отсутствия значений индикатора в массиве (из-за того что они не успевают прогрузится к первому тику) не вываливать ошибку размерности массива (ибо в таком случае он пустой - 0 членов после copybuffer), а вернуть сову снова в стадию получения данных?  


Причина обращения: