![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Делал свой график на канвасе, со своей панелью таймфреймов. Так вот, при частом переключении резко возрастала оперативная память. Это происходит из-за запроса данных с чужих таймфреймов. Если долго не обращаться(не переключаться), памать выгружается. Может быть причина в этом.
ps: опишу поподробнее: на дополнительном графике-канвасе стоит 5-ти минутный фрейм. Нажал кнопку переключения на 15 мин - оперативка увеличилась примерно на 80 кб. Обратно на 5 или другой фрейм еще примерно на столько же. Итак, играясь переключением таймфремов можно было выжрать всю память. И выгружалась она не через 2-3 минуты, а по разному то 10, то 20 минут, а то и больше. Как я сказал выше это происходит из-за запроса данных с чужих таймфреймов. По идеи думал - скопировал данные в массив, использовал, удалил. Фиг вам, терминал сам решает когда удалять. Так, что если ваш эксперт использует запросы данных с других фреймов может быть причина в этом.
Делал свой график на канвасе, со своей панелью таймфреймов. Так вот, при частом переключении резко возрастала оперативная память. Это происходит из-за запроса данных с чужих таймфреймов. Если долго не обращаться(не переключаться), памать выгружается. Может быть причина в этом.
ps: опишу поподробнее: на дополнительном графике-канвасе стоит 5-ти минутный фрейм. Нажал кнопку переключения на 15 мин - оперативка увеличилась примерно на 80 кб. Обратно на 5 или другой фрейм еще примерно на столько же. Итак, играясь переключением таймфремов можно было выжрать всю память. И выгружалась она не через 2-3 минуты, а по разному то 10, то 20 минут, а то и больше. Как я сказал выше это происходит из-за запроса данных с чужих таймфреймов. По идеи думал - скопировал данные в массив, использовал, удалил. Фиг вам, терминал сам решает когда удалять. Так, что если ваш эксперт использует запросы данных с других фреймов может быть причина в этом.
Сам по себе запрос данных с других ТФ к разрастанию памяти приводить не должен.
Если у вас есть воспроизводимый пример, напишите в сервис-деск, разберутся и исправят.
Сам по себе запрос данных с других ТФ к разрастанию памяти приводить не должен.
Если у вас есть воспроизводимый пример, напишите в сервис-деск, разберутся и исправят.
Это было давно. Но, помню когда локализовывал проблему, оставлял только CopyRates и две кнопки и все было так как я описал выше. Просто сейчас 5-ку не использую, как только ввели в 4-ку ООП и канвас спрыгнул обратно.
Просто - любая оптимизация на MT4 по времени рядом не может стоять против МТ5.
OS на VPS какая?
Разобрался.
Использовал для работы нескольких экспертов на одном инструменте готовый класс из статьи "ИСПОЛЬЗОВАНИЕ ORDER_MAGIC ДЛЯ ТОРГОВЛИ РАЗНЫМИ ЭКСПЕРТАМИ НА ОДНОМ ИНСТРУМЕНТЕ"
Вот при вызове метода расчёта позиции он и отжирает за раз у меня в терминале около 180Мб на эксперт. А вызовы у меня идут в OnTradeTransaction после каждого входа-выхода в позицию. Метод класса грузит ВСЮ историю, вида if(HistorySelect(0,TimeCurrent())). Почему память не освобождается - не знаю, мне знаний не хватает корректно определить.
Для тестов поменял определение позиции на стандартное PositionSelect(), с ним всё ровно, никакого лишнего расхода памяти.
Теперь буду пытаться или изменить или смотреть в сторону аналогичного решения от Дмитрия Федосеева.
Или может у кого готовое решение есть?
Хм, изменил код в классе, при загрузке истории началом указываю время запуска эксперта, то есть история очень короткая, даже без сделок при первом вызове.
Однако при этом первом вызове так же отжирает 180Мб ((
Буду думать дальше.
Хм, изменил код в классе, при загрузке истории началом указываю время запуска эксперта, то есть история очень короткая, даже без сделок при первом вызове.
Однако при этом первом вызове так же отжирает 180Мб ((
Буду думать дальше.
механизмом исключений - можно найти быстро то место которое отжирает память
механизмом исключений - можно найти быстро то место которое отжирает память
вот тут, можно по подробнее ?
Ну я имел ввиду , если потихоньку отключать те или иные вызовы , рано или поздно можнл выйти на тот модуль который отжирает память. Но это при условии что у вас код написан в виде отдельных процедур а не тупо линейно.