Оптимальное быстродействие

 

Работаю над экспертом с автономной оптимизацией параметров. Если перебор комбинаций оптимизируемых параметров осуществлять в OnTimer, с минимально возможным периодом 1 миллисекунда, то, при заданных настройках оптимизация занимает 5 минут. Но если функцию оптимизации я запускаю, в цикле while, в обработчике OnChartEvent, по нажатию на кнопку, то время оптимизации увеличивается на целых 4 минут. Получается, 9 минут занимает оптимизация с помощью while. Почему так получается?


И еще, как в первом, так и втором варианте, процессор загружается примерно на 25 - 30%. При чем, в варианте с while уровень загрузки немного больше, чем при работе в OnTimer, как мне показалось. Мой процессоре i5-5200U (2 ядра, 4 потока). Все потоки загружаются равномерно. И второй вопрос:. Можно ли выжать больше из процессора с помощью MQL, хотя бы загрузить его процентов на 80, чтобы увеличить скорость оптимизации?

Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
Mihail Matkovskij:

процессор загружается примерно на 25 - 30%. При чем, в варианте с while уровень загрузки немного больше, чем при работе в OnTimer, как мне показалось. Мой процессоре i5-5200U (2 ядра, 4 потока). Все потоки загружаются равномерно. И второй вопрос:. Можно ли выжать больше из процессора с помощью MQL, хотя бы загрузить его процентов на 80, чтобы увеличить скорость оптимизации?

Работа эксперта идёт в один поток из четырех, отсюда и 25%. Разделите задачу на 4 эксперта. Распределяйте мастером пакеты заданий, синхронизируйте.
 
В первом вопросе разобрался. Но на счёт мастера не в курсе. Есть ли где-то примеры, как это делать?
 
Mihail Matkovskij:
В первом вопросе разобрался. Но на счёт мастера не в курсе. Есть ли где-то примеры, как это делать?

Один из экспертов должен быть мастером и управлять остальными. Пишете сами. Связь между экспертами производится множеством способов (глобальные переменные, файлы, ресурсы, графические объекты, pipe, shared memory). Многозадачность - не очень элементарная задача.

 
Edgar Akhmadeev:

Один из экспертов должен быть мастером и управлять остальными. Пишете сами. Связь между экспертами производится множеством способов (глобальные переменные, файлы, ресурсы, графические объекты, pipe, shared memory). Многозадачность - не очень элементарная задача.

То есть, под мастером вы подразумевали простого эксперта... Ну это несложно. Пробовал параллельно запускать несколько копий эксперта с разделенными вручную настройками до почти полной загрузки процессора... Вполне приемлемый способ. Нужно будет еще заморочиться с главным экспертом, чтобы он, запускал экспертов, отправлял данные и собирал результаты... Спасибо!

 
Переоптимизация каждую миллисекунду? Зачем?
 
Andrey Khatimlianskii:
Переоптимизация каждую миллисекунду? Зачем?

Это только по команде. В цикле while еще быстрее. Последовательный перебор комбинаций параметров до завершения, а не переоптимизация.

 
Mihail Matkovskij:

Работаю над экспертом с автономной оптимизацией параметров. Если перебор комбинаций оптимизируемых параметров осуществлять в OnTimer, с минимально возможным периодом 1 миллисекунда, то, при заданных настройках оптимизация занимает 5 минут. Но если функцию оптимизации я запускаю, в цикле while, в обработчике OnChartEvent, по нажатию на кнопку, то время оптимизации увеличивается на целых 4 минут. Получается, 9 минут занимает оптимизация с помощью while. Почему так получается?


И еще, как в первом, так и втором варианте, процессор загружается примерно на 25 - 30%. При чем, в варианте с while уровень загрузки немного больше, чем при работе в OnTimer, как мне показалось. Мой процессоре i5-5200U (2 ядра, 4 потока). Все потоки загружаются равномерно. И второй вопрос:. Можно ли выжать больше из процессора с помощью MQL, хотя бы загрузить его процентов на 80, чтобы увеличить скорость оптимизации?

перевести "оптимизацию" на другой эксперт, а лучше сервис. Они в отдельном потоке, поэтому будет лучше..

пока ещё не дали возможность программно создавать поток, придётся так..Придумайте как данные передавать+синхронизовать и вперёд.

 
Maxim Kuznetsov:

перевести "оптимизацию" на другой эксперт, а лучше сервис. Они в отдельном потоке, поэтому будет лучше..

пока ещё не дали возможность программно создавать поток, придётся так..Придумайте как данные передавать+синхронизовать и вперёд.

Как это можно сделать с помощью сервиса?

 
Mihail Matkovskij:

Как это можно сделать с помощью сервиса?

сервис - просто вычислительный процесс..

void OnStart() {

   while(!IsStopped()) {

       ///  что-то тут бесконечно вычисляем

   }

}

придумайте способ обмена данными с основным,торговым экспертом..

например большие данные через файлы и сигналить глоб.переменными. Или результат класть в переменные терминала. 

 
Maxim Kuznetsov:

сервис - просто вычислительный процесс..

void OnStart() {

   while(!IsStopped()) {

       ///  что-то тут бесконечно вычисляем

   }

}

придумайте способ обмена данными с основным,торговым экспертом..

например большие данные через файлы и сигналить глоб.переменными. Или результат класть в переменные терминала. 

Я раньше видел пункт "Cервис" в Мастере MQL но не вникал в подробности. А сейчас вбил в поиске и почему-то ничего не удается найти о сервисах...