Визуализация тестирования. Расширение функциональности.
1. Мотивация
В 196-м билде клиентского терминала MetaTrader 4 появилась функция визуализации тестирования. Она позволяет контролировать процесс тестирования экспертов на качественно новом уровне. Теперь трейдер-программист может наблюдать за каждым действием своего эксперта, проверяя его работу на истории!
Об использовании визуализатора вы можете прочитать в статье Тестирование экспертов в клиентском терминале MetaTrader 4. Взгляд изнутри. В настоящей статье будет описано, как сделать тестер стратегий максимально похожим на терминал.
Итак, в чем основное отличие тестера? Чего не хватает при визуализации? Наверное, самое главное — это отсутствие закладки "Торговля" терминала.
Сколько открыто позиций? Как скоро сработает отложенный ордер? Передвинулся ли Стоп Лосс у позиции? Сколько используется маржи в данный момент и как далеко до MarginCall? При реальной торговле ответы на эти и многие другие вопросы мы ищем на закладке "Торговля" Терминала. Но что делать при тестировании?Решению этого вопроса и посвящена данная статья.
2.Техническая сторона вопроса
Написание программы начнём, как всегда, с постановки задачи. Какой мы хотим получить результат?
- Как уже говорилось, нам необходимо реализовать аналог закладки "Торговля", то есть отображать на экране информацию о всех открытых позициях и отложенных ордерах.
- Информация должна постоянно обновляться и быть удобной для восприятия.
- Программа должна быть максимально легкой в использовании - её подключение к эксперту должно требовать минимум усилий.
Теперь можно задуматься о технической стороне вопроса. Как оформить программу, в виде индикатора или подключаемой библиотеки функций?
Очевидно, что индикатор в отдельном окне был бы оптимальным решением. Он всегда на виду, не закрывает график цены и обновляться на каждом тике. Но при использовании индикатора для нас возникает проблема - всю информацию об ордерах он берет не с "виртуального" (тестового) терминала, а с терминала обычного, то есть даже при тестировании он будет отображать информацию о текущем состоянии счета, никак не реагируя на ход тестирования.
Для решения поставленной задачи нам придется найти обходной путь.
Индикатор мы всё-таки создадим, но он будет выполнять только функцию "создателя подокна графика", он не будет ничего отображать, то есть у нас всегда будет "зарезервирована" часть графика. Это надо для того, чтобы созданное подокно с уникальным именем можно было сохранить в шаблоне tester.tpl либо в шаблоне <имя_эксперта>.tpl.
А вот отображение и обновление информации мы доверим библиотеке функций, оформленной в виде включаемого файла.
3. Использование
Для начала необходимо создать шаблон графика, который будет использовать визуализатор. Просто настройте внешний вид графика (цвета, линии сетки, масштаб), "прицепите" к нему индикатор vTerminal.mq4 и воспользуйтесь командой "Сохранить шаблон":
Окно сохранения шаблона:
При визуализации используется шаблон tester.tpl либо <имя_эксперта>.tpl, именно под этими именами надо сохранить наш шаблон.
4. Интеграция в эксперта
Функции, реализующие отображение информации о позициях, находятся во включаемом файле VisualTestingTools.mq4, который находится в директории ...\MetaTrader 4\experts\include\. Прежде всего надо "присоединить" его к эксперту - перед функцией старт вставить строку #include <visualtestingtools.mq4>. На примере эксперта CrossMACD_DeLuxe это будет выглядеть так:
... double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1; #include <visualtestingtools.mq4> int start() { if ( FastEMAPeriod >= SlowEMAPeriod ) { return(-1); } int _GetLastError = 0; ...
Теперь мы можем использовать функции в любой части программы. Вызов одной из них - vTerminalInit() - мы поместим в функцию init() эксперта - она должна вызываться всего один раз, так как её задача - создание объектов для отображения информации. Вторую - vTerminalRefresh() - необходимо вызывать каждый тик. Она будет обновлять информацию об открытых позициях. Код эксперта, использующего функции, будет выглядеть так:
... double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1; #include <visualtestingtools.mq4> int init() { if ( FastEMAPeriod >= SlowEMAPeriod ) { return(-1); } vTerminalInit(); return(0); } int start() { if ( FastEMAPeriod >= SlowEMAPeriod ) { return(-1); } vTerminalRefresh(); int _GetLastError = 0; ...
Вы можете скачать эксперта CrossMACD_DeLuxe_Visual.mq4, в котором все необходимые изменения уже сделаны.
5. Тестирование
Теперь давайте посмотрим, что у нас получилось.
Во-первых, в эксперте добавились новые внешние переменные:
После включения в код эксперта файла VisualTestingTools.mq4 добавились новые внешние переменные.
Их назначение интуитивно понятно, но я всё же расскажу о них подробнее:
- Rows — максимальное количество строк, отображаемых на экране. Для большинства стратегий достаточно 10 строк;
- BigText — установите true, если хотите сделать размер шрифта больше;
- SignalPoints — расстояние в пунктах, начиная с которого будут "подсвечиваться" поля Стоп Лосс, Тейк Профит и Цена открытия для отложенных ордеров. Например, при SignalPoints = 10 поле Стоп Лосс изменит цвет, когда цена будет в 10-ти пунктах от уровня Стоп Лосс позиции;
- MainColor — цвет "шапки" терминала (заголовочная строка) и строки информации о торговом счёте (Баланс, Эквити, ...).
- BuyColor — цвет информации о Buy-позициях;
- BuyOPColor — цвет поля Цена открытия, на который будет меняться основной цвет при приближении текущей цены к уровню открытия Buy Stop и Buy Limit - ордеров.
- BuySLColor — цвет, на который будет меняться основной цвет при приближении цены к уровню Стоп Лосс Buy-позиций.
- BuyTPColor — цвет, на который будет меняться основной цвет при приближении цены к уровню Тейк Профит Buy-позиций.
- SellOPColor, SellSLColor и SellTPColor — то же самое, только для Sell-позиций.
Установим MainColor = Black и нажмем кнопку "ОК". Теперь эксперт готов к тестированию. Перед нажатием кнопки "Старт", устанавливаем галочку "Визуализация", и наслаждаемся результатом:
Пока нет открытых позиций, наш "терминал" показывает только заголовочную строку и строку состояния счета. Давайте подождём, пока появится сигнал и эксперт откроет позицию.
Первой открылась селл-позиция. Как видите, строка красного цвета.
Обратите внимание на строку состояния счета. В ней есть всё, что мы привыкли видеть на закладке "Торговля" терминала. Вся информация обновляется каждый тик и вы можете видеть, как меняется прибыль позиции:
Когда цена подходит к уровню Стоп Лосс позиции, поле StopLoss меняет цвет на установленный в настройках:
Как по мне, получилось очень неплохо.
6. Возможные проблемы
Стоит упомянуть об одной особенности, связанной с использованием шаблона tester.tpl с индикатором vTerminal: при тестировании функция, отвечающая за поиск окна индикатора (WindowFind()) не работает. Поэтому номер подокна задаётся в коде явно:
win = WindowFind( "vTerminal" ); if ( IsTesting() ) { win = 1; }
Если в шаблоне будут присутствовать другие индикаторы, рисующиеся в отдельном окне, вся информация о позициях будет выводиться в верхнем из них. То есть надо либо vTerminal делать "первым" (верхним), либо вместо win = 1; написать win = номер подокна.
Других проблем в работе с индикатором не наблюдалось.
7. Заключение
В завершение статьи приведу ещё несколько скриншотов - они будут красноречивее любых слов.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования