Особенности языка mql5, тонкости и приёмы работы - страница 131

 
fxsaber:

Освобождение памяти - единственная причина.

Какой именно памяти?  Если избыточной, то для этого достаточно reserve_size=-1, о чём уже было сказано.  Только там человек явно что-то напутал с замерами скорости (некорректные условия теста, я полагаю)

 

Заметил интересную возможность, которую назову индикаторной рекурсией.

Когда можно расчитывать индикатор из самого себя:

handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);  
for(int i=0;i<N;i++) handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);

Может любителям индикаторов пригодится...

Если вдруг эта тема уже была, то повторение -мать учения.

Для демонстрации этой фичи написал специально индикатор в КБ.

 
Nikolai Semko:

Заметил интересную возможность, которую назову индикаторной рекурсией.

Когда можно расчитывать индикатор из самого себя:

Может любителям индикаторов пригодится...

Если вдруг эта тема уже была, то повторение -мать учения.

Для демонстрации этой фичи написал специально индикатор в КБ.

Да... А я и не подумал что это какая-то особенность. Когда-то мне это понадобилось, я просто написал так, только сделал разные имена переменных для хендлов. Думал что все этим пользуются когда надо...

 
Alexey Viktorov:

Да... А я и не подумал что это какая-то особенность. Когда-то мне это понадобилось, я просто написал так, только сделал разные имена переменных для хендлов. Думал что все этим пользуются когда надо...

А я в цикл это поставить додумался только сейчас. Хоть 100 раз можно размножать индикатор, а хэндл при этом только один. 

 
Nikolai Semko:

А я в цикл это поставить додумался только сейчас. Хоть 100 раз можно размножать индикатор, а хэндл при этом только один. 

Это не хэндл один, а переменная у вас одна. Значения предыдущих хэндлов вы потеряли. А закрывать их как?

 
Alexey Navoykov:

Это не хэндл один, а переменная у вас одна. Значения предыдущих хэндлов вы потеряли. А закрывать их как?

да уж... 

Память кушает прилично. Неужели только сменой ТФ можно освободить уже не нужные внутренние индикаторные буферы. ))

ArrayFree же здесь никак не прикрутить.

 
Nikolai Semko:Неужели только сменой ТФ можно освободить уже не нужные внутренние индикаторные буферы. ))

ArrayFree же здесь никак не прикрутить.

смена ТФ создает новую копию индикатора, а старую уничтожает

 
Igor Makanu:

смена ТФ создает новую копию индикатора, а старую уничтожает

ну это понятно. 

Просто я посмотрел использование памяти при загрузки по максимальным параметрам моего индикатора(ползунки вправо до края). С 50 Мб память увеличилась где-то до 400 Мб. Но когда я вернул индикатор на минимум (ползунки влево), то память так и осталась висеть 400 Mb.

Значит все расчитанные 100 индикаторов висят в памяти, хотя они уже не используются.
Смена ТФ ее очищает.

 
Nikolai Semko:

ну это понятно. 

Просто я посмотрел использование памяти при загрузки по максимальным параметрам моего индикатора(ползунки вправо до края). С 50 Мб память увеличилась где-то до 400 Мб. Но когда я вернул индикатор на минимум (ползунки влево), то память так и осталась висеть 400 Mb.

Значит все расчитанные 100 индикаторов висят в памяти, хотя они уже не используются.
Смена ТФ ее очищает.

оберните в класс рассчет индикатора -  буфера привяжите к полям класса

 
Igor Makanu:

оберните в класс рассчет индикатора -  буфера привяжите к полям класса

Да, надо попробовать. Спасибо. 
Причина обращения: