Теория ускорения работы советника при использовании пользовательского индикатора (функция - iCustom) - страница 4

 
-Aleks-:

Я понял, проблема выдуманная.

Когда столкнетесь с реальными тормозами индикаторов в реальном проекте, я буду готов продолжить дискуссию. 

 
-Aleks-:

Печальный факт для пятерки, а разработчики не поясняют сакральный смысл сего?

Видимо, дело в архитектуре. Я не интересовался.

Обсуждение смежной темы было здесь - https://www.mql5.com/ru/forum/8278 

Потребление памяти терминалом
Потребление памяти терминалом
  • www.mql5.com
Для чистоты эксперимента установил голый МТ5 в новую папку, открыл демо-счет на сервере MQ, закрыл все графики, установил "макс. - - Категория: общее обсуждение
 

Топикстартер лезет в дебри, не разобравшись с азами работы с индикаторами... а ведь инфа есть в открытом доступе (статьи + Документация).

Отсюда масса неправильных вопросов и догадок...

Ещё ссылка на индикатор, который создан с помощью OpenCL. Нагрузка идёт на видеокарту.

Правда, чтобы получить сравнительную скорость расчёта, задача должна быть действительно "тяжёлой"...

 
komposter:

МТ4, кстати, прекрасно справляется с расчетом только части истории и не съедает память под весь буфер, если цикл идет по последним 1000 барам (даже если "в окне" - 50000).

А вот в МТ5 я с этой проблемой столкнулся - память выделяется под все 50000 баров, даже если считать только последние 100. 

Вы уверены в этом?

В обоих платформах индикаторные буферы выделяются автоматически и одинаково для всей наличной истории баров.

 
Renat:

Вы уверены в этом?

В обоих платформах индикаторные буферы выделяются автоматически и одинаково для всей наличной истории баров.

Последние пол года не проверял, но одинаковый индикатор с отрисовкой 1000 баров в МТ4 и МТ5 кушал сильно разное кол-во памяти (при отображении большого кол-ва баров в окне).

Сейчас засомневался. Может, это проблема с кэшем для объектов, которую мы обсуждали тут - https://www.mql5.com/ru/forum/8278?

Потребление памяти терминалом
Потребление памяти терминалом
  • www.mql5.com
Для чистоты эксперимента установил голый МТ5 в новую папку, открыл демо-счет на сервере MQ, закрыл все графики, установил "макс. - - Категория: общее обсуждение
 
Renat Fatkhullin:

Вы уверены в этом?

В обоих платформах индикаторные буферы выделяются автоматически и одинаково для всей наличной истории баров.

Столкнулся с проблемой в MT4 - есть скрипт, задача которого накладывать на график индикатор, собирать данные с его буфера и делать математический расчет и анализ.

Работа скрипта с вшитыми индикаторами безупречна, но вот дела с индикаторами, вызываемые через iCustom, обстоят не столь хорошо - память, выделенная под терминал (максимум), быстро заканчивается, в результате чего скрипт начинает получать от индикатора нулевые значения буфера. Есть ли возможность принудительно отчищать ОЗУ в момент удаления с графика индикатора или после повторного его вызова, но с другими параметрами, через iCustom)?

 
-Aleks-:

Столкнулся с проблемой в MT4 - есть скрипт, задача которого накладывать на график индикатор, собирать данные с его буфера и делать математический расчет и анализ.

Работа скрипта с вшитыми индикаторами безупречна, но вот дела с индикаторами, вызываемые через iCustom, обстоят не столь хорошо - память, выделенная под терминал (максимум), быстро заканчивается, в результате чего скрипт начинает получать от индикатора нулевые значения буфера. Есть ли возможность принудительно отчищать ОЗУ в момент удаления с графика индикатора или после повторного его вызова, но с другими параметрами, через iCustom)?

А сколько именно iCustom с разными параметрами вы создали?

Если десятки и сотни (похоже, так и есть), то ничего в рамках внешних индикаторов сделать нельзя. Только вшивать внутрь своего эксперта как расчетную единицу, не потребляющую память.

В MetaTrader 5 есть полный контроль над всеми запрашиваемыми индикаторами, но и там игра "создам и удалю сотни индикаторов" чревата серьезными расходами.

 
Renat Fatkhullin:

А сколько именно iCustom с разными параметрами вы создали?

Если десятки и сотни (похоже, так и есть), то ничего в рамках внешних индикаторов сделать нельзя. Только вшивать внутрь своего эксперта как расчетную единицу, не потребляющую память.

В MetaTrader 5 есть полный контроль над всеми запрашиваемыми индикаторами, но и там игра "создам и удалю сотни индикаторов" чревата серьезными расходами.

Индикатор создается один, потом меняются его параметры. В самом индикаторе используется функция iCustom с запросом данных на другом индикаторе - так было легче сделать.
Если считать все запросы в этой связке, то получится примерно 7 буферов.
Другие индикаторы с функцией iCustom, но попроще, скрипт со скрипом перемалывает... всего наложений в районе десяти тысяч. Текущий индикатор загибается на шестом десятке проходов.
Я понимаю, что память кончается, но если мы уже старые данные не используем, то почему не происходит корректного заполнения новыми данными?

Почему в MT4 нет функции удаления индикатора из памяти, это очень сложно реализовать? 

 
Если количество копий индикаторов велико, то интегрируйте в эксперта. Другого выхода нет.
 
Renat Fatkhullin:
Если количество копий индикаторов велико, то интегрируйте в эксперта. Другого выхода нет.

Речь сейчас не о советнике, а о скрипте! Скрипт анализирует индикатор. Есть ли в связи с этим решение по освобождению памяти? Если обучить скрипт закрывать и открывать чарт через несколько проходов (изменения параметров индикатора и их анализа), то позволит ли это очистить память?

 

Alexander Laur:

Зачем в советнике создавать индикатор, который потом нужно удалять, тем более не один?

Включите в код советника функцию, которая сделает расчет, аналогичный расчету индикатора. В этой функции легко можно менять параметры для расчета и перерасхода памяти не будет. Да и расчет на всех барах, который как я понял Вам не нужен, можно будет избежать. И функция iCustom() Вам просто не понадобится.

Как раз мне нужны все бары за период. Работает скрипт - он универсален для анализа индикаторов определенного типа - писать под каждый индикатор скрипт - дорого. Вот если бы компилятор (по определенной команде) засовывал индикаторы в советники/скрипты/индикаторы, то жизнь другая началась! Эх, мечты...