Теория ускорения работы советника при использовании пользовательского индикатора (функция - iCustom) - страница 4
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я понял, проблема выдуманная.
Когда столкнетесь с реальными тормозами индикаторов в реальном проекте, я буду готов продолжить дискуссию.
Печальный факт для пятерки, а разработчики не поясняют сакральный смысл сего?
Видимо, дело в архитектуре. Я не интересовался.
Обсуждение смежной темы было здесь - https://www.mql5.com/ru/forum/8278
Топикстартер лезет в дебри, не разобравшись с азами работы с индикаторами... а ведь инфа есть в открытом доступе (статьи + Документация).
Отсюда масса неправильных вопросов и догадок...
Ещё ссылка на индикатор, который создан с помощью OpenCL. Нагрузка идёт на видеокарту.
Правда, чтобы получить сравнительную скорость расчёта, задача должна быть действительно "тяжёлой"...
МТ4, кстати, прекрасно справляется с расчетом только части истории и не съедает память под весь буфер, если цикл идет по последним 1000 барам (даже если "в окне" - 50000).
А вот в МТ5 я с этой проблемой столкнулся - память выделяется под все 50000 баров, даже если считать только последние 100.
Вы уверены в этом?
В обоих платформах индикаторные буферы выделяются автоматически и одинаково для всей наличной истории баров.
Вы уверены в этом?
В обоих платформах индикаторные буферы выделяются автоматически и одинаково для всей наличной истории баров.
Последние пол года не проверял, но одинаковый индикатор с отрисовкой 1000 баров в МТ4 и МТ5 кушал сильно разное кол-во памяти (при отображении большого кол-ва баров в окне).
Сейчас засомневался. Может, это проблема с кэшем для объектов, которую мы обсуждали тут - https://www.mql5.com/ru/forum/8278?
Вы уверены в этом?
В обоих платформах индикаторные буферы выделяются автоматически и одинаково для всей наличной истории баров.
Столкнулся с проблемой в MT4 - есть скрипт, задача которого накладывать на график индикатор, собирать данные с его буфера и делать математический расчет и анализ.
Работа скрипта с вшитыми индикаторами безупречна, но вот дела с индикаторами, вызываемые через iCustom, обстоят не столь хорошо - память, выделенная под терминал (максимум), быстро заканчивается, в результате чего скрипт начинает получать от индикатора нулевые значения буфера. Есть ли возможность принудительно отчищать ОЗУ в момент удаления с графика индикатора или после повторного его вызова, но с другими параметрами, через iCustom)?
Столкнулся с проблемой в MT4 - есть скрипт, задача которого накладывать на график индикатор, собирать данные с его буфера и делать математический расчет и анализ.
Работа скрипта с вшитыми индикаторами безупречна, но вот дела с индикаторами, вызываемые через iCustom, обстоят не столь хорошо - память, выделенная под терминал (максимум), быстро заканчивается, в результате чего скрипт начинает получать от индикатора нулевые значения буфера. Есть ли возможность принудительно отчищать ОЗУ в момент удаления с графика индикатора или после повторного его вызова, но с другими параметрами, через iCustom)?
А сколько именно iCustom с разными параметрами вы создали?
Если десятки и сотни (похоже, так и есть), то ничего в рамках внешних индикаторов сделать нельзя. Только вшивать внутрь своего эксперта как расчетную единицу, не потребляющую память.
В MetaTrader 5 есть полный контроль над всеми запрашиваемыми индикаторами, но и там игра "создам и удалю сотни индикаторов" чревата серьезными расходами.
А сколько именно iCustom с разными параметрами вы создали?
Если десятки и сотни (похоже, так и есть), то ничего в рамках внешних индикаторов сделать нельзя. Только вшивать внутрь своего эксперта как расчетную единицу, не потребляющую память.
В MetaTrader 5 есть полный контроль над всеми запрашиваемыми индикаторами, но и там игра "создам и удалю сотни индикаторов" чревата серьезными расходами.
Индикатор создается один, потом меняются его параметры. В самом индикаторе используется функция iCustom с запросом данных на другом индикаторе - так было легче сделать.
Если считать все запросы в этой связке, то получится примерно 7 буферов.
Другие индикаторы с функцией iCustom, но попроще, скрипт со скрипом перемалывает... всего наложений в районе десяти тысяч. Текущий индикатор загибается на шестом десятке проходов.
Я понимаю, что память кончается, но если мы уже старые данные не используем, то почему не происходит корректного заполнения новыми данными?
Почему в MT4 нет функции удаления индикатора из памяти, это очень сложно реализовать?
Если количество копий индикаторов велико, то интегрируйте в эксперта. Другого выхода нет.
Речь сейчас не о советнике, а о скрипте! Скрипт анализирует индикатор. Есть ли в связи с этим решение по освобождению памяти? Если обучить скрипт закрывать и открывать чарт через несколько проходов (изменения параметров индикатора и их анализа), то позволит ли это очистить память?
Зачем в советнике создавать индикатор, который потом нужно удалять, тем более не один?
Включите в код советника функцию, которая сделает расчет, аналогичный расчету индикатора. В этой функции легко можно менять параметры для расчета и перерасхода памяти не будет. Да и расчет на всех барах, который как я понял Вам не нужен, можно будет избежать. И функция iCustom() Вам просто не понадобится.
Как раз мне нужны все бары за период. Работает скрипт - он универсален для анализа индикаторов определенного типа - писать под каждый индикатор скрипт - дорого. Вот если бы компилятор (по определенной команде) засовывал индикаторы в советники/скрипты/индикаторы, то жизнь другая началась! Эх, мечты...