Как принудительно выгрузить индикатор?

 
Как принудительно выгрузить индикатор?
 
Как это понимать? Что Вы имели ввиду?
 

Вызываешь из эксперта индикатор с определенным набором параметров, он загружается в память, вызываешь опять этот индикатор с другим набором параметров, он тоже загружается в память и так для каждого уникального набора параметров. Могут быт случаи, когда какойто индикатор, или индикатор с определенным набором параметров может потребоваться только один раз, а память будет занята. О чень актуальна потребность в этом!!! Нужно что-нибудь подобное функци HideTestIndicator(), наприме UnloadLastIndicator(), которая будет выгружать последний из вызванных индикаторов.

 
Integer:

Вызываешь из эксперта индикатор с определенным набором параметров, он загружается в память, вызываешь опять этот индикатор с другим набором параметров, он тоже загружается в память и так для каждого уникального набора параметров. Могут быт случаи, когда какойто индикатор, или индикатор с определенным набором параметров может потребоваться только один раз, а память будет занята. О чень актуальна потребность в этом!!! Нужно что-нибудь подобное функци HideTestIndicator(), наприме UnloadLastIndicator(), которая будет выгружать последний из вызванных индикаторов.

А зачем это? Индикатор только один раз за все время работы эксперта будет вызываться или на каждом тике?

Если индикатор в эксперте не вызывается, то он даже не расчитывается и потребляет только память. Но вот если выгрузить его, а потом снова загружать через тик или два, то потери производительности будут катастрофическими. Первоначальная загрузка и первый полновесный пересчет индикатора - это очень дорогая операция.

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

Принудительно в MQL4 нельзя выгрузить никакую программу.

Но можно позволить программам общаться через GV-переменные. Например, эксперт может изменить значение GV-переменной, индикатор это значение считает и обнулит значения своих индикаторных массивов, в результате чего все индикаторные линии, например, отобразятся на нуле. При этом индикатор будет отавться в работе до тех пор, пока его не выгрузят вручную. Кроме того, само явление может произойти либо на текущем, либо на следующем тике,- в зависимости от того, будет ли обращение из индикатора к GV-переменной до того, как её успеет изменить эксперт или после.

 
По поводу инициализации я думал, что-то типа такого: ArrayInitialize(USD,0.0); и т.д.
Хочется сделать красиво. Время прошло и подокно  индикатора закрывается.
 
Renat:
Integer:

Вызываешь из эксперта индикатор с определенным набором параметров, он загружается в память, вызываешь опять этот индикатор с другим набором параметров, он тоже загружается в память и так для каждого уникального набора параметров. Могут быт случаи, когда какойто индикатор, или индикатор с определенным набором параметров может потребоваться только один раз, а память будет занята. О чень актуальна потребность в этом!!! Нужно что-нибудь подобное функци HideTestIndicator(), наприме UnloadLastIndicator(), которая будет выгружать последний из вызванных индикаторов.

А зачем это? Индикатор только один раз за все время работы эксперта будет вызываться или на каждом тике?

Если индикатор в эксперте не вызывается, то он даже не расчитывается и потребляет только память. Но вот если выгрузить его, а потом снова загружать через тик или два, то потери производительности будут катастрофическими. Первоначальная загрузка и первый полновесный пересчет индикатора - это очень дорогая операция.

Как решение - изначально планируйте и оптимизируйте схему использования индикаторов.


Выход из любой ситации всегда есть.

Из практики:

Случай первый - расчет трейлинга по индикатору уровней. Период индикатора меняется в зависимости от срока существования ордера. Срок существования ордера мог быть достаточно большим, а держать в памяти все индиаторы с период от 1 до N смысла нет (и комп не выдерживал). Было решено переносом расчета индиктора в эксперт. Выигрыш в производительности не был получен, так как сам индиктор просчитывался на количество баров не более требуемого периода. Объем работы был выполнен двойной - написание индикатора, что бы визуально убедиться (или убедить клиента) в правильной работе и перенос этого индиктора в экспепрта.

Случай второй - эксперт с автооптимизатором. Тоже решается переносом индикатора в эксперт. Тоже двойная работа - индикатор и перенос индикатора в эксперт. Если в индикаторе используется экспонециальное сглаживание, то это еще очень много лишней работы. MQL4 итак очень много времени требует на программирование стратегии. Есть еще одно неудобство - ограниченное количества параметров функции iCustom, но это уже другая тема.

ps. Все это не я придумал:-)

 
kharko:
По поводу инициализации я думал, что-то типа такого: ArrayInitialize(USD,0.0); и т.д.
Хочется сделать красиво. Время прошло и подокно индикатора закрывается.

А вот это зачем?
 
Например, ограничить срок использования индикатора/эксперта.
 
kharko:
Например, ограничить срок использования индикатора/эксперта.

Это решается имеющимися стредствам и очень просто. Лучше иметь возможноть открыть алертное окно со вставленным в него изображением, например фиги, это будет более эффектно.