Вопрос к разработчикам - как сделать виртуальный буфер в индикаторе ? - страница 2

 

Зарезервировать много памяти, чтобы потом только увеличивать индекс последнего элемента.
Например, можно зарезервировать 250 000 double- элементов. По памяти это всего 20 мегабайт.
Хотя и 100 000 элементов, наверно, хватит за глаза.

 
Почти уверен что знание как это устроено изнутри вам вообще никак не поможет. А все что нужно выше уже есть.
 
excelf:
Вообщем хочется сделать средствами языка, сделать буферы аналогичные индикаторным.


Мне как-то раз тоже буферов не хватало.... Хотелось чтобы после загрузки терминала с индикатором ранее посчитанные данные не пересчитывались.. Пробовала создать вместо недостающего буфера массив глобальных переменных. .. - как-то не вышло.. А потом подумала - на кой черт это нужно? Скорость работы советника такая фишка не увеличит ни как ( хотя..., нет.. смотря что..). А 8 буферов более чем достаточно... -а остальное считать в операционном режиме. (я к тому же не программер)

Зачем делать сложным...то что проще простого.....?))

 
excelf:
В вашем варианте, Bars будет меняться каждый раз когда приходит новый бар. И что вы будете на каждом новом баре ArrayResize делать ?
Чем это вам помешало, не пойму. Динамические массивы не перераспределяются при каждом ArrayResize, память выделяется блоками по мере необходимости. А как по-вашему работают вообще индикаторные буферы? Вот было 100 баров на графике, пришло еще 10, размер массива же надо менять?
 
alsu:
Чем это вам помешало, не пойму. Динамические массивы не перераспределяются при каждом ArrayResize, память выделяется блоками по мере необходимости. А как по-вашему работают вообще индикаторные буферы? Вот было 100 баров на графике, пришло еще 10, размер массива же надо менять?
Этот код отлажен, и какого-либо заметного замедления в работу индикаторов не вносит, но можете посчитать время непосредственно, если уж так это критично.
 
alsu:
Чем это вам помешало, не пойму. Динамические массивы не перераспределяются при каждом ArrayResize, память выделяется блоками по мере необходимости. А как по-вашему работают вообще индикаторные буферы? Вот было 100 баров на графике, пришло еще 10, размер массива же надо менять?

Не-а :) В-смысле: не надо ничего менять. Их как было 100, так 100 и останется.
 
tara:

Не-а :) В-смысле: не надо ничего менять. Их как было 100, так 100 и останется.
Это как же? Вы рассчитываете индикатор на всех 110 барах, значит размер буфера - минимум 110, но уж никак не 100
 
alsu:
Чем это вам помешало, не пойму. Динамические массивы не перераспределяются при каждом ArrayResize, память выделяется блоками по мере необходимости. А как по-вашему работают вообще индикаторные буферы? Вот было 100 баров на графике, пришло еще 10, размер массива же надо менять?

Не понятно как ArrayResize меняет размер. Копирует ли он каждый раз данные из массива в массив или нет? А вообще ваш вариант не плохой, возможно я им воспользуюсь, спасибо.
 
alsu:
Это как же? Вы рассчитываете индикатор на всех 110 барах, значит размер буфера - минимум 110, но уж никак не 100

Если говорим об МТ-стандартах, то в этом случае размер буфера не меняется. Было 100, 100 и останется.
 
alsu:
Ваш вариант по идее неправильно отрабатывает вставки истории.
Причина обращения: