Число буферов в индикаторе - страница 2

 
alsu писал(а) >>
наперегонки:)))

Но тормоза наверно были жуткие

 
не было. Движок MQL по сути те же действия производит со встроенными буферами.
 
alsu >>:
не было. Движок MQL по сути те же действия производит со встроенными буферами.

Только по сути.

 
alsu >>:
не было. Движок MQL по сути те же действия производит со встроенными буферами.

Ресайз приходится делать. Некий тормоз все-таки появляется. Но ма-а-аленький. Впрочем, на оптимизации заметен. С Integer это как-то обсуждалось в "Когда не хватает индикаторных массивов".

 
Насколько я понимаю логику метаквотов, резайз не всегда приводит к перераспределению памяти. Она выделяется блоками, поэтому реальный размер выделенного пространства как правило больше того, что содержится в ArraySize. Насколько часто будет подтормаживать, зависит от размер блока
 
Svinozavr >>:

Ресайз приходится делать. Некий тормоз все-таки появляется. Но ма-а-аленький. Впрочем, на оптимизации заметен. С Integer это как-то обсуждалось в "Когда не хватает индикаторных массивов".

там в первом посте

ArraySetAsSeries(E0,0); // установка прямого порядка индексирования
   ArrayResize(E0,NewSize); // установка длины массива равной кол-ву загруженных баров
   ArraySetAsSeries(E0,1); // установка обратного порядка индексирования
это совсем необязательно, достаточно один раз ArraySetAsSeries(E0,1), а в функции оставить только ArrayResize(E0,NewSize)
 
alsu >>:

там в первом посте

? Хорошо, давайте по порядку. Когда делается ресайз на увеличение длины, то добавляется пустая ячейка со старшим номером. А нужно, чтобы добавилась пустая ячейка с нулевым номером, причем старые значения сдвинулись вглубь.

Т.е. вы хотите сказать, что в индексном массиве добавляется пустая 0-я ячейка???

 
Svinozavr >>:

? Хорошо, давайте по порядку. Когда делается ресайз на увеличение длины, то добавляется пустая ячейка со старшим номером. А нужно, чтобы добавилась пустая ячейка с нулевым номером, причем старые значения сдвинулись вглубь.

Т.е. вы хотите сказать, что в индексном массиве добавляется пустая 0-я ячейка???

если он адресуется как Series, то да. функция ArraySetAsSeries не изменяет внутреннего расположения данных, она только "разворачивает" их адресацию. Оператор [] это не то же самое, что в с++, он не просто берет значение по такому-то смещению, а сначала проверяет, в каком порядке адресуется массив и при необходимости вычисляет новый индекс. Я недавно, когда статью писАл, этот вопрос исследовал.

 
можно считать, что индекс массива в MQL - это "псевдоним" настоящего индекса. Если адресация обычная, то они совпадают, если обратная - то i_MQL=ArraySize-1-i_real
 
ну вот пример: когда новый бар в терминал приходит, новая ячейка же имеет 0 номер. А если посмотреть на underlying data, то увидим, что на самом деле она - последняя в массиве.
Причина обращения: