English 中文 Español Deutsch 日本語 Português
Визуализация тестирования. Расширение функциональности.

Визуализация тестирования. Расширение функциональности.

MetaTrader 4Тестер | 18 августа 2006, 10:49
5 633 1
Andrey Khatimlianskii
Andrey Khatimlianskii

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 &gt;= 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 &gt;= SlowEMAPeriod )
{
return(-1);
}
vTerminalInit();
return(0);
}
int start()
{
if ( FastEMAPeriod &gt;= 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. Заключение

В завершение статьи приведу ещё несколько скриншотов - они будут красноречивее любых слов.






Прикрепленные файлы |
vTerminal.mq4 (0.56 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (1)
Andrey Khatimlianskii
Andrey Khatimlianskii | 18 авг. 2006 в 14:22
Обсуждение - на форуме
Секреты клиентского терминала MetaTrader 4: Система оповещений Секреты клиентского терминала MetaTrader 4: Система оповещений
Как быть в курсе происходящего в терминале и на Вашем счете без постоянного созерцания монитора. Системные события; пользовательские события; звуковые и исполняемые файлы; электронные письма; настройка доступа к SMTP-серверу; публикации; настройка доступа к FTP-серверу.
Торговые стратегии Торговые стратегии
Все разнообразные категории, используемые для классификации торговых стратегий, полностью произвольны. Следующая классификация призвана подчеркнуть основные различия в возможных подходах к торговле.
Книга 'Энциклопедия торговых стратегий', Джеффри Оуэн Кац, Донна Л. МакКормик Книга 'Энциклопедия торговых стратегий', Джеффри Оуэн Кац, Донна Л. МакКормик
«Энциклопедия торговых стратегий» ориентирована на трейдеров и финансовых аналитиков, которые стремятся повысить эффективность и надежность работы на финансовых и товарных рынках. Джеффри Кац и Донна Маккормик, имея немалый опыт торговли на фьючерсных рынках, тщательно исследуют методы и стратегии, которые, по мнению широкой публики, должны показывать выдающиеся результаты. Строгий анализ, основанный на тестах с использованием исторических данных по большому спектру рынков, развенчивает многие мифы и является основой научного подхода к построению разнообразных торговых систем. В книге содержатся рекомендации по улучшенным методам контроля риска, показаны рискованные и потенциально убыточные методики, способные привести к разорению. Книгу можно использовать и как справочник по существующим на сегодняшний день торговым стратегиям и методам, и как руководство по построению оригинальных торговых систем.
Тестирование экспертов в клиентском терминале MetaTrader 4. Взгляд изнутри Тестирование экспертов в клиентском терминале MetaTrader 4. Взгляд изнутри
Что происходит после нажатия на кнопку "Старт"? В статье дан ответ на этот и многие другие вопросы.