Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2017.11.29 12:41
Наверное, лучший способ получить данные от асинхронных Copy-функций (CopyRates, CopyTicks и т.д.) - через EventChartCustom.
Особенно актуально для индикаторов.
Это же касается и ресурсоемких задач. Как только отработали заданное количество времени, прерываете (запоминая текущие значения) и вызываете EventChartCustom. Затем в OnChartEvent ловите свое кастомное событие и продолжаете с места разрыва.И так до тех пор, пока не будет все посчитано.
OnTimer в данном случае возможен, но явно избыточен.
Это же касается и ресурсоемких задач. Как только отработали заданное количество времени, прерываете (запоминая текущие значения) и вызываете EventChartCustom. Затем в OnChartEvent ловите свое кастомное событие и продолжаете с места разрыва.И так до тех пор, пока не будет все посчитано.
OnTimer в данном случае возможен, но явно избыточен.
EventChartCustom в моем варианте не подойдёт,как я уже писал, вся обработка данных начинается только на OnDeinit() когда данные собраны и график я закрываю. Понимаю что надо как-то притормозить каждый цикл, но как это сделать пока не понятно.
Что там по второму вопросу, почему так мало нагружаются CPU и RAM?
EventChartCustom в моем варианте не подойдёт,как я уже писал, вся обработка данных начинается только на OnDeinit() когда данные собраны и график я закрываю. Понимаю что надо как-то притормозить каждый цикл, но как это сделать пока не понятно.
В OnDeinit должен срабатывать таймаут в индикаторах. Если этого не происходит, в СД. Т.е в OnDeinit ничего долгого в индикаторах не посчитать из-за архитектурных особенностей.
Что там по второму вопросу, почему так мало нагружаются CPU и RAM?
Загружено полностью одно ядро CPU, т.к. расчеты не распараллеливаются. 100% - это все ядра загружены. RAM зависит от количества данных.
В OnDeinit должен срабатывать таймаут в индикаторах. Если этого не происходит, в СД. Т.е в OnDeinit ничего долгого в индикаторах не посчитать из-за архитектурных особенностей.
Загружено полностью одно ядро CPU, т.к. расчеты не распараллеливаются. 100% - это все ядра загружены. RAM зависит от количества данных.
Ясно, спасибо. Тогда буду переносить обработку на OnCalculate() и на последних свечах начать обработку. Кстати, может есть какой-то способ узнать последнюю свечу графика тестирования?
Вроде, нет такой возможности.
Вроде, нет такой возможности.
Ясно, спасибо.
Ясно, спасибо. Тогда буду переносить обработку на OnCalculate() и на последних свечах начать обработку. Кстати, может есть какой-то способ узнать последнюю свечу графика тестирования?
Используйте OnTester()
Используйте OnTester()
Индикатор.
Индикатор.
Вызвать из советника.
Вызвать из советника.
Тогда это не будет иметь отношения к ветке.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Обработка данных проходит на индикаторе OnDeinit().
1. Пока проходит обработка данных платформа зависает (not responding). Поставил счётчик времени в внутри первого уровня цикла, но время прохождения между циклами вижу я только по окончание теста, когда терминал отвисает (Running). Какие решение? Пример кода:
Вывод в журнале:
0 17:07:47.971 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 0.0 sek
0 17:07:52.618 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 4.0 sek
0 17:07:57.242 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 9.0 sek
0 17:08:01.885 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 13.0 sek
0 17:08:06.575 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 18.0 sek
0 17:08:11.270 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 23.0 sek
0 17:08:15.949 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 27.0 sek
0 17:08:20.655 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 32.0 sek
0 17:08:25.375 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 37.0 sek
0 17:08:30.117 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 42.0 sek
0 17:08:34.851 2016.06.03 23:59:59 TW49FI_1.0 EURUSD,M1: 1 LEVEL Optim time: 46.0 sek
2. Почему CPU и RAM так мало нагружаются при обработки таких больших объёмов данных?