MQL5 Cloud Network ускоряет расчеты

MetaQuotes | 3 февраля, 2012


Многопоточное тестирование в MetaTrader 5

Можно долго перечислять все преимущества новой торговой платформы MetaTrader 5 и приводить доводы в пользу того, что она лучше других программ для технического анализа и торговли на финансовых рынках. А можно одним словом прекратить любые споры и поставить жирную точку в подобных дискуссиях. И это слово - тестер торговых стратегий в клиентском терминале MetaTrader 5. Мы покажем в этой статье на что он способен и почему им по праву гордятся разработчики из MetaQuotes Software Corp.

Клиентский терминал 5-го поколения получил не только новый мощный и быстрый язык программирования торговых стратегий MQL5, но и полностью с нуля спроектированный тестер стратегий. Задачи тестера давно уже не ограничиваются только получением результатов торговли проверяемой стратегии на исторических данных, но и подразумевают ее оптимизацию -  поиск наиболее оптимальных параметров.

Оптимизация стратегии представляет собою многократный прогон торговой стратегии на одном и том же участке истории с разными наборами параметров, от которых она зависит. Это стандартная задача массовых вычислений, которая поддается распараллеливанию, и как вы уже догадались - да, тестер в терминале MetaTrader 5 является многопоточным! Что это означает на деле, мы сейчас и посмотрим на примере оптимизации эксперта из стандартной поставки.


Условия тестирования

При написании статьи использовался компьютер c процессором Intel Core i7 (8 ядер c частотой 3.07 ГГц) и 12 GB памяти на борту. Операционная система Windows 7 64 bit и 1075 билд терминала MetaTrader 5.

Для тестирования выбран идущий в поставке советник Moving Average.mq5 со следующими настройками:

Оптимизируемые параметры:

Параметры оптимизации


Оптимизация на локальных агентах

Сначала запускаем оптимизацию на локальных агентах. У нас 8 агентов тестирования - оптимальное число по количеству ядер. Отключаем использование удаленных агентов из локальной сети и агентов из MQL5 Cloud Network:

Включение/отключение групп агентов

После окончания оптимизации заходим в Журнал и видим, что 14040 проходов на 8 локальных агентах потребовали 1 час, 3 минуты и 46 секунд.

2015.02.05 16:44:38	Statistics	locals 14040 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2015.02.05 16:44:38	Statistics	optimization passed in 1 hours 03 minutes 46 seconds
2015.02.05 16:44:38	Tester	optimization finished, total passes 14040


Оптимизация с использованием локальной фермы агентов

Как выполнять больше заданий параллельно? Конечно, можно приобрести процессор с большим количеством ядер. Но это не позволит увеличить число одновременно выполняемых заданий в несколько раз. Тестер стратегий решает эту проблему. Вы можете создать собственную вычислительную ферму агентов в локальной сети.


Как создать ферму агентов?

На каждом компьютере локальной сети нужно произвести установку агентов. Если на компьютере уже установлен клиентский терминал MetaTrader 5, откройте менеджер агентов тестирования соответствующей командой в меню "Сервис".

Менеджер агентов тестирования

В ином случае, скачайте отдельное приложение для управления агентами MetaTrader 5 Strategy Tester Agent и пройдите простой процесс установки.

MetaTrader 5 Strategy Tester Agent

В менеджере откройте вкладку Агенты:

  1. Выберите количество агентов, которые необходимо установить. Агенты устанавливаются по количеству логических ядер процессора. 
  2. Укажите пароль, по которому к этим агентам можно будет подключаться для использования.
  3. Выберите диапазон портов для подключения.
  4. Нажмите добавить.

На этом все. Агенты готовы к использованию с других компьютеров в локальной сети.


Как подключить агенты?

Подключение происходит буквально в несколько кликов. Откройте тестер стратегий в терминале и перейдите на вкладку "Агенты". Выберите пункт "Local Network Farm" и нажмите "Добавить" в контекстном меню.

Добавление удаленных агентов

Самый простой и быстрый способ добавления - автоматическое сканирование локальной сети по диапазону IP-адресов и портов. Укажите их, а также пароль для подключения к агентам, который был задан при установке.

Поиск агентов в локальной сети

Нажмите "Готово" и все найденные агенты станут доступными для тестирования.


Замер скорости

К 8 локальным агентам мы добавили еще 20 удаленных. Итого у нас в распоряжении 28 агентов, что в 3.5 раза больше, чем было изначально. Проведем оптимизацию нашего эксперта и посмотрим, насколько быстрее она будет выполнена.

2015.02.05 15:14:44    Statistics    locals 3412 tasks (24%), remote 10628 tasks (75%), cloud 0 tasks (0%)
2015.02.05 15:14:44    Statistics    optimization passed in 15 minutes 47 seconds
2015.02.05 15:14:44    Tester    optimization finished, total passes 14040

Три четверти заданий были выполнены удаленными агентами. Время оптимизации сократилась до 15 минут 47 секунд, что в 4 раза быстрее.

Неплохой прирост скорости, но не для всех это решение доступно. Не отчаивайтесь, есть возможнось ускориться еще сильнее - попробуем задействовать агентов из сети MQL5 Cloud Network!


Оптимизация с использованием MQL5 Cloud Network

Для чистоты эксперимента отказываемся от использования локальных агентов и делаем оптимизацию только на агентах из MQL5 Cloud Network. Жмем кнопку "Старт" и наблюдаем за прогрессом в оптимизации. На видео показан процесс в реальном времени.

MQL5 Cloud Network позволила ускорить процесс оптимизации в 150 раз!

Видно как в ходе оптимизации каждый узел сети MQL5 Cloud Network раздаёт задания (одиночные проходы) доступным агентам. Оптимизация заняла всего 26 секунд, что дало ускорение в 147 (!) раз. На деле трейдерам бывает необходимо в приемлемое время провести оптимизацию по десяткам и сотням тысяч проходов. С тестером в MetaTrader 5 вы можете за час прогнать в MQL5 Cloud Network вычисления, на которые самостоятельно затратили бы несколько дней. Теперь одним кликом мышки можно запрячь тысячи ядер для решения одной задачи. И это доступно каждому!  Но как же это работает?


MQL5 Cloud Network объединяет тысячи компьютеров

Сеть MQL5 Cloud Network состоит из узлов - специальных серверов, к которым подключаются агенты тестирования для выполнения заданий. Такие узлы являются диспетчерами-пулерами, так как они объединяют в большие пулы агентов по всему миру по географическому признаку. Каждый агент в режиме простоя отсылает в ближайший узел сообщение о готовности выполнить задачу, интервал между такими сообщениями зависит от текущей загрузки сети MQL5 Cloud Network.

Каждый узел сети одновременно является для терминала MetaTrader 5 точкой доступа в сеть MQL5 Cloud Network, к ним терминал подключается при наличии аккаунта на MQL5.com. Список серверов сети MQL5 Cloud Network и количество доступных через них облачных агентов вы можете увидеть в терминале в окне "Тестер" на закладке "Агенты".

Агент считается свободным, то есть находится в режиме простоя, в том случае, если он не занят собственными локальными задачами, полученными от локального компьютера или из локальной сети. Пока агент занят, он не делает попыток взять задачу из MQL5 Cloud Network. После окончания локальных расчетов агент в течение нескольких минут выходит на связь с ближайшим узлом MQL5 Cloud Network и предлагает свои услуги. Таким образом, ваши агенты тестирования работают на сеть только в том случае, если они не нужны вам. И, конечно, агенты работают на сеть в соответствии с установленным расписанием.

Благодаря простоте установке и минимальной необходимости в настройке MetaTrader 5 Agents Manager, в сети в каждый момент времени находятся тысячи агентов тестирования. Общую статистику по агентам MQL5 Cloud Network и выполненным задачам можно посмотреть на главной странице проекта - https://cloud.mql5.com.


Запуск распределенных вычислений с использованием агентов из MQL5 Cloud Network

Как и для обычной оптимизации, необходимо установить все опции тестирования и входные параметры эксперта. Но предварительно не забудьте указать в терминале свой логин на MQL5.community и разрешить использование MQL5 Cloud Network. Эти четыре необходимых шага показаны на рисунке.

Запуск оптимизации с использованием MQL5 Cloud Network

Вы нажимаете кнопку "Старт" и процесс оптимизации запускается. Терминал готовит задачу для тестерных агентов, в которую входят:

Терминал MetaTrader 5 связывается с узлами сети MQL5 Cloud Network и отдает каждому узлу отдельный пакет заданий на выполнение конкретных проходов. Каждый узел фактически является прокси-сервером, так как он получает задачу и пакет заданий (одиночных проходов), и после этого начинает распределять эти задания по подключенным к нему агентам. При этом сами файлы экспертов, индикаторов, библиотек и файлы данных не сохраняются на жестких дисках серверов MQL5 Cloud Network.

На облачных агентах файлы EX5 также не сохраняются на жёсткий диск из соображений конфиденциальности. При этом файлы данных сохраняются на диске, но после завершения оптимизации файлы данных уничтожаются.

Таким образом выглядит вся процедура обращения вашего клиентского терминала к MQL5 Cloud Network - фактически он выстреливает в сеть пакеты заданий и ждет прихода результатов.


Синхронизация в облаке и раздача истории агентам

Каждый узел сети MQL5 Cloud Network хранит у себя историю по нужным символам и раздает всем подключенным к нему агентам по требованию. Если у него еще нет истории по символу XYZ от брокера ABC, то узел автоматически скачает нужные для тестирования исторические данные с вашего терминала. Поэтому ваш терминал должен быть готов предоставить такую историю.

Рекомендуем провести предварительное одиночное тестирование стратегии на своем компьютере, прежде чем отдавать её на просчет в MQL5 Cloud Network. Такой подход  автоматически обеспечит скачивание и синхронизацию всей необходимой истории с торгового сервера.

На современном компьютере, как правило, установлено от 4 до 8 агентов, но исторические данные для них хранятся в единой папке в каталоге установки MQL5 Strategy Tester Agent. Все облачные агенты, установленные одним менеджером MQL5 Strategy Tester Agent, получают её именно из этой папки, то есть централизовано.  Если установлено 8 агентов, и все они предоставлены для работы MQL5 Cloud Network, то необходимая история скачивается только в одном экземпляре. Это позволяет экономить трафик, место на жестком диске компьютера и удобно проводить синхронизации между облачными агентами и узлами распределенной сети вычислений.

Таким образом, все агенты, выполняющие оптимизацию одной торговой стратегии на заданном интервале времени и на заданном инструменте автоматически обеспечиваются одинаковой синхронизированной историей и рыночным окружением.


Разогрев

Как происходит запуск оптимизации на локальном компьютере? Если у вас 8 ядер, то обычно вам доступно по умолчанию 8 локальных агентов. При нажатии кнопки "Старт" задания раздаются локальным агентам, происходит подкачка истории (при необходимости) и процесс начинается. При таком варианте запуск происходит практически мгновенно. Но если вы раздаете задания в MQL5 Cloud Network, то картина немного меняется.

Облачные агенты не находятся постоянно на связи с диспетчерами сети, это технически неоправданно и затратно по всем соображениям. Вместо этого агенты периодически опрашивают сервера MQL5 Cloud Network сообщениями "Нет ли для меня нового задания?". Происходит это с одной стороны достаточно часто, чтобы обеспечить быструю мобилизацию необходимого количества агентов, и достаточно редко, чтобы не забивать такими сообщениями трафик сети.  Поэтому при запуске оптимизации вы видите, как начинает расти число агентов, которые подключаются к выполнению вашей задачи. Это на ваших глазах в режиме реального времени происходят обращения облачных агентов к  MQL5 Cloud Network  и раздача им заданий для расчета конкретных проходов.

При отсутствии задач агенты обращаются к диспетчерам сети достаточно редко. Но если пришел заказ на обсчет нескольких тысяч (десятков тысяч) заданий, то тут уже картина меняется. Можно сказать, что активность сети MQL5 Cloud Network повышается, так как сразу же после завершения задачи интервал обращений агентов за новыми заданиями уменьшается. И если после выполнения задачи, например, из Европы, придет заказ на выполнение другой задачи из Азии, то сеть будет уже готовой к быстрому старту. Можно назвать такое поведение сети разогревом.

Запуск расчетов в MQL5 Cloud Network

Таким образом, сеть MQL5 Cloud Network готова вновь принимать новые задачи, чтобы выполнить их в минимальные сроки.


Используйте MQL5 Cloud Network!

Выражение "Время - деньги" становится актуальнее с каждым годом, и не всегда мы можем позволить себе ждать окончания важных расчетов в течение десятков часов или даже дней. На момент написания статьи сеть MQL5 Cloud Network обеспечивает ускорение расчетов в сто раз. При дальнейшем её росте выигрыш во времени может вырасти до тысячи раз и более. И при этом сеть распределенных вычислений позволяет решать не только задачи оптимизации торговых стратегий.

Вы можете написать на языке MQL5 программу, которая реализует массивные математические вычисления и требует огромных процессорных ресурсов. Язык MQL5, на котором пишутся программы для терминала MetaTrader 5, максимально приближен к C++ и позволяет легко переносить алгоритмы, написанные на других языках высокого уровня.

Важной особенностью тестера в терминале MetaTrader 5 является то, что тяжелые математические задачи поиска решений на множестве входных переменных легко распараллеливаются по агентам тестирования. И вам не нужно писать для этого ни одной специальной строчки кода - достаточно подключиться к сети распределенных вычислений MQL5 Cloud Network!