English 中文 Español Deutsch 日本語 Português
Тестирование экспертов в клиентском терминале MetaTrader 4. Взгляд изнутри

Тестирование экспертов в клиентском терминале MetaTrader 4. Взгляд изнутри

MetaTrader 4Тестер | 13 августа 2006, 19:17
8 661 4
Slava
Slava

Чтобы провести тестирование, необходимо открыть окно "Тестер", если оно ещё не открыто. Сделать это можно несколькими способами: из главного меню выбрать "Вид-Тестер стратегий", комбинация клавиш Ctrl+R, кнопка "Тестер стратегий" на панели инструментов, из контекстного меню графика, к которому присоединён эксперт выбрать "Советники-Тестирование стратегии" либо нажать клавишу F6.

Перед началом тестирования необходимо выбрать советника. Советника можно выбрать из выпадающего списка, либо перетащить советника мышкой из окна "Навигатор" и бросить его в окне "Тестер". Таким же способом можно выбрать символ инструмента для тестирования - выбрать из выпадающего списка либо перетащить символ из окна "Обзор рынка". Нажатие на клавишу F6 позволяет одновременно выбрать советника, символ и период активного графика, для этого к активному графику должен быть присоединён советник.

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

static datetime prevtime=0;
...
if(prevtime == Time[0]) return(0);
prevtime = Time[0];

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

При нажатии на кнопку "Старт" сначала формируется тестовая последовательность изменения цены, которая кешируется в файле с расширением FXT. Все FXT-файлы сохраняются в директории <client_terminal_dir>\tester\history и имеют имя типа SSSSSSPP_M.fxt, где:

  • SSSSSS - символ тестируемого инструмента;
  • PP - значение периода тестируемого инструмента в минутах;
  • M - модель тестирования (0 - "Все тики", 1 - "Контрольные точки", 2 - "По ценам открытия").

В заголовке FXT-файла записываются текущие настройки финансового инструмента и текущего аккаунта. Эти настройки клиентский терминал получает автоматически от торгового сервера, таким образом при тестировании будет воспроизведена реальная работа сервера - расчёты маржевых требований, ролловеров, комиссий, налогов и т.д. Если в данный момент нет связи, то используются последние известные настройки того торгового сервера, к которому в последний раз был подключен клиентский терминал. FXT-файл формируется каждый раз заново при нажатии на кнопку "Старт". Возникает вопрос: зачем же нужен этот файл, если он каждый раз создаётся заново? Во-первых, тиковых данных может быть так много, что все они целиком не поместятся в оперативной памяти компьютера, поэтому необходимо внешнее хранилище, откуда данные будут браться порциями, особенно это важно при оптимизации. Во-вторых, у нас есть возможность проконтролировать, какую последовательность сгенерировал тестер. Этот файл можно открыть автономно, чтобы визуально проконтролировать моделирование развития ценовых баров.


Зачем же каждый раз пересчитывать уже существующие данные?

  • Во-первых, очень часто существует необходимость тестирования на самых последних исторических данных.
  • Во-вторых, очень часто при первоначальном формировании ежетиковых данных не все данные меньших таймфреймов могут быть закачаны с сервера к моменту формирования тестовой последовательности. Дело в том, что подкачка данных асинхронна, так как сервер не уведомляет клиента о том, что все запрошенные данные переданы. Но мы можем быть уверены, что через 1-2 минуты все запрошенные данные получены.
  • В-третьих, и это наиболее существенный момент, пользователь может иметь счета у разных брокеров. У разных брокеров могут отличаться не только условия торговли (напоминаем, что в заголовке FXT-файла хранится очень важная информация для имитации работы торгового сервера), но и объём и качество исторических данных.
  • В-четвёртых, очень часто в клиентском терминале одновременно присутствуют рассогласованные данные разных таймфреймов из разных источников. Проблема стала особенно актуальной после того, как в клиентском терминале появилась возможность закачки большого объёма истории по основным валютным парам. Многие трейдеры, работая с реальным брокером, закачивали данные с сервера MetaQuotes. Это - очень существенный момент, влияющий на качество моделирования. Для привлечения внимания к этой проблеме тестер ведёт учёт ошибок рассогласования данных разных таймфреймов. Что это за ошибки? Например, выход цены за пределы High и Low генерируемого бара, превышение тикового объема генерируемого бара.

Необходимо пояснить, как формируется тестовая последовательность, если используются начальная и конечная даты (должна быть включена соответствующая настройка, галочка "Использовать дату"). Тестовая последовательность начинается не с начальной даты. Перед тем как начать генерацию тиков, тестер помещает 1 тысячу готовых немоделируемых баров в начало последовательности. Если начальных баров меньше, то используются все бары от начала истории, но не меньше 100. Таким образом, если начальная дата установлена слишком близко относительно начала всей истории, то генерация тиков может начаться позже указанной даты. Мы должны обеспечить как минимум 100 баров до начала теста. Начальные бары в последовательности необходимы для того, чтобы у эксперта была возможность правильно посчитать индикаторы, основанные на предыдущих данных (особенно это касается скользящих средних). Вот как выглядит сгенерированная последовательность развития бара на основе смоделированных тиков с установленной начальной датой 2007.08.01:

Моделирование прекращается при достижении конечной даты. Ценовые данные с 0:00 конечной даты в тестировании не участвуют и в сгенерированную последовательность не попадают. Если указаны даты, выходящие за пределы истории или использование дат не включено, то в генерации участвует вся история (за исключением первых 100 баров). Настройка максимального количества баров на графике не имеет никакого значения для моделирования - используется вся история, хранящаяся на диске.

Если при формировании тестовой последовательности оказывается, что соответствующих исторических данных меньше, чем 100 баров, то в журнале тестирования появится сообщение "TestGenerator: deficient data", и тестер не будет запущен. Также возможна ситуация, что данных совсем нет, часто из-за неправильно указанного диапазона дат, и в журнале тестера появится сообщение "TestGenerator: no history data". В этих случаях необходимо обеспечить необходимое количество исторических данных, для этого можно открыть соответствующий график и вручную, клавишей PageUp, подкачать данных. После этого заново запустить тестер.

Перед запуском тестера необходимо установить входные параметры тестируемого эксперта. Особое внимание необходимо обратить на валюту депозита. Например, при открытом аккаунте типа micex, тестирование эксперта на символе GAZP не даст результата, если в качестве валюты депозита не указать RUB (это значение можно ввести вручную, несмотря на то, что его нет в выпадающем списке):


Вкладка "Входные параметры" будет присутствовать только в том случае, если в эксперте объявлены внешние переменные. Разные наборы значений входных параметров можно сохранять в set-файлы под разными именами (кнопка "Сохранить") и в дальнейшем их использовать (кнопка "Загрузить").


Нажатие на кнопку "Изменить эксперта" вызовет редактор MetaEditor с открытым для редактирования тестируемым экспертом. Эта кнопка, как и другие, блокируется при запуске тестера. Однако редактор MetaEditor всё равно позволит перекомпилировать эксперта, даже если эксперт находится в процессе тестирования. При следующем запуске тестера перекомпилированный эксперт автоматически перезагрузится для тестирования.

После того, как процесс тестирования завершён, можно открыть график с нанесёнными на него стрелочками торговых операций и использованными в процессе тестирования индикаторами. Однако, есть проблема с тем, что использованные в процессе тестирования индикаторы будут отображены с умолчательной расцветкой. Например, если использовались скользящие средние с разными периодами усреднения, то все они будут отрисованы красным цветом, что не очень удобно. Можно вручную поменять цвета индикаторов, но есть другой выход. Если заранее создать шаблон <имя_эксперта>. tpl (например, Moving Average.tpl) с нанесёнными индикаторами, то этот шаблон будет использован при открытии "тестового" графика. При отсутствии соответствующего шаблона будет применён шаблон tester.tpl.

Тестер стратегий поддерживает так называемую визуализацию процесса тестирования.


Если включена галочка "Визуализация", то при старте тестера автоматически открывается "отладочный" график с применением шаблонов <имя_эксперта>. tpl или tester.tpl. На графике отображается текущее состояние тестовой последовательности. Изменение скорости отображения достигается путём использования бегунка слайдера, влево - замедление, вправо - ускорение. Для паузы можно нажать кнопку "||" либо клавишу Pause на клавиатуре, для возобновления после паузы - нажать кнопку ">>" либо, опять же, клавишу Pause. В состоянии паузы можно нажать клавишу F12, таким образом можно обеспечить ручную пошаговую визуализацию. Можно указать дату и нажать кнопку "Пропустить до". В этом случае пока тестер не дойдёт до указанной даты, перерисовка графика осуществляться не будет, что значительно ускоряет процесс. После завершения процесса тестирования (в том числе по нажатии кнопки "Стоп") на графике будет отображено состояние исторических данных на момент остановки.

При просмотре графика тестирования двойной клик мышью на каком-либо его участке обеспечивает переключение на вкладку результатов и выделение соответствующей позиции. Если был открыт график тестирования (включение галочки "Визуализация", либо после нажатия кнопки "Открыть график"), то двойной клик на какой-либо позиции во вкладке "Результаты" переместит график на соответствующую дату.

Для того, чтобы провести оптимизацию торговой стратегии, необходимо выполнить как минимум 2 действия. Отметить галочку "Оптимизация" во вкладке "Настройки" и в свойствах эксперта во вкладке "Входные параметры" настроить начальные и конечные значения, а также шаг изменения оптимизируемых параметров.


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


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

Довольно частой причиной заявлений "оптимизатор стратегий не работает" является как раз то, что по умолчанию неудачные результаты в список не попадают. В этом случае в журнале тестера появится сообщение "NNN results have been discarded as insignificant".

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

Необходимо отметить, что выполнение одиночного прогона тестера вызовет безусловный пересчет тестирующей последовательности тиков. Поэтому при следующем запуске оптимизатора кеш оптимизатора будет сброшен и начнёт формироваться заново!

Тестер не может контролировать изменение библиотек второго и выше уровня (то есть библиотеки, которые вызываются из библиотек)! Поэтому, в таких случаях необходимо сбрасывать кеш самостоятельно, например путём перекомпиляции эксперта. Файлы кешированных данных оптимизатора хранятся в директории tester\caches

Кеширование результатов оптимизации помогает также и при включении генетического алгоритма. Генетический алгоритм оптимизации включается в свойствах эксперта во вкладке "Тестирование".


Параметры генетического алгоритма определяются автоматически.
  • Размер популяции зависит от количества всех возможных сочетаний параметров и может принимать значения от 64 до 256.
  • Минимальное количество поколений зависит от размера популяции и может принимать значения от 15 до 31.
  • Таким образом, минимальное количество проходов генетического оптимизатора колеблется в диапазоне от 960 до 7936.
  • Вероятность скрещивания равна 100 процентам. Гены скрещиваются случайным образом, при этом особь не может скрещиваться сама с собой.
  • Вероятность мутации равна 10 процентам.
  • Вероятность инверсии равна 10 процентам.
  • Генетическая оптимизация прекращается, если на протяжении 10 поколений не было улучшения генофонда, при условии, что было сформировано минимальное количество поколений.

Журнал тестирования находится в директории tester\logs. Файлы журнала тестирования имеют расширение log. Каждому дню соответствует отдельный log-файл. Логи тестера уничтожаются автоматически через 5 дней. Также в контекстном меню вкладки "Журнал" можно выбрать пункт "Стереть все журналы". Текущее содержимое вкладки "Журнал" будет уничтожено, все log-файлы будут стёрты.

Так как в процессе тестирования возможен массовый вывод информации в журнал, то не вся информация может попасть во вкладку "Журнал", но гарантированно попадает в log-файл. При оптимизации вывод в журнал не производится.

После завершения тестирования можно освободить больше неиспользуемую тестером оперативную память. Для этого достаточно закрыть окно "Тестер" либо из главного меню, либо комбинацией клавиш Ctrl-R либо при помощи кнопки "Тестер стратегий" на панели инструментов.

Последние комментарии | Перейти к обсуждению на форуме трейдеров (4)
Andrey Khatimlianskii
Andrey Khatimlianskii | 13 авг. 2006 в 21:48
Очень хочется увидеть "Визуализацию" )
С нетерпением ждём 196-го билда =)
Andrey Opeyda
Andrey Opeyda | 17 авг. 2006 в 08:43
komposter:
Очень хочется увидеть "Визуализацию" )
С нетерпением ждём 196-го билда =)

в 195-м за 14 августа глянь
Mykola Bilak
Mykola Bilak | 24 авг. 2006 в 23:54
что-то вы с кешированием эксперта в тестере намудрили. приходится рестартовать МТ.
билд 195 от 23/08/06
Slava
Slava | 25 авг. 2006 в 01:11
nickbilack, а можно более подробно про проблему с кешированием? на stringo AT metaquotesw DOT ru

Мы кеширование очень давно не трогали
Торговые стратегии Торговые стратегии
Все разнообразные категории, используемые для классификации торговых стратегий, полностью произвольны. Следующая классификация призвана подчеркнуть основные различия в возможных подходах к торговле.
Десять основных ошибок начинающего трейдера Десять основных ошибок начинающего трейдера
Десять основных ошибок начинающего трейдера: торговля на открытии рынка, поспешность в снятии прибыли, добавление к убыточной позиции, закрытие позиций начиная с лучшей, жажда мести, наличие особо предпочтительных позиций, торговля по приципу 'купил навсегда', закрытие прибыльной стратегической позиции в первый день, закрытие позиции по сигналу на открытие противоположной позиции, сомнения.
Визуализация тестирования. Расширение функциональности. Визуализация тестирования. Расширение функциональности.
В статье описаны программные средства, которые помогут сделать тестирование стратегий максимально похожим на реальную торговлю.
Секреты клиентского терминала MetaTrader 4 Секреты клиентского терминала MetaTrader 4
21 способ облегчить себе жизнь: скрытые возможности терминала МетаТрейдер 4. Полноэкранный режим; горячие клавиши; строка быстрой навигации; миминимизация окон; избранное; уменьшение трафика; отключение новостной рассылки; наборы символов; окно котировок; шаблоны для тестовых и автономных графиков; профили; перекрестие; электронная линейка; пролистывание графика побарно; история счета на графике; типы отложенных ордеров; редактирование Стоп Лосс и Тэйк Профит; отмена удаления; печать графиков.