Новая версия платформы MetaTrader 5 build 2265: Функции DirectX для 3D-визуализации в MQL5 и настройка инструментов в тестере стратегий - страница 19
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В Визуализаторе Debug-EX5 приходится долго ждать первого тика (на чарте написано Ожидание обновления)
В логе пометил это место в три секунды. На некоторых советниках жду >10 секунд каждый раз!
При этом Release-EX5 в Визуализаторе идут без этой паузы. Дайте знать, пожалуйста, воспроизводится или нет.
Если я правильно понял, это регулярно и очень давно. попробуйте остановить отладку в функции OnInit() и пошагово перейти к первому тику. То-есть перейти из OnInit() в OnTick()
запустил у себя профилировщик билд 2267 Вин10-64
в блоке работы с ордерами ожидал, что подсчет ордеров и обращение к свойствам ордера (использую библиотеку MT4Orders.mqh автор @fxsaber) будет занимать больше всего времени, оказалось, что там наименьший расход процессорного времени, а вот банальная нормализация обьема ордера оказалась у меня самая дорогая, количество обращений к методу calcNormVol 1170 раз, занимает процессорного времени (223) 63.5%
вот код
хотя даже расчет кол-ва знаков после запятой вынес в статик переменную, чтобы в оптимизаторе быстрее работало
метод calcNormVol использую при отправке ордера и при оценке маржинальных требований
по моему такие простые функции как fmax , fmin , round должны работать быстрее пользовательских функций, но профилировщик показывает обратное
UPD: для сравнения вот этот код:
выполняется каждый тик и вызывается 10 468 296 раз и выполняется быстрее в 2 раза по данным профилировщика
вот код
В нем неявно создается четыре string-переменные.
запустил у себя профилировщик билд 2267 Вин10-64
в блоке работы с ордерами ожидал, что подсчет ордеров и обращение к свойствам ордера (использую библиотеку MT4Orders.mqh автор @fxsaber) будет занимать больше всего времени, оказалось, что там наименьший расход процессорного времени, а вот банальная нормализация обьема ордера оказалась у меня самая дорогая, количество обращений к методу calcNormVol 1170 раз, занимает процессорного времени (223) 63.5%
вот код
хотя даже расчет кол-ва знаков после запятой вынес в статик переменную, чтобы в оптимизаторе быстрее работало
метод calcNormVol использую при отправке ордера и при оценке маржинальных требований
по моему такие простые функции как fmax , fmin , round должны работать быстрее пользовательских функций, но профилировщик показывает обратное
А почему бы не подсчитать неизменные свойства один раз, и не положить их в переменные? Для чего при каждой надобности вызывать функцию, которая будет получать данные от сервера, рассчитывать, и возвращать ровно такой же результат, который постоянно возвращает?
В нем неявно создается четыре string-переменные.
как оптимизировать код?
про string вообще не могу понять откуда они в математических вычислениях
А почему бы не подсчитать неизменные свойства один раз, и не положить их в переменные? Для чего при каждой надобности вызывать функцию, которая будет получать данные от сервера, рассчитывать, и возвращать ровно такой же результат, который постоянно возвращает?
при отправке ордера идет нормализация лота, обычная практика, лот ордера изменяется в зависимости от предыдущего ордера, общее количество ордеров тоже разное, у меня это десяток ордеров, каждый из которых работает по своей ТС, но обьем зависит от результата предыдущих трейдов, в общем не удобно что то менять, тогда проще для оптимизатора переписать участок кода с нормализации ордера, вообще табличные значения рассчитать и занести... но вопрос пока про fmax , fmin , round - не понятно почему они ресурсы требуют
как оптимизировать код?
про string вообще не могу понять откуда они в математических вычислениях
при отправке ордера идет нормализация лота, обычная практика, лот ордера изменяется в зависимости от предыдущего ордера, общее количество ордеров тоже разное, у меня это десяток ордеров, каждый из которых работает по своей ТС, но обьем зависит от результата предыдущих трейдов, в общем не удобно что то менять, тогда проще для оптимищатора перепать участок кода с нормализацие ордера, вообще табличные значения рассчитать и занести... но вопрос пока про fmax , fmin , round - не понятно почему они ресурсы требуют
Попробуй получение данных от сервера SymbolInfoXXX убрать из функции. Эти данные - получаемые от символа - неизменны.
как оптимизировать код?
про string вообще не могу понять откуда они в математических вычислениях
В функцию передается _Symbol.
Попробуй получение данных от сервера SymbolInfoXXX убрать из функции. Эти данные - получаемые от символа - неизменны.
я замерял несколько месяцев назад скорость работы с SymbolInfoXXX() - они ничего не весят, время почти один в один как доступ к глобально описанной переменной, чуть позже проверю их еще в 2267 билде, но все равно подозрение на работу математических функций fmax , fmin , round
В функцию передается _Symbol.
я где то отстал от обсуждения, моя нормализация лота, ну это некая классика которая 10+ лет уже как по все статьям и примерам, в общем нужно поэкспериментировать
я где то отстал от обсуждения, моя нормализация лота, ну это некая классика которая 10+ лет уже как по все статьям и примерам, в общем нужно поэкспериментировать
В общем, в Тестере всегда одно и то же правило: никогда не вычислять повторно одно и то же.
В общем, в Тестере всегда одно и то же правило: никогда не вычислять повторно одно и то же.
запустил профилировщик на таком коде, вызовов/время 1170 / 456 (94.21%)
потом профилировщик на таком коде, вызовов/время 1170 / 464 (89.92%)
по моему разницы особой то и нет
вот по вызовам функций раскидал