Визуализация тестирования. История сделок.
1. Мотивация
В клиентском терминале MetaTrader 4 появилась функция визуализации тестирования. Она позволяет контролировать процесс тестирования экспертов на качественно новом уровне. Теперь трейдер-программист может наблюдать за каждым действием своего эксперта, проверяя его работу на истории!
Об использовании визуализатора вы можете прочитать в статье
В моей предыдущей статье
2. Задача и реализация
Для начала нам придется смириться с тем, что точную копию «Истории счета» мы сделать не сможем. Для этого пришлось бы писать сложную программу с использованием dll. Да это и ни к чему, так как закладка «Результаты» тестера содержит практически всю информацию о совершенных операциях.
Наша же задача заключается в отображении актуальной информации на экране. Это может быть очень удобно при анализе работы эксперта. Теперь не будет необходимости постоянно переключаться между закладками.
Поскольку места на экране не много, а прокрутку экрана нормально реализовать достаточно сложно, мы будем отображать только часть истории — на виду будут исключительно самые свежие события.
Остается напомнить, что для создания подокна, в котором будет отображаться история, необходимо создать индикатор, и, прикрепив его к графику, сохранить шаблон под именем tester.tpl либо в шаблоне <имя_эксперта>.tpl (вы можете скачать индикатор прямо из статьи).
Сохранение шаблона для тестирования
Теперь можно заняться подготовкой эксперта.
В этом тоже нет ничего сложного:
- сохраняем файл VisualTestingTools.mq4 в директорию …\MetaTrader 4\experts\include\;
- добавляем в эксперта строку #include <VisualTestingTools.mq4> — теперь содержимое файла будет «включено» в код эксперта;
- и вставляем вызовы функций, отвечающих за обновление истории сделок, в функции init() и start() эксперта.
... double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1; #include <VisualTestingTools.mq4> int init() { if(FastEMAPeriod >= SlowEMAPeriod) return(-1); vTerminalInit(); vHistoryInit(); return(0); } int start() { if(FastEMAPeriod >= SlowEMAPeriod) return(-1); vTerminalRefresh(); vHistoryRefresh(); int _GetLastError = 0; ...
3. Тестирование
Давайте теперь попробуем протестировать нового эксперта. Для этого откроем окно тестера стратегий, выберем из выпадающего списка эксперта CrossMACD_DeLuxe_VisualHistory и нажмем на кнопку свойства.
Окно тестера стратегий
У эксперта появилось несколько новых внешних переменных — они объявлены во включаемом файле VisualTestingTools.mq4. Часть из них предназначена для управления закладкой Терминал, часть — для закладки История счета, но большинство — общие:
TerminalRows - максимальное количество строк закладки Терминал, отображаемых на экране. Если установить TerminalRows = 0, терминал обновляться не будет;
- HistoryRows - максимальное количество строк закладки История счета, отображаемых на экране. Если установить HistoryRows = 0, история счета обновляться не будет;
- BigText - установите true, если хотите сделать размер шрифта больше;
- SignalPoints - расстояние в пунктах, начиная с которого будут «подсвечиваться» поля Стоп Лосс, Тейк Профит и Цена открытия для отложенных ордеров. Например, при SignalPoints = 10 поле Стоп Лосс изменит цвет, когда цена будет в 10-ти пунктах от уровня Стоп Лосс позиции;
- ShowCancelled - установите true, если хотите видеть в истории сделок отмененные ордера;
- ShowExpired - установите true, если хотите видеть в истории сделок отложенные ордера, у которых наступило время истечения;
- MainColor - цвет заголовочных строк Терминала и Истории счета и строки информации о торговом счёте Терминала (Баланс, Эквити, …).
- BuyColor - цвет информации о Buy-позициях;
- BuyOPColor - цвет поля Цена открытия закладки Терминал, на который будет меняться основной цвет при приближении текущей цены к уровню открытия Buy Stop и Buy Limit — ордеров.
- BuySLColor - для закладки «Терминал»: цвет, на который будет меняться основной цвет при приближении цены к уровню Стоп Лосс Buy-позиций. Для закладки «История счета»: цвет, на который будет меняться основной цвет, если Buy-позиция закрылась по Стоп Лоссу;
- BuyTPColor - то же, что и BuySLColor, применительно к Тейк Профиту позиций;
- SellOPColor, SellSLColor и SellTPColor - то же самое, только для Sell-позиций.
Устанавливаем значения переменных на свое усмотрение и нажимаем «ОК». Проверяем, установлена ли галочка «Визуализация», и запускаем тестирование:
Визуализация тестирования: окна «Терминала» и «Истории счета» загружены
Эксперт открыл позицию, и она отобразилась в «Терминале»
Как только позиция закрылась, она «перекочевала» в Историю счета, а на её место пришла другая.
Обратите внимание, что поле StopLoss подсвечено красным — позиция была закрыта по Стоп Лоссу.
Вторая позиция закрылась, на этот раз по Тейк Профиту.
Обратите внимание, что последние позиции отображаются сверху в Истории счета.
Таким образом, мы всегда будем видеть самые свежие события.
Так выглядит наш виртуальный Терминал спустя несколько минут.
4. Возможные проблемы
Проблема, описанная мной в статье
vHistory_win = WindowFind( "vHistory" ); if ( IsTesting() ) { vHistory_win = 2; }
5. Заключение
Ниже приведены скриншоты, иллюстрирующие закладку «История счета» в разных ситуациях.



