Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не могу понять, можно ли решить эту проблему со скоростью тестирования, не используя функции языка MT5. Всплыла проблема давно, но руки добрались разобраться в ней только сейчас.
Билд 3802, __MT4ORDERS__ "2022.07.20"
Условная функция, вызываемая в эксперте на каждом тике. Тест в тестере стратегий мт5.
Количество сделок в районе 26 тысяч. Время теста около 1 часа 10 минут.
Убираем функцию из кода, время теста стало около 17 минут.
Переписываю эту же функцию с использованием функционала МТ5:
Время теста в районе 18 минут.
Откатываю библиотеку до версии __MT4ORDERS__ "2020.01.12" и компилю эксперта в билде 2980.
Время работы эксперта с функцией get_last_order_close_time - в районе 20 минут.
Не могу понять, можно ли решить эту проблему со скоростью тестирования, не используя функции языка MT5.
Во всех трех случаях конечный результат совпадает?
Да, конечно.
Это стало происходить после очередного обновления имено терминала. Вашу библиотеку я не менял, и чтобы все работало как раньше компилировал бота в старом терминале.
Это стало происходить после очередного обновления имено терминала. Вашу библиотеку я не менял, и чтобы все работало как раньше компилировал бота в старом терминале.
Сделал исследование.
Советник.
На каждом inMod-тике открывается и закрывается позиция. И на каждом тике вычисляется OrderCloseTime.
OnTester служит критерием проверки идентичности результатов при разных конфигурациях.
Соответствующие функции работы с историей.
Методика.
Одиночный запуск на настройках, как в исходнике (inMod = 5).
28K сделок, почти четыре секунды. Поскольку замерять производительность нужно в режиме оптимизации, то все следующие показания производительности делались так.
С обязательной перекомпиляцией перед запуском и включенным только одним Агентом для последовательного выполнения проходов.
Производительность.
Таблица производительности (время выполнения в миллисекундах) для b3815 и b2958.
Везде использовалась MT4Orders от 20.07.2022.
Выводы.
Время теста около 1 часа 10 минут.
Откатываю библиотеку до версии __MT4ORDERS__ "2020.01.12" и компилю эксперта в билде 2980.
Время работы эксперта с функцией get_last_order_close_time - в районе 20 минут.
Попробуйте код выше на старой версии библиотеки (у меня ее нет).
Если будет отличие в производительности, пришлите в ЛС.
Возможно ли, что происходит утечка памяти или использование памяти больше, чем нужно? Может быть, в this.tickets или в this.amount (::ArrayResize) или где-то еще?
Размер массивов только увеличивается со временем. Является ли это обязательным условием? Можно ли их очистить или, возможно, не загружать все предыдущие сделки?
Возможно ли, что происходит утечка памяти или использование памяти больше, чем нужно? Может быть, в this.tickets или в this.amount (::ArrayResize) или где-то еще?
Размер массивов только увеличивается со временем. Является ли это обязательным условием? Можно ли их очистить или, возможно, не загружать все предыдущие сделки?
Библиотека не полностью кэширует исторические данные. Получить нехватку памяти можно только в теории, но не на практике.
Напишите скрипт, который просматривает всю торговую историю с помощью библиотеки, и посмотрите, сколько памяти потребляется.
Библиотека не полностью кэширует исторические данные. Получить нехватку памяти можно только в теории, но не на практике.
Напишите скрипт, который сортирует всю историю торговли с помощью библиотеки, и посмотрите, сколько памяти при этом расходуется.
При тестировании стратегии ea использует 25 ГБ на ядро.
Редактировать: это тест на таймфрейме 1 год, так что не так уж и много.при тестировании стратегии ea использует 25 Гб на ядро.
Редактировать: это тест на таймфрейме 1 год, так что не так уж и много.Библиотека (MT4Orders.mqh) не потребляет такое количество памяти. Вы можете запустить, например, этот советник, чтобы убедиться в этом.
Скорее всего, вы неправильно работаете с индикаторами: создаете новые хэндлы индикаторов, но не удаляете старые.