Визуализируй стратегию в тестере MetaTrader 5

MetaQuotes | 8 июня, 2012


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


Все ли знают возможности тестера стратегий?

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

Цель этой статьи - показать трейдерам еще один немаловажный кусочек всей совокупности возможностей MetaTrader 5, а именно - возможностей визуализации тестирования и оптимизации стратегий. Анализ поведения эксперта на исторических данных и подбор оптимальных параметров - это не только кропотливый анализ цифр, торговых операций, балансов, эквити и т.д. Устраивайтесь поудобнее в кресле, одевайте "три дэ" очки и внимание на экран.


Ты, Вань, гляди какие клоуны графики...

При публикации советников в Code Base или в Маркете авторы, как правило, прикладывают статистический отчет об их тестировании, а также график баланса и эквити. Однако под статистическими показателями на вкладке "Результаты" тестера стратегий присутствуют интересные графики:

Графики результатов тестирования

По этим графикам вы можете проанализировать, в какие месяцы, дни или часы ваш эксперт торгует лучше, когда он входит в рынок наиболее активно. Оценить работу советника по своевременности закрытия позиций с прибылью и пересиживанию убытков помогут графики распределения MFE и MAE (максимальная потенциальная прибыль/убыток):

Графики распределения прибыли и MFE/MAE

Прокрутив результаты тестирования еще ниже, вы обнаружите еще один график:

График распределения прибыли и времени удержания позиции

Диаграмма демонстрирует зависимость прибыли позиции от времени ее удержания. Она придется как раз кстати для грядущего чемпионата Automated Trading Championship 2012. Одно из правил участия в нем запрещает использование пипсовки. Протестируйте свой советник и убедитесь, что он соответствует правилам.


Исторический фильм или визуальное тестирование

Одной из революционных возможностей тестера стратегий является визуальный режим тестирования. Согласитесь, анализ сделок по датам, самостоятельное выстраивание графиков и прочие "интересные" рутинные процедуры - достаточно трудоемкий процесс. Однако тестер стратегий практически дает вам пульт от проигрывателя, вы нажимаете "Play" и смотрите исторический фильм. Можете замедлить или ускорить картинку, остановить ее и проанализировать ситуацию. В режиме реального времени вы наблюдаете построение графиков на моделируемых исторических данных и реакцию эксперта на изменение цены.


Визуализатор полностью мультивалютный, как и сам тестер стратегий. Советник на видео использует для торговли 4 валютные пары - все моделируемые цены представлены в "Обзоре рынка" и на графиках. Советник совершает сделки то по одному, то по другому символу.


Результаты оптимизации в 2D

Перед тем как представить вам трехмерную картинку, что в последнее время довольно популярно среди известных производителей телевизоров, взгляните на возможности визуализации тестера стратегий в режиме 2D. Непонятные, на первый взгляд, прямоугольники позволяют увидеть взаимное влияние двух оптимизируемых параметров на критерий оптимизации (в нашем случае - максимальное значение баланса). Чем темнее оттенок зеленого, тем выше баланс:

Результаты оптимизации в 2D

Видно, что зависимость носит несколько волновой характер, а максимальный результат достигается при средних значениях периода и смещения скользящей средней. Все это - результаты оптимизации советника Moving Average, входящего в стандартную поставку терминала. Даже здесь можно найти что-то интересное.


Теперь и в 3D

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

Результаты оптимизации в 3D

Когда трехмерная оптимизация еще только появилась в тестере стратегий MetaTrader 5, на форуме трейдерам были представлены примеры визуализации математических расчетов:

Трехмерные графики полностью интерактивные - их можно приблизить, удалить, повернуть под удобным углом и т.д. Немаловажным является и то, что любые результаты тестирования и оптимизации можно экспортировать в виде картинки или XML/HTML отчета.


Визуализируем оптимизацию

И последний "гвоздь" нашей программы - работа с результатами оптимизации! Если раньше трейдеру для обработки результатов необходимо  было готовить данные, куда-то выгружать и обрабатывать их на стороне, то теперь это можно сделать "не отходя от кассы" - во время самой оптимизации. Для демонстрации такой возможности нам понадобятся несколько подключаемых файлов, в которых реализованы простейшие примеры такой обработки.

Заливаем прикрепленные к статье файлы с расширением MQH в папку MQL5\Include. Берем любого эксперта и вставляем в конце вот такой блок:

//--- подключим код для работы с результатами оптимизации
#include <FrameGenerator.mqh>
//--- генератор фреймов
CFrameGenerator fg;
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//--- тут нужно вставить свою функцию для вычисления критерия оптимизации
   double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT));
   TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia);
//--- вызываем на каждом окончании тестирования и передаем в качестве параметра критерий оптимизации
   fg.OnTester(TesterCritetia);
//---
   return(TesterCritetia);
  }
//+------------------------------------------------------------------+
//| TesterInit function                                              |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- подготавливаем график для отображения графиков баланса
   fg.OnTesterInit(3); //параметр задает количество линий баланса на графике
  }
//+------------------------------------------------------------------+
//| TesterPass function                                              |
//+------------------------------------------------------------------+
void OnTesterPass()
  {
//--- обрабатываем полученные результаты тестирования и выводим графику
   fg.OnTesterPass();
  }
//+------------------------------------------------------------------+
//| TesterDeinit function                                            |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- завершение оптимизации
   fg.OnTesterDeinit();
  }
//+------------------------------------------------------------------+
//|  Обработка событий на графике                                    |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   //--- запускает воспроизведение фреймов по окончании оптимизации при нажатии на шапке
   fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100 - это пауза в ms между кадрами
  }
//+------------------------------------------------------------------+

Для примера был взят идущий в стандартной поставке советник Moving Averages.mq5. Вставляем код и сохраняем советник с именем Moving Averages With Frames.mq5. Компилируем и запускаем оптимизацию.


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


Чего бы еще трейдеру желать?

Мы неустанно расширяем возможности торговой платформы MetaTrader 5, добавляя все новые инструменты в помощь трейдерам. Оставляйте свои комментарии к статье, пишите, как бы вы хотели расширить визуализацию в тестере стратегий. Мы в свою очередь постараемся реализовать наиболее интересные и полезные всем идеи.


Как использовать файлы

Все файлы с расширением .mqh нужно положить в папку MQL5\Include, именно там их будет искать компилятор при компиляции советника Moving Average_With_Frames.mq5. Файлы экспертов можете положить прямо в папку MQL5\Experts или в любую из ее подпапок.

Самостоятельно запускайте приложенных советников в тестере стратегий терминала MetaTrader 5, чтобы чтение статьи было еще интереснее. Вам обязательно понравится.