что происходит при вызове iCustom (МТ4)

 

Не вижу (как всегда пока не спрошу) чтоб кто-то поднимал тему. 

Интересует какие именно процессы запускаются при вызове в мт4. 

Например, в мт5 это будет хэндл индикатора, т.е. индикатор будет работать (пересчитываться и все дела) пока его не удалят IndicatorRelease. Причем, сталкивалась с тем, что работать то с одним индикатором то с другим, постоянно их удаляя - плохая идея т.к. в тестере не работает IndicatorRelease что ведет неминуемой "гибели" (виснякам).  В процессе работы можно достать буффера. 

В мт4 не поняла - это индикатор добавляется и потом пересчитывается (живет своей жизнью) или, склоняюсь ко второму, индикатор просто один раз считается, выдает значение и больше не занимает память и процесс?

Еще проще говоря - если захочется совом перебрать разные настройки индикатора, с целью выбора лучших, т.е. очень много вызовов iCustom сделать чтоб найти лучшее решение, то потом индюки будут подвешивать советник?

Впрочем, скоро пойду еще эксперимент сделаю 

 
Galina Bobro:

Не вижу (как всегда пока не спрошу) чтоб кто-то поднимал тему. 

Интересует какие именно процессы запускаются при вызове в мт4. 

Например, в мт5 это будет хэндл индикатора, т.е. индикатор будет работать (пересчитываться и все дела) пока его не удалят IndicatorRelease. Причем, сталкивалась с тем, что работать то с одним индикатором то с другим, постоянно их удаляя - плохая идея т.к. в тестере не работает IndicatorRelease что ведет неминуемой "гибели" (виснякам).  В процессе работы можно достать буффера. 

В мт4 не поняла - это индикатор добавляется и потом пересчитывается (живет своей жизнью) или, склоняюсь ко второму, индикатор просто один раз считается, выдает значение и больше не занимает память и процесс?

Еще проще говоря - если захочется совом перебрать разные настройки индикатора, с целью выбора лучших, т.е. очень много вызовов iCustom сделать чтоб найти лучшее решение, то потом индюки будут подвешивать советник?

Впрочем, скоро пойду еще эксперимент сделаю 


Индикатор рассчитывается и выгружается при каждом вызове  (iCustom,  iМА, другие штатные, неважно). Но это если правильно передавать параметры. Если же передать вводные неправильно, то индикаторы с прошлых вызовов зависают в памяти и жрут её.

 
Vitalie Postolache:

Индикатор рассчитывается и выгружается при каждом вызове  (iCustom,  iМА, другие штатные, неважно). Но это если правильно передавать параметры. Если же передать вводные неправильно, то индикаторы с прошлых вызовов зависают в памяти и жрут её.


Спасибо большое.

А неправильно это как? critical error нужен или  INIT_FAILED, или еще чего-то. 

 
Galina Bobro:

Спасибо большое.

А неправильно это как? critical error нужен или  INIT_FAILED, или еще чего-то. 


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

 
Vitalie Postolache:

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


понятно, спасибо. особенно за подводные камни, спасибо

 
Vitalie Postolache:

Индикатор рассчитывается и выгружается при каждом вызове  (iCustom,  iМА, другие штатные, неважно). Но это если правильно передавать параметры. Если же передать вводные неправильно, то индикаторы с прошлых вызовов зависают в памяти и жрут её.

Вряд ли это так. Можете выводить в лог что-нть из инита, и что-нть из деинита для проверки. Скорее всего экземпляр индикатора с конкретным набором параметров остается в памяти какое-то время и выгружается только по предопределенному таймауту или когда становится туго с памятью.

 
Stanislav Korotky:

Вряд ли это так. Можете выводить в лог что-нть из инита, и что-нть из деинита. Скорее всего экземпляр индикатора с конкретным набором параметров остается в памяти какое-то время и выгружается только по предопределенному таймауту или когда становится туго с памятью.


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

Это было легко заметить при тестировании советника с индикатором в отдельном подокне графика, когда после теста открываешь график, а там всё белое от открывшихся копий окон индикатора. Именно из-за неправильно переданных параметров при вызове  iCustom.

Не знаю, как с этим сейчас, проверять нет времени.

PS:   В общем, проверил, всё так же, советник что-то от балды торгует, а индикаторы накапливаются от каждого вызова, до предела, дозволенного терминалом (отжирает примерно 250 Мб ОЗУ), потом тест зависает.


 
Vitalie Postolache:

Индикатор рассчитывается и выгружается при каждом вызове  (iCustom,  iМА, другие штатные, неважно). Но это если правильно передавать параметры. Если же передать вводные неправильно, то индикаторы с прошлых вызовов зависают в памяти и жрут её.


Какой бред!

 

в мт4 только первый вызов индикатора (любого) жрёт ресурсы, все последующий вызовы того же индикатора с теми же параметрами, ресурсов на расчёт не тратят (можно менять только сдвиг и используемый буфер) - тоесть вызванный индикатор и все его буферы висят в памяти до конца выполнения программы

 

Что такое uninit reason 9? При вызове iCustom.

 
igorbel:

Что такое uninit reason 9? При вызове iCustom.


Как понимаю, гугл не в моде - https://docs.mql4.com/ru/constants/namedconstants/uninit