Для проверки качеств торгового робота в MetaTrader 5 встроен Тестер торговых стратегий. Перед запуском советника в торговлю он позволяет определить его эффективность и подобрать наилучшие входные параметры.
Вся работа Тестера торговых стратегий строится на истории котировок валют и акций. Во время тестирования советник анализирует накопленные котировки и совершает виртуальные сделки в соответствии с заложенным в него алгоритмом. Это позволяет оценить, как бы данная стратегия торговала в прошлом.
Мультивалютное тестирование
Тестер позволяет проводить проверку на истории стратегий, торгующих на нескольких инструментах. Такие эксперты условно называют мультивалютными, так как изначально в предыдущих платформах тестирование проводилось только для одного инструмента. В тестере же терминала MetaTrader 5 можно моделировать торговлю по всем доступным инструментам.
История по используемым инструментам закачивается тестером из клиентского терминала (не с торгового сервера!) автоматически при первом обращении к данному инструменту.
Агент тестирования закачивает только недостающую историю с небольшим запасом, чтобы обеспечить необходимые данные на истории для расчета индикаторов на момент начала тестирования. Минимальный объем истории при скачивании с торгового сервера для таймфреймов D1 и меньше составляет один год. Таким образом, если запускается тестирование на интервале 2010.11.01-2010.12.01 (тестирование на интервале в один месяц) с периодом M15 (каждый бар равен 15 минутам), то у терминала будет запрошена история по инструменту за весь 2010 год. Для таймфреймов Weekly будет запрошена история в 100 баров, что составляет примерно два года (в году 52 недели). Для тестирования на месячном таймфрейме Monthly агент запросит историю за 8 лет (12 месяцев * 8 лет = 96 месяцев).
Если не удается по каким-либо причинам обеспечить необходимое количество баров перед началом тестирования, то дата начала будет автоматически сдвинута от прошлого к настоящему для того чтобы обеспечить такое количество баров.
При тестировании эмулируется также и «Обзор рынка», из которого можно получать информацию по инструментам. По умолчанию в начале тестирования в «Обзоре рынка» тестера есть только один символ — символ на котором запущено тестирование. Все необходимые символы подключаются к «Обзору рынка» тестера (не терминала!) автоматически при обращении к ним.
Моделирование времени в тестере
При тестировании локальное время TimeLocal() всегда равно серверному времени TimeTradeServer(). В свою очередь, серверное время всегда равно времени, соответствующему времени GMT — TimeGMT(). Таким образом, все эти функции при тестировании выдают одно и то же время.
Отсутствие разницы между GMT, локальным и серверным временем в тестере сделано сознательно по той самой причине, что связь с сервером может быть не всегда. А результаты тестирования должны быть одинаковыми, независимо от наличия связи. Информация о серверном времени не хранится локально, а берётся с сервера.
Графические объекты при тестировании
Во время тестирования/оптимизации не осуществляется построение графических объектов. Таким образом, при обращении к свойствам созданного объекта во время тестирования/оптимизации эксперт получит нулевые значения.
Режимы тестирования
Тестер стратегий MetaTrader 5 предлагает несколько режимов тестирования. Они позволяют выбрать наилучшее соотношение скорость/качество в соответствии с вашими потребностями. Режим «Все тики» предназначается для наиболее точной проверки, в этом случае моделируемые условия будут наиболее приближены к реальным. Режим «1 minute OHLC» подойдет для тех, кому нужно протестировать стратегию быстрее, однако достаточно точно. Если нужна очень быстрая и грубая оценка — только по ценам открытия баров, выбирайте режим «Только цены открытия».
Возможности тестера не ограничиваются только проверкой. Его можно использовать и для решения массовых математических задач оптимизации параметров. В режиме математических вычислений не используется торговая история и не моделируется рыночное окружение, а выполняются только заложенные в эксперта математические расчеты.
Стресс-тестирование — это возможность еще больше приблизить условия проверки торгового робота к реальным. Режим произвольных задержек исполнения эмулирует сетевые задержки при передаче и обработке торговых запросов, а также моделирует задержки исполнения приказов дилерами при реальной торговле.
Графические результаты тестирования
Одной из главных особенностей Тестера стратегий является представление результатов проверки торговых советников. Это не только сухие цифры — сколько заработал робот за время тестирования. Это еще и масса статистических показателей работы: процентное соотношение прибыли и убытка, количество удачных и неудачных сделок, фактор риска, ожидание выигрыша и многое другое.
Результаты тестирования стратегий также представляются в виде графиков, что делает анализ торговой стратегии еще более удобным.
Визуальное тестирование
Режим визуального тестирования позволяет в режиме реального времени отслеживать торговлю робота на исторических ценовых данных:
Режим визуализации — это не только возможность самому увидеть, как торгует робот. Помимо этого он позволяет проверить работу пользовательских технических индикаторов. Например, перед покупкой через Маркет вы можете оценить его поведение на исторических данных.
Оптимизация
Важной функцией Тестера стратегий является оптимизация торгового робота, которая позволяет подобрать для конкретного советника лучшие входные параметры. Например, при помощи оптимизации можно изменить параметры таким образом, чтобы торговый робот стал максимально прибыльным, устойчивым, отличался минимальной рискованностью и так далее.
Количество комбинаций входных параметров при оптимизации может достигать десятков или сотен тысяч. В итоге, оптимизация может превратиться в очень длительный процесс, который все же можно существенно сократить при помощи генетических алгоритмов. Эта функция отключает последовательный перебор всех комбинаций входных параметров и выбирает только те, которые наилучшим образом отвечают критериям оптимизации. На последующих этапах «оптимальные» комбинации скрещиваются до тех пор, пока результаты не перестанут улучшаться. Таким образом, количество комбинаций и общее время оптимизации сокращаются в разы.
Графические результаты оптимизации
В Тестере стратегий доступны мощные инструменты визуального анализа результатов оптимизации в 2D и 3D режимах. Например, в двухмерном представлении можно сразу проанализировать зависимости итогового результата от двух показателей, а в 3D — увидеть всю картину поиска наилучшего результата при оптимизации.
Форвард-тестирование
Встроенная функция форвард-тестирования позволяет избавиться от «переоптимизации», или подгонки параметров. С включением этой опции история котировок валют и акций делится на две части. Непосредственно оптимизация происходит на первом отрезке истории, а второй используется только для подтверждения полученных результатов. Если на обоих отрезках эффективность торгового робота одинаково высока, значит, торговая система обладает наилучшими параметрами и подгонка параметров практически исключена.
Обработка событий в тестере
Наличие обработчика OnTick() в эксперте не является обязательным для того чтобы его можно было подвергнуть проверке на исторических данных в тестере терминала MetaTrader 5. Достаточно того, чтобы в советнике была хотя бы одна функция-обработчик из перечисленных:
- OnTick() — обработчик события прихода нового тика;
- OnTrade() — обработчик торгового события;
- OnTimer() — обработчик события прихода сигнала от таймера;
- OnChartEvent() — обработчик пользовательских событий.
При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается. Даже если индикатор имеет обработчик OnChartEvent() и этот индикатор используется в тестируемом эксперте, то сам индикатор не будет получать никаких пользовательских событий.
Индикатор при тестировании может генерировать пользовательские события с помощью функции EventChartCustom(), а советник может обрабатывать это событие в OnChartEvent().
Помимо вышеуказанных событий в тестере стратегий генерируются специальные события, связанные с процессом тестирования и оптимизации:
- Tester — данное событие генерируется по окончании тестирования эксперта на исторических данных. Обработка события Tester производится функцией OnTester(). Эта функция может быть использована только в экспертах при тестировании и предназначена в первую очередь для расчета некоторого значения, используемого в качестве критерия Custom max при генетической оптимизации входных параметров.
- TesterInit — данное событие генерируется при запуске оптимизации в тестере стратегий перед самым первым проходом. Обработка события TesterInit производится функцией OnTesterInit(). Эксперт, имеющий данный обработчик, при запуске оптимизации автоматически загружается на отдельном графике терминала с указанными в тестере символом и периодом, и получает событие TesterInit. Функция предназначена для инициализации эксперта перед началом оптимизации для последующей обработки результатов оптимизации.
- TesterPass — данное событие генерируется при поступлении нового фрейма данных. Обработка события TesterPass производится функцией OnTesterPass(). Эксперт с данным обработчиком автоматически загружается на отдельном графике терминала с указанными для тестирования символом/периодом и получает во время оптимизации события TesterPass при получении фрейма. Функция предназначена для динамической обработки результатов оптимизации прямо «на лету», не дожидаясь её окончания. Добавление фреймов производится функцией FrameAdd(), которую можно вызывать по окончании одиночного прохода в обработчике OnTester().
- TesterDeinit — данное событие генерируется по окончании оптимизации эксперта в тестере стратегий. Обработка события TesterDeinit производится функцией OnTesterDeinit(). Эксперт с данным обработчиком автоматически загружается на график при запуске оптимизации и получает событие TesterDeinit после её завершения. Функция предназначена для финальной обработки всех результатов оптимизации.
MQL5 Cloud Network
Поддержка распределенного тестирования и оптимизации позволяют подключать к этим процессам дополнительные вычислительные мощности. Например, можно использовать вычислительные мощности компьютеров локальной сети и в несколько раз ускорить процесс оптимизации. Однако и это еще не все.
MQL5 Cloud Network — это сеть облачных вычислений, объединяющая в себе тысячи компьютеров по всему миру. Тестер стратегий может использовать ее практически безграничные вычислительные мощности. При помощи сети MQL5 Cloud Network оптимизация, которая заняла бы месяцы в обычном режиме, может быть выполнена за считанные часы.
Помимо использования сети распределенных вычислений, вы можете предоставлять собственные вычислительные мощности для нее и зарабатывать. Для этого достаточно запустить специальный компонент MetaTester, входящий в торговую платформу MetaTrader 5. Он позволяет быстро и удобно подключить компьютер к MQL5 Cloud Network.
Тестер торговых стратегий — это незаменимый инструмент для разработчиков экспертов. Без него практически невозможно написать эффективного торгового робота.