4. Проектирование и тестирование торговых систем

 4. Проектирование и тестирование торговых систем


4.1. Тест системы.

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

Используя Метасток можно:
• разработать торговую систему, задавая и модифицируя собственные правила торговли;
• протестировать торговую систему;
• проверить результаты тестирования и просмотреть характер исполнения торговых правил на графиках цен при помощи стрелок покупки/продажи и линии баланса (equity line) на графике, а также при помощи табличных отчетов;
• автоматически оптимизировать параметры торговых правил, чтобы улучшить результаты;
• сравнить различные торговые системы, чтобы определить ту, которая лучше всего работает на данном рынке в определенном периоде исторических данных.

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

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

Перед тем как приступить к изучению материалов раздела, необходимо отметить тот факт, что не существует ни безупречных механических торговых систем, ни торговых советников. Рынки все время меняют свои характеристики, и успех разработанной МТС будет зависеть от того, насколько существенные характеристики и параметры динамики рынка она использует для генерации торговых сигналов, и от того, насколько эти характеристики сохранятся в будущем.

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

Конечно, Метасток не обладает всеобщей универсальностью и не охватывает абсолютно все виды ТА и методы построения торговых стратегий. Но даже в рамках существующих инструментов количество возможных торговых стратегий, доступных к реализации и тестированию в Метасток, не поддается исчислению.

4.2. Тестер систем.

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

И еще одно замечание. Возможностей и функций у тестера систем очень много и детальное описание всего, что он может, заняло бы огромное количество времени и места. Поэтому в приведенныом ниже материале будет уделено внимание только основные варианты применения тестера систем (этого вполне достаточно для работы, остальное оставим на будущее).


4.2.1.Правила для записи условий совершения сделок

Для записи условий, по которым совершаются сделки, используются следующие операции и функции.

1. Логические операции:

< - меньше;
> - больше;
<= - меньше или равно;
>= - больше или равно;
= - равно;
<> - не равно;
AND - оператор логического умножения И – одновременного выполнения условий;
OR - оператор логического сложения ИЛИ – выполнения хотя бы одного условия;
IF(F,a,b) - оператор выполнения условия F (если F истинно, то оператор принимает значение a, если ложно, то b).

2. Арифметические операции:

+ - операция сложения;
- - операция вычитания;
* - операция умножения;
/ - операция деления.

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

3.Функция Cross.

Cross (A,B) – генерирует сигнал «истина», когда A пересекает B снизу вверх.
Если нам необходим сигнал, когда A пересекает B сверху вниз, то достаточно переставить в выражении для функции аргументы и записать Cross (B,A).

4. Функция Alert

Функция Alert используется в сочетании с другими функциями, чтобы возвратить значение «истина» для определенного числа периодов. Функция возвращает значение «истина» за определенное число периодов, даже если была генерирована другая торговая операция.

Alert (v>500,N) – генерирует сигнал «истина» в течение N периодов при выполнении условия в скобках, т.е. выполнение условия V>500 возвращает с помощью функции Alert значение «истина» в течение всех N интервалов независимот от фактического значения объема в это время.

Пример использования функции Alert для записи правила открытия длинной позиции:

Enter Long: RSI(14) < 30 AND alert(VOLUME > 500,3)

При использовании этой формулы, как правила для входа в длинную позицию система должна открыть таковую, если RSI меньше 30 и объем был больше 500 в какой либо из трех предыдущих торговых дней.


4.2.2. Основные этапы создания торговой системы

Процедура тестирования включает следующие основные этапы (эти этапы описываются детально в последующем изложении, не стоит пробовать выполнить их сейчас).
• Этап 1. Создание торговой системы посредством задания торговых правил (кондиций), по которым должны открываться и/или закрываться длинные и короткие позиции.
• Этап 2. Задание стопов для торговой системы, чтобы автоматически закрывать позиции.
• Этап 3. Тестирование системы. Во время тестирования система может находиться в состоянии длинной или короткой позиции, а также без открытых позиций. В результате теста Метасток определит размер прибыли или убытка, которые могли быть получены на исторических данных при использовании заданныъх торговых правил. Отметим, что имеется возможность задания размера спреда и комиссии, а также проскальзывания при открытии и закрытии сделок.
• Этап 4. Изучение результатов теста. Во время тестирования Метасток сохраняет всю информацию относительно совершенных транзакций и можно вывести отчет, чтобы проверить условия и корректность сделок, совершенных системой, и при необходимости внести изменения в торговые правила.
• Этап 5. Оптимизация торговых правил. Оптимизация поможет определить оптимальные торговые параметры для использования в торговых правилах.

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

4.2.3. Диалог тестера систем

Диалог тестера систем вызывается из основного меню командой «Инструменты»>>«Расширенны й тест системы» или кнопкой  на панели иснтрументов (рис.4.1.).



Рис.4.1.

Диалог «Тестера систем» (рис.4.2.) позволяет создавать, редактировать, копировать и удалять тесты, проводить тестирование, изучать результаты тестирования, сравнивать тесты для различных систем и инструментов, выводить формулы тестов и результаты тестированияна экран и на принтер.
Первоначально диалог «Тестера систем» показывает список различных торговых систем и команды основного меню в верхней и нижней частях части окна диалога.



Рис.4.2.

New System. Вызывает диалог «System Editor», в котором можно задавать имя и определять правила для нового теста системы.

Edit. Вызывает диалог «System Editor», в котором можно редактировать выбранный тест системы.

Copy. Используется для того, чтобы сделать копию выбранного теста системы. Выбор этой опции приводит в диалог «System Editor», где можно редактировать скопированный тест системы

Delete. Используется для удаления выбранных тестов систем.

Organizer. Используется для отображения диалога Formula Organizer Wizard, с помощью которого можно импортировать и экспортировать тесты систем, пользовательские индикаторы и советники (эксперты).

Print. Используется для печати информации по выбранным тестам систем.

New Simulation. Используется для того, чтобы запустить процесс тестирования выбранного теста (тестов).

View. Просмотр результатов тестирования.

Help. Открывает справочную систему.

4.2.4. Создание новой системы

Чтобы создать новую систему, необходимо вызвать команду «New System» в диалоге «System Tester». После этого на экране появится диалог «System Editor» (рис.4.3).



Рис.4.3.

Диалог «System Editor» предлагает ввести имя системы, ее краткое описание и определить четыре торговых правила. В этом же диалоге можно просматривать и редактировать все введенную информацию.
В торговых правилах используется синтаксис формул подобный синтаксису для разработки пользовательских индикаторов, который рассмотрен нами в предыдущих разделах.

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

«Order Bias». Иногда торговая система может выдавать одновременно сигнал и на покупку и на продажу. С помощью опции «Order Bias» можно задать порядок действий тестера в такой ситуации, т.е. какой сигнал выбирать, на покупку ( «Long Orders») или на продажу («Short Orders»);

«Portfolio Bias». С помощью этой опции задается правило, по которому закрываются все существующие позиции при открытии позиции противоположного направления (опция «Single») или можно разрешить одновременное существование длинных и коротких позиций (опция «Multiple»);

«Position limit». С помощью этой опции задается запрет на открытие новых однотипных позиций до того, как закрыты уже открытые. Можно указать допустимое количество одновременно открытых позиций. Если флажок в окошке не установлен, то по умолчанию может быть открыто до 65536 одновременно открытых позиций.


Вводим имя системы, например «Моя первая система», и переходим к заданию правил торговли.

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

В редакторе содержится четыре закладки, которые позволяют выбрать тип правила, задать для него формулу и при необходимости отредактировать ее.

Buy Order. (Вход в длинную позицию) Это правило указывает, когда система должна открыть длинную позицию.

Sell Order. (Выход из длинной позиции) Это правило указывает, когда система должна закрыть длинную позицию. Если система находится в короткой позиции или «вне рынка», это правило игнорируется.

Sell Short Order. (Вход в короткую позицию) Это правило указывает, когда система должна открыть короткую позицию.

Buy to Cover Order. (Выход из короткой позиции) Это правило указывает, когда система должна закрыть короткую позицию. Если система находится в длинной позиции или «вне рынка», это правило игнорируется.


Для ввода торговых правил выбираем необходимую закладку, например Buy Order, (рис.4.4).



Рис.4.4.

Все закладки однотипны и содержат поле для ввода формулы с кнопкой выбора функций «Functions» (как и в диалогах конструктора индикаторов) и выбора типа ордера, с которым мы будем работать.
Используем активированнкю по умолчанию опцию рыночного ордера «Market», остальные поля пока не трогаем, нам они не понадобятся.


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

Итак, выбираем закладку Buy Order и вводим торговое правило для входа в длинную позицию (рис.4.5):

Cross(close, mov(close,21,exponential))

Написанное выше правило означает: «Войти в длинную позицию, если цена закрытия пересечет снизу вверх 21-периодную экспоненциальную скользящую среднюю».



Рис.4.5.

Запись формул для торговых правил практически ничем не отличается от записи формул для пользовательских индикаторов. Как и при создании пользовательских индикаторов можно использовать аббревиатуру «C» вместо «Close» и «E» вместо «Exponential».

Вводим необходимую информацию еще для трех правил, выбирая соотвествующие закладки:

Sell Order: cross(mov(close, 21, exponential), close)
Sell Short Order: cross(mov(close, 21, exponential), close)
Buy to Cover Order: cross(close, mov(close, 21, exponential))

Если все четыре правила введены правильно, нажимаем «ОК».
Если в правилах имеется синтаксическая ошибка, то будет выведено сообщение об ошибке. Необходимо нажать «ОК» в ответ на сообщение об ошибке и редактор перенесет курсор на то место, где существует ошибка. Ошибку необходимо исправить и вновь нажать «ОК».


4.2.5. Некоторые комментарии к синтаксису торговых правил.

Как мы уже упоминали выше, синтаксис торговых правил практически не отличается от синтаксиса пользовательских индикаторов и написания формул.
Особенность в том, что торговые правила в качестве результата всегда возвращают значение «истина» или «ложь». Если правило возвращает значение «истина», то соответствующая торговая операция выполняется (покупка, продажа и т.п.). Если возвращается «ложь», никаких действий не производится.

Следующий пример иллюстрирует торговое правило:

Buy Order: cross(CLOSE, mov(CLOSE,12,E))

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

Подобно этому можно написать другое правило: открыть длинную позицию, если MACD больше 0. («macd()» - является встроенной функцией).

Buy Order: macd() > 0

В составе торговых правил могут использоваться все пользовательские функции для индикаторов (подобно macd() в приведенном выше примере). Формулы также могут содержать ссылки на другие формулы типа fml(), как показано ниже:

Sell Short Order: fml("My Formula") > 0

Можно комбинировать несколько функций в одном торговом правиле используя операторы AND и OR как показано ниже.

Buy Order: macd() > 0 AND CLOSE > mov(CLOSE,12,E)

Приведенное выше правило требует, чтобы MACD было больше 0, и чтобы цена закрытия была больше ее 12-периодной скользящей средней.

Следующее правило использует оператор «OR», чтобы генерировать торговую операцию, когда MACD падает ниже 0, или когда цена закрытия падает ниже ее скользящей средней.

Sell Order: macd() < 0 OR CLOSE < mov(CLOSE,12,E)

В торговом правиле может присутствовать несколько операторов AND, OR.
В этом случае для задания последовательности их выполнения необходимо пользоваться скобками, как показано ниже:

Buy Order: (macd() > 0 AND C > 100) OR H-L>5

Это торговое правило генерирует торговую операцию, если выполняются следующие условия:
MACD больше 0 и цена закрытия больше100 (т.е. выполнены оба условия) или когда, разница максимальной и минимальной цен больше 5.

Щелчок по клавише «Functions» в процессе написания или редактирования торговых правил вызывает диалог вставки функций, уже рассмотренный нами при изучении пользовательских индикаторов и содержащий список имеющихся функций. Двойной щелчок по имени функции вставит ее в торговое правило на место текущей позиции курсора.

Торговое правило может оставаться пустым. Однако, пустое торговое правило никогда не генерирует торговых операций.

Торговые правила имеют доступ только к ценам, встроенным функциям и пользовательским индикаторам. Торговые правила не могут ссылаться сами на себя (например, на число дней от последней торговой операции). Эти функции выполняются с помощью различного рода стопов и функции Alert, которая позволяет повысить гибкость торговых правил.


4.2.6. Редактирование, копирование и удаление систем

4.2.6.1. Редактирование.
Чтобы отредактировать существующую систему, изменить ее название, правила и условия выполнения теста, необходимо выбрать в колонке слева систему, которую необходимо редактировать, например «Моя первая система», и вызвать команду «Edit…» в диалоге «System Tester».
После этого на экране появится диалог «System Editor» (рис.4.6) с загруженной для редактирования торговой системой.



Рис.4.6.

Вносим необходимые изменения и нажимаем клавишу «ОК». Если нет ошибок в синтаксисе и формула, диалог редактора закрывается и редактирование закончено.
Отметим, что с помощью клавиш CTRL или SHIFT и мышки для редактирования можно выбрать сразу целую группу торговых стратегий из колонки слева в диалоге «System Tester». В этом случае отобранные торговые стратегии будут появляться в диалоге «System Editor» последовательно, в порядке расположения их в списке торговых стратегий. Этот режим удобен, если мы хотим изменить для различных стратегий некоторые общие правила выполнения тестов, например, изменить число допустимых одновременно открытых позиций «Position limit» и т.п.


4.2.6.2. Копирование и удаление систем
Копию выбранного теста системы можно сделать при помощи кнопки «Copy» диалога «System Tester». Это полезно в тех случаях, когда синтаксис нового теста системы похож на синтаксис уже созданного теста.



Рис.4.7.

Например, если система «Моя первая система» похожа на новую систему, котору мы собираемся создавать, необходимо в диалоге «System Tester» выделить имя системы «Моя первая система» и щелкнуть по кнопке «Copy». В списке систем появится «Copy of «Моя первая система», в которой с помощью редактора «System Editor» можно изменить имя, внести необходимые изменения в формулу и нажать клавишу «ОК».

Удаление тестов систем производится выбором объектов для удаления и нажатием кнопки «Delete» в диалоге «System Tester». После нажатия кнопки удаления Местаток выдаст запрос на подтверждение команды удаления выбранного теста системы. Вместе с тестом удаляются и отчеты по тесту.


4.3. Использование стопов

В дополнении к торговым правилам каждая торговая система может иметь до пяти типов стопов.

Стопы используются для того, чтобы закрыть позицию на основании данных о прибыли/убытках во время торговой операции. Например, стоп максимального убытка «Maximum Loss» закроет позицию, если убытки будут больше специфицированной величины.

Когда вызывается стоп, позиция закрывается независимо от текущего статуса торгового правила.

Можно задавать параметры стопов, а также тип позиции (длинная и/или короткая), которая закрывается данным стопом.

Стопы автоматически учитывают спред или комиссионные за открытие и закрытие позиции. Например, стоп максимального убытка (Maximum Loss) учитывает величину комиссионных за закрытие позиции и следит за тем, чтобы не была превышена величина максимально возможного убытка даже после уплаты комиссионных.

Установка стопов производится выбором закладки «Stops» в диалоге «System Editor» (рис.4.8).



Рис.4.8.


4.3.1. Безубыточный стоп (Breakeven)

Этот стоп закрывает открытую позицию, как только возникает угроза убытков по отношению к балансу, существовавшему на момент открытия позиции.

Стоп располагается на цене, где позиция может быть закрыта с сохранением текущего баланса (т.е. баланса при открытии позиции).

Чтобы избежать активации этого стопа каждый раз при открытии позиции (т.к. величина баланса из-за спреда и/или комиссионных при открытие позиции уменьшается), этот стоп «включается» только когда повышается цена инструмента и позиция становиться прибыльной или же величина прибыли повышается выше уровня (floor level), заданного пользователем.

Если «floor level» установить на 0, то безубыточный стоп может активироваться после точки, где позиция может быть закрыта без потерь.


4.3.2. Инактивация (Inactivity)

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

Для данного стопа задаются минимальное изменение цены (Minimum Change), длительность периода (Periods) и метод (Method), при помощи которого рассчитывается минимальное изменение цены (проценты (Percentage) или абсолютные единицы (Points)). Например, если задать 1% в качестве минимального изменения цены в течении 20 торговых дней, то Метасток автоматически закроет позицию, если изменение цены инструмента будет менее 1% в положительном направлении в течении 20-дневного срока с момента открытия позиции.

Этот стоп анализирует, только изменение цены и игнорирует комиссионные и спред.


4.3.3. Максимальный убыток (Maximum loss)

Этот стоп закрывает позицию, если величина убытков превышает максимально установленное значение (Maximum Loss).

Например, если установить «Maximum Loss» - 5%, позиция будет закрыта, если изменение цены в убыточном направлении превысит 5% от от точки входа в рынок (включая спред и комиссионные).

Примечание. Если установить значение «Maximum Loss» меньше или равно величине спреда и комиссионных за вход в позицию, то каждая торговая операция будет прерываться немедленно после открытия позиции, т.к. все операции будут убыточными уже в момент входа в позицию.


4.3.4. Плановая прибыль (Profit target)

Этот стоп закрывает позицию, если достигнут уровень запланированной прибыли.
Например: если запланировать 10% роста цены, то открытые позиции будут закрыты при ее 10-процентном увеличении с учетом комиссионных.


4.3.5. Трейлинг-стоп (Trailing)

Этот стоп закрывает позицию, когда происходит потеря определенного количества накопленной текущей прибыли. Каждый раз, когда прибыль позиции достигает нового максимума, то этот стоп подтягивается на уровень, определенный в «Profit Risk» относительно этого нового максимума. Величина возможной потери задается в поле «Profit Risk» при помощи процентного метода или абсолютных значений.

Метасток также предоставляет возможность задать число периодов в течении которых стоп будет игнорироваться. Например, если задать «4», то стоп начнет работать по истечении 4-х периодов графика.



4.4. Оптимизация систем

Оптимизация подразумевает замену фиксированных параметров в правилах торговой системы на ОРТ-переменные, а затем задание диапазона значений, которые могут принимать эти переменные. Метасток во время тестирования системы с OPT-переменными последовательно выполняет ряд тестов, во время которых подставляются значения OPT-переменных из заданного диапазона.
Для примера рассмотрим созданную нами систему под именем «Моя первая система», которая генерирует сигналы покупки/продажи на основе 21-периодной скользящей средней.
Рассмотрим, как можно оптимизировать торговые правила, чтобы определить оптимальный период усреднения в используемой торговой системе.

4.4.1. Ввод оптимизационных переменных

Выбираем «Моя первая система» в диалоге «System Tester» и нажимаем клавишу «Copy», а затем клавишу «Edit». Редактируем назвиние скопированной системы, меняя его на «Моя первая система OPT». Затем во всех четырех торговых правилах заменим число 21 на выражение «ОРТ1» (оптимизационная переменная №1), как показано на рисунке 4.9.



Рис.4.9.


Далее выбираем закладку «Optimizations». Появится диалог «Optimization Variables» (рис.4.10).



Рис.4.10.

Щелкаем по клавише «Edit». Появится диалог «Variable Properties» (рис.4.11).



Рис.4.11.

Пусть нам нужно протестировать систему, в которой скользящая средняя имеет периоды от 15 до 50 с шагом 1 (т.е. 15,16,17 и т.д.).
Вводим «Период скользящей средней» в качестве описания переменной «ОРТ1», 15 в качестве минимального значения (Minimum), 50 в качестве максимального (Maximum), а значение шага установим 1 (Step), как показано на рисунке 4.11.
Нажимаем клавишу «ОК».


Необходимо обращать внимание на общеее число тестов (Total Tests) расположенное в нижней части диалога рис.4.12



Рис.4.12.

Это число указывает, какое количество тестов будет авполняться (в нашем случае 36). Значение этого числа необходимо проверять каждый раз после редактирования переменных оптимизации, т.к. очень легко создать систему, которая будет генерировать громадное количество тестов.
Нажимаем клавишу «ОК» и возвращаемся в диалог «System Tester» (Рис.4.13).



Рис.4.13.

Далее можно переходить к тестированию системы с оптимизацией.


4.5. Тестирование – диалоги и опции

4.5.1. Выбор и запуск теста

Для того чтобы запустить тест системы, необходимо находясь в окне диалога «System Tester» выделите необходимое имя теста, например «Моя первая система», в колонке слева и нажать клавишу «New Similation» (рис.4.14).



Рис.4.14.

После нажатия клавиши «New Similation» на экране появляется диалог, в котором можно подтвердить выбор тестируемой системы, заменить ее на другую систему, или выбрать несколько систем (рис.4.15).



Рис.4.15.

Если все выбрано правильно и все остальные опции теста были установлены ранее, то можно в диалоге рис 4.15 нажать клавишу «Start» и приступить к тестированию.
Можно нажать клавишу «Отмена» и вернуться в диалог «System Tester» (рис.4.14).
Мы нажмем клавишу «Далее», поскольку у нас никакие опции еще не устанавливались, и перейдем в диалог выбора и добавления финансовых инструментов, на которых будет проводиться тестирование.


4.5.2. Диалог выбора данных для проведения теста

Если это первый запуск тестера, то окно диалога со списком отобранных финансовых инструментов, скорее всего, будет пустым (рис.4.16).



Рис.4.16.

Нажимаем клавишу добавления финансовых инструментов «Add Secutities» и переходим к диалогу проводника Windows, показанному на рисунке рис.4.17, в котором нам необходимо указать на компьютере путь к файлам, в которых хранятся исторические данные по котировкам финансовых инструментов в формате Метасток, и выбрать необходимый файл или группу файлов.
Примечание. Если программа используется в режиме с автоматической подкачкой данных, да пожалуй, и во всех остальных случаях тоже, целесообразно создать отдельный каталог для файлов с историческими данными в формате Метасток, предназначенными для использования в тестах систем. Такую копию можно создать с помощью средств Downloader.



Рис.4.17.

Выбираем для примера файл D_EURUSD, в котором в предлагаемом примере хранятся данные графика дневного масштаба для инструмента EURUSD, и нажимаем клавишу «Open» диалога проводника, возращаясь к диалогу выбора и добавления финансовых инструментов.


Теперь основное окно диалога (рис.4.18) уже не пустое, в нем находится файл с отобранными для теста данными по EURUSD.



Рис.4.18.

Проверяем правильность выбора инструментов.
Клавишей «Add Secutities» мы можем добавить дополнительные файлы с данными для теста, клавишей «Remove All» удалить все инструменты из окна, а клавишей «Remove» удалить выделенные.
Однако нам более важна клавиша «Dates», с помощью которой мы можем настроить диапазон данных для проведения теста (настройка диапазона важна для секционирования данных при проведении оптимизации систем).


4.5.3. Задание диапазона данных.

Нажимаем клавишу «Dates».



Рис.4.19

Нажимаем клавишу «Dates».
В появившемся диалоге «Simulation Dates» (см. рис.4.19) можно по выбору пользователя задать начальную и конечную точку диапазона данных, которые будут использоваться для тестирования, либо количество используемых доступных данных в конце диапазона (Метасток разрешает допустимый размер диапазона данных для тестирования не более 50000).
Выбираем последнюю опцию, задаем диапазон 1000 периодов, нажимаем «ОК» и возвращаемся к предыдущему диалогу, но с уже заданным диапазоном данных для тестирования в количестве 1000 последних периодов (рис.4.20).



Рис.4.20.

Если все остальные опции были уже установлены, то на этом этапе можно было бы нажать клавишу «Start» и приступить к тестированию. Но мы еще завершили установку опций, поэтому продолжим настройку тестера и нажмем клавишу «Далее».


4.5.3. Диалог установки опций тестирования.

Нажимаем клавишу «Далее» в диалоге рис.4.20 и переходим к диалогу настройки опций тестирования (рис.4.21).



Рис.4.21.

Первая опция касается метода учета торговых сделок (Trading).
Здесь можно активировать режим «Points Only Test» и считать результаты торговли в пунктах.
Если режим «Points Only Test» не выбран, то учет сделок ведется по денежному балансу.
Необходимо отметить, что режим «Points Only Test» более объективен и универсален, поскольку показывает результат торговли в чистом виде, в пунктах, без эффектов кредитного плеча. Кроме того, этот метод позволяет проводить тесты не только прибыльных, но и убыточных систем, так как растущий убыток не прекращает работу тестера в режиме «Points Only Test».

Следующая опция - «Portfolio», касается вида торговой стратегии.
Некоторые стратегии предназначены для использования только при торговле длинными позициями (особенно это характерно для фондового рынка), другие только короткими, а третьи допускают использование и покупок и продаж. Мы на этом этапе выберем опцию «Both», допускающую использование, как покупок, так и продаж инструмента, и поставим галочку, активируя опцию «Close all positions on the last bar» (закрыть все позиции на последнем баре тестируемого временного интервала).

И последняя опция диалога «Results» касается вида тестирования и объема хранимых результатов.
Выбирая «Quick Test» мы будем проводить «быстрый тест» с сохранением для последующего анализа только результатов сделок. Если опция «Quick Test» не выбирается, то компьютер сохраняет подробный результат проведения теста с состоянием торговой системы и баланса для каждого бара тестируемого временного интервала. Это требует больше времени для проведения теста и больше памяти для хранения результатов.
Кроме того, в поле этой опции можно задать количество наиболее прибыльных результатов, которые будут храниться в памяти для каждой из оптимизируемых систем. Запишем в это поле значение 1000 и закончим настройку опций в рамках этого диалога.

Из этого диалога также можно перейти к режиму тестирования, нажав клавишу «Start», но мы еще закончили установку всех опций. Нажимаем клавишу «More…».


4.5.4. Задание спреда, комиссий и условий исполнения ордеров

После нажатия клавиши «More…» мы переходим к диалогу, показанному на рисунке 4.22.



Рис.4.22

В диалоге две закладки, «Broker» и «Trade Execution».
В первой из них нас будет интересовать опция «Comissions», с помощью которой можно задать комиссионные и спред при открытии и закрытии позиции. Комиссию и спред можно задавать в процентах или в пунктах, в зависимости от того, какой вариант нам более подходит. Если тестирование идет на одном инструменте, то лучше использовать абсолютные величины. Если на группе инструментов с разной абсолютной величиной пункта, то придется использовать процентный способ задания комиссий и спреда с усредненными по группе инструментов параметрами.
В частности, если мы тестируем стратегию на EURUSD со спредом 2пп, то вариант заполнения полей опции «Comissions» может быть таким, как показано на рисунке 4.23.



Рис.4.23.

Поля «Interest Rates» и «Margin Requirements» становятся активными, если мы выбрали режим тестирования и учета сделок по денежному балансу. Поскольку мы этот метод не используем, то нас эти поля в дальнейшем интересовать не будут.


В закладке «Trade Execution» (рис.4.24) мы можем задать проскальзывание при исполнении ордеров, чтобы более приблизить тест к реальной торговле, а также цены и по которым будут открываться позиции и задержку исполнения ордера.



Рис.4.24.

Типовой вариант – это цена закрытия бара, на котором сформировано торговое условие (в поле задержки ставится нуль), или цена открытия следующего, после формирования торгового условия, бара (в поле задержки в этом случае нужно поставить 1).

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

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

Задав все необходимые параметры, нажимаем клавишу «ОК» и возвращаемся к диалогу рисунка 4.21.
Теперь мы можем нажать клавишу «Start» и приступить к выполнению теста системы.


Итак, все опции заданы, параметры тестирования установлены.
Нажимаем клавишу «Start».
В правом нижнем углу окна Метсаток появляется маленькое окошко, показанное на рисунке 4.25, в котором указано имя тестируемой в настоящее время системы и ход процесса тестирования.



Рис.4.25.

После завершения теста в правом нижнем углу окна программы (см. рис.4.26) появляется сообщение о том, что тест завершен и предлагается посмотреть результаты теста «View Results».
Мы обязательно посмотрим их, но уже в следующем разделе курса.



Рис.4.26.


4.6. Начинаем строить свои системы

Сейчас мы убедимся, насколько просто строить и тестировать торговые системы в Метасток.

Откроем в Метасток график какого либо инструмента, для определенности EURUSD дневного масштаба, и настроим отображение элементов графика в виде японских свечей (рис.4.27).



Рис.4.27. График EURUSD с отображением в виде японских свечей

С чего начинается построение торговой системы? Как мы помним, с торговой идеи, с того, что мы начинаем отвечать на вопрос: «А что если…?».
График у нас чист, никаких аналитических линий и индикаторов на нем нет, глазу не за что зацепиться, кроме самого графика. С графика и начнем.


4.6.1.1. Торговая модель (идея):
При восходящем тренде цена рынка в среднем растет, при нисходящем - падает.
В качестве признака роста примем следующее:
- если цена закрытия текущей свечи выше цены закрытия предыдущей, то это и будет признаком восходящего тренда;
- если цена закрытия текущей свечи ниже цены закрытия предыдущей, то это будет признаком нисходящего тренда.
Это и будет нашей торговой идеей.
Теперь нужно перейти к формальной записи этого условия, что легко сделать, воспользовавшись оператором сдвига (см. справочный раздел):

C>ref(C,-1) - восходящий тренд
C<ref(C,-1) - нисходящий тренд

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


4.6.1.2. Торговые правила:
Вызываем диалог тестера систем (рис.4.28) и нажимаем кнопку «New», т.е. мы будем строить новую систему.



Рис.4.28. Диалог тестера систем – ввод торговых правил и названия системы

В закладке «General» задаем имя нашей системы – «Простейшая МТС - Цена закрытия», а в закладках для торговых правил записываем формулы, определяющие условия совершения сделок, т.е. задаем торговые правила:

Buy Order (Вход в длинную позицию): C>ref(C,-1)
Sell Order (Выход из длинной позиции): C<ref(C,-1)
Sell Short Order (Вход в короткую позицию): C<ref(C,-1)
Buy to Cover Order (Выход из короткой позиции): C>ref(C,-1)

Нажимаем «ОК». Претезий по синтаксису торговых правил нет, система готова к тестированию (рис.4.29).



Рис.4.29. Диалог тестера – система готова к тестированию


4.6.1.3. Результаты тестирования.
Приступим к тестированию.
Нажимаем клавишу «New Simulation», загружаем исторические данные по EURUSD (1000 последних свечей графика до 7 октября 2011 года включительно), задаем торговлю в обоих направлениях, спред 2пп и нулевое проскальзывание, и запускаем тест.

Несколько секунд и готов результат (график эквити с обозначенными сигналами входов и выходов из рынка приведен на рисунке 4.30).



4.30. Отображение результатов сделок - график эквити.

Проанализируем полученные результаты.

Сначала избранные цифры:

Система провела на 1000 свечей 535 сделок.
Уплачено комиссии (спреда) - 1070пп.

Прибыльных сделок - 164.
Средняя прибыль на сделку – 155пп.
Максимальная прибыль на сделку – 1255пп.

Убыточных сделок – 371.
Средний убыток на сделку – 76пп.
Максимальный убыток на сделку – 355пп.

Результат торговли – убыток 2744пп.


Предварительные выводы.

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

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


4.6.1.4. Анализ условий и причин убыточной торговли
Из графика рис.4.30 можно видет, что одним из типовых режимов, когда система приносит убыток, является торговля в боковом тренде.
Более детальный анализ входов и выходов в увеличенном масштабе показывает, что цена закрытия в этих режимах то растет, то падает от бара к бару, а вслед за ней «пилит» профит и система (рис.4.31).



Рис.4.31.

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



Рис.4.32.

Итак, наша задача – модифицировать систему таким образом, чтобы колебания оказывали меньшее влияние на прибыльность системы. Этим мы и займемся в следующей версии системы. 


4.6.2. Пример простейшей механической торговой системы с оптимизацией

4.6.2.1. Торговая модель (идея).
Напомним нашу цель – модифицировать простейшую торговую систему таким образом, чтобы:
- колебания и небольшие откаты не приводили к преждевременному выходу из сделки на тренде и не уменьшали совокупную прибыль;
- уменьшить количество сделок.

Какие факторы нам могут помочь в этом?
Первое, что приходит на ум, это тот факт, что при тренде цена в среднем, несмотря на откаты, возрастает. Поэтому, чтобы устранить влияние откатов, можно сравнивать текущую цену закрытия не с ценой закрытия предыдущего интервала, а с ценой, которая была N интервалов назад (фактически эту операцию выполняет классический индикатор Момент (momentum) - см. справочный раздел).

В этом случае незначительные по уровню откаты не будут приводить к выходу из позиции, а торговую модель (без использования индикатора Момент) можно записать в виде:

C>ref(C,-N) - восходящий тренд;
C<ref(C,-N) - нисходящий тренд.


4.6.2.2. Торговые правила.
Перед тем, как записывать торговые правила, зададимся вопросом, какой должна быть величина N, чтобы обеспечить наилучшие условия работы торговой стратегии?

Можно пройти от бара к бару по графику рис 4.30, выделяя и анализируя условия совершения сделок и собирая статистику условий торговли, а затем принять соответствующее решение. Но это долгий и кропотливый труд с непредсказуемым результатом, как из-за объема работы, так и из-за того, что при таком анализе графика можно упустить существенные особенности проведения сделок и возможности улучшения алгоритма торговли.

Мы мы поступим более простым и экономным путем, который кроме всего прочего, обеспечит более высокую достоверность анализа – используем возможности оптимизации.

В этом случае торговые правила примут вид:

Buy Order: C>ref(C,-opt1)
Sell Order: C<ref(C,-opt1)
Sell Short Order: C<ref(C,-opt1)
Buy to Cover Order: C>ref(C,-opt1)

Задаем диапазон изменения переменной оптимизации, например, от 1 до 15 (рис.4.33).



Рис.4.33.

Нажимаем «ОК». Претензий по синтаксису торговых правил нет, система готова к тестированию.


4.6.2.3. Результаты тестирования.
Запускаем тест, и нажимаем клавишу «View», чтобы отобразить сводные результаты тестирования (рис.4.34).



Рис.4.34.

Результаты тестирования на рис.4.34 упорядочены по возрастанию значения переменной оптимизации.
Анализ приведенных данных показывает, что наша исходная система при N=1 для данного диапазона данных показывает наихудшие реультаты из всех проведенных тестов.
Причина может быть в том, что на рынке присутствует цикл с периодом 2 дня и проводимые сделки на участках бокового тренда совершаются в противофазе с этим циклом. Косвенным подтверждением этого является тот факт, что при N=2 прибыльность системы резко возрастает.


В целом все тесты, за исключением N=1 и N=11 показали профит на заданном интервале исторических данных. Можно предположить, что на рынке присутствует еще один цикл с периодом близким к 22 дням, а работа с N=11 приводит к противофазным сделкам для этого цикла.

Основанием для существования такого цикла является тот факт, что 22 дня – среднее количество рабочих дней месяца, во время которых функционирует рынок, т.е. мы имеем дело с месячным циклом.

Этот факт мы проверим позднее, а сейчас сгруппируем тесты по мере убывания прибыльности системы (рис.4.35) и проанализируем результаты наиболее прибыльного из них.



Рис.4.35.


4.6.2.4. Результаты тестирования для лучшего теста.
Выбираем верхнюю строчку в списке рис.4.35 и нажимаем клавишу «Plot on Chart».
Получаем график эквити с обозначенными сигналами входов и выходов из рынка, который приведен на рисунке 4.36.



Рис.4.36.

Результат явно лучше, чем у предыдущей системы, график эквити которой представлен выше на рисунке 4.30.

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

Теперь некоторые цифры из отчета:

Система провела на 1000 свечей 171 сделку.
Уплачено комиссии (спреда) - 342пп.

Прибыльных сделок - 64.
Средняя прибыль на сделку – 255пп.
Максимальная прибыль на сделку – 1172пп.

Убыточных сделок – 107.
Средний убыток на сделку – 125пп.
Максимальный убыток на сделку – 410пп.

Результат торговли – прибыль 3590пп.

Предварительные выводы.

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


4.6.2.5. Расширение диапазона изменения переменной оптимизации.
Теперь проверим наше предположение о возможном существовании прибыльной стратегии в окрестности значения переменной N=22. Никакой гарантии, что именно на N=22 нас будет ожидать профит нет. Поэтому расширяем диапазон изменения переменной оптимизации до 45.
Проводим тест, сводные результаты которого приведены на рис.4.37.



Рис.4.37.

Тесты на рисунке 4.37 упорядочены по возрастанию оптимизационной переменной.
Из представленных данных можно сделать вывод, что с ростом N прибыльность стратегии в среднем возрастает, т.е. тренды выделяются более надежным образом.
Сортировка тестов в порядке убывания профита выводит на первое место в списке торговую стратегию с N=21 (рис.4.38). Это не 22, как мы предполагали, но очень близкая к нашему предположению величина. Т.е. вероятнее всего эта стратегия торгует месячные циклы рыночных движений.



Рис.4.38.


Смотрим кривую эквити (рис.4.39) и результаты сделок для этого теста.



Рис.4.39.

Цифры из отчета:

Система провела на 1000 свечей 93 сделку.
Уплачено комиссии (спреда) - 186пп.

Прибыльных сделок - 35.
Средняя прибыль на сделку – 396пп.
Максимальная прибыль на сделку – 2798пп.

Убыточных сделок – 58.
Средний убыток на сделку – 114пп.
Максимальный убыток на сделку – 475пп.

Результат торговли – прибыль 7286пп.

Предварительные выводы.

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

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

Еще следует отметить, что данная стратегия не пропускает сильных трендов и практически полностью использует их потенциал.

Эту стратегию уже можно использовать для практической торговли (с некоторыми оговорками).


4.6.2.6. Расширение диапазона исторических данных.
Наши примеры тестирования торговых стратегий, приведенные в этом разделе, носят иллюстративный характер и проводся на локальном участке рынка длиной 1000 баров (свечей).

Корректная процедура проведения теста преполагает секционирование данных и проведение отдельных тестов на каждой секции, последовательно замещая часть объема старых данных новыми и наблюдая за эволюцией параметров системы от теста к тесту. Но на этом этапе – этапе иллюстрации возможностей работы с тестером мы заниматься секционированием данных не будем.

Единственное, что сделаем, это проверим работоспособность тестируемой торговой стратегии на всей доступной истории.



Рис.4.40.

Оптимальным параметром для всего диапазона исторических данных является N=25 – значение, которое обеспечиваем максимальный профит торговой стратегии.

Необходимо отметить, что система достаточно устойчива, так как в группе прибыльных находтся все стратегии с N близким к 25. Т.е. полученный результат по приблизительным оценкам является статистически устойчивым и не является результатом случайного стечения обстоятельств.

Число N=25 находится и среди наиболее прибыльных стратегий предыдущего теста (рис.4.38 - система со вторым по прибыльности результатом).



Рис.4.41.

Кривая эквити теста (рис.4.41) также близка к оптимальной зависимости (оптимальная – это прямая линия, которая идет из левого нижнего угла графика в правый верхний угол). Однако надо учитывать масштаб теста – график дневного масштаба почти за 20 лет. В некоторые годы система не приносила прибыли и даже уходила в локальные просадки, в другие – давала очень высокую прибыльность.

Цифры из отчета:

Система провела на 5000 свечей 376 сделок.
Уплачено комиссии (спреда) - 752пп.

Прибыльных сделок - 136.
Средняя прибыль на сделку – 279пп.
Максимальная прибыль на сделку – 1586пп.

Убыточных сделок – 240.
Средний убыток на сделку – 101пп.
Максимальный убыток на сделку – 684пп.

Результат торговли – прибыль 13693пп.


Сходные результаты показывает и тест на всей совокупности доступных исторических данных – 8769 баров до 07.10.2011 включительно (см. рис.4.42).



Рис.4.42.

Диапазон оптимальных значений неизменился при расширении объема данных почти вдвое, т.е. система демонстрирует устойчивость своих параметров. Более того, все значения N за исключением 1 и 2 на всей совокупности исторических данных обеспечивают прибыль, т.е. в целом, несмотря на локальные провалы, метод постенциально работоспособен практически при любых сдвигах N.




Рис.4.43.


Кривая эквити теста (рис.4.43) в глубокой исторической перспективе также близка к оптимальной зависимости.

Цифры из отчета:

Система провела на 8769 свечей 597 сделок.
Уплачено комиссии (спреда) - 1194пп.

Прибыльных сделок - 228.
Средняя прибыль на сделку – 285пп.
Максимальная прибыль на сделку – 1598пп.

Убыточных сделок – 369.
Средний убыток на сделку – 96пп.
Максимальный убыток на сделку – 694пп.

Результат торговли – прибыль 29524пп.

Таким образом, статистические характеристики сделок и оптимальные параметры системы практически не изменились при расширении диапазона данных почти вдвое.


Важное замечание.

При тестировании важно учитывать еще такое обстоятельство, как изменение параметров рынков, в частности волатильности.

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

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

Конечный тест, который проводится на всем массиве данных, носит по большей части справочный характер.


Рассмотрим еще несколько иллюстративных примеров.


4.6.3. Пример МТС с дополнительными условиями

4.6.3.1. Торговая модель (идея).
Добавим к алгоритму системы, рассмотренной в подразделе 4.6.2, дополнительное условие, определяющее признак тренда, например условие, характеризующее взаимное расположение цены и ее экспоненциальной скользящей средней – Moving Average (MA) (см. "Краткий курс начинающего трейдера").
Один из методов применения скользящих средних в техническом анализе использует следующие правила:
- если линия МА располагается ниже графика цен, то считается, что тренд направлен вверх;
- если линия МА располагается выше графика цен, то считается, что тренд направлен вниз.
Соответствующие торговые правила будут иметь вид:

C>Mov(C,N1, E) - восходящий тренд;
C<Mov(C,N1, E) - нисходящий тренд.

Дополним этими условиями торговую систему, рассмотренную в предыдущем подразделе, и получим:

- если C>ref(C,-N) и C>Mov(C,N1, E) - восходящий тренд;
- если C<ref(C,-N) и C<Mov(C,N1, E) - нисходящий тренд.


4.6.3.2. Торговые правила.
Перед тем, как приступить к записи торговых правил, учтем тот факт, что нам необходимо одновременно выполнение сразу двух условий, для того, чтобы мы могли провести сделку.
Объединить два условия можно при помощи AND - оператора логического умножения «И». В этом случае торговые правила примут вид:

Buy Order: (C>ref(C,-opt1)) AND (C>Mov(C,opt2, E))
Sell Order: (C<ref(C,-opt1)) AND (C<Mov(C,opt2, E))
Sell Short Order: (C<ref(C,-opt1)) AND (C<Mov(C,opt2, E))
Buy to Cover Order: (C>ref(C,-opt1)) AND (C>Mov(C,opt2, E))

Можно поступить еще проще, тривиально перемножая выражения, заключенные в скобки, друг на друга. Ведь только произведение двух единиц («Истина») даст в результате тоже единицу («Истина»), что нам и требуется:

Buy Order: (C>ref(C,-opt1))*(C>Mov(C,opt2, E))
Sell Order: (C<ref(C,-opt1))*(C<Mov(C,opt2, E))
Sell Short Order: (C<ref(C,-opt1))*(C<Mov(C,opt2, E))
Buy to Cover Order: (C>ref(C,-opt1))*(C>Mov(C,opt2, E))

Задаем диапазон изменения переменных оптимизации (рис.4.44).



Рис.4.44.

Нажимаем «ОК». Претезий по синтаксису торговых правил нет, система готова к тестированию.

Несколько замечаний о выборе диапазона переменных.
Диапазон переменной «Интервал N» мы немного сузили, отбросив заведомо убыточные варианты в начале диапазона и часть значений с большими задержками.
Диапазон переменной «Период MA», задающей параметры сглаживания скользящей средней, задан в общем-то достаточно произвольно – мы не знаем, как поведет себя система при тех или иных параметрах и хотим изучить этот вопрос.
Количество тестов в процессе процедуры оптимизации 372 – в принципе это немного и ждать нам долго не придется.
Приступаем к тестированию.


4.6.3.3. Результаты тестирования - предварительный анализ.
Запускаем тест, и нажимаем клавишу «View», чтобы отобразить сводные результаты тестирования (рис.4.45).



Рис.4.45.

Результаты тестирования на рис.4.45 упорядочены по убыванию прибыли.

Какие выводы можно сделать по результатам?

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

Более детальные выводы может дать сравнительный анализ полученных тестов с тестами для системы прототипа (рис.4.46) с тем же диапазоном изменения параметра N (переменной opt1).



Рис.4.46.

Сравнительный анализ результатов тестирования двух систем показывает, что введение дополнительного условия незначительно ухудшило прибыльность наилучшего теста системы-прототипа, но значительно подняло результирующий профит для близких к нему вариантов по значению параметра N.
Указанное обстоятельство является свидетельством возрастания статистической устойчивости торговой системы при введении скользящих средних в качестве дополнительного условия проведения сделок. Система стала менее чувствительной к случайным изменениям рыночной ситуации.


4.6.3.3. Результаты тестирования – анализ диапазона параметров.
Упорядочивание результатов тестов по возрастанию параметра N, представленное на рисунке 4.47, показывает, что более высокие значения профита сконцентрированы в зоне изменения переменной opt1 до 25, а провалы в зоне профита максимальное значение имеют в зоне до 15. Оставим диапазон изменения параметра от 15 до 25 .



Рис.4.47.


Аналогичная процедура, проведенная для параметра N1, дает зону лучших значений для периода скользящей средней в диапазоне выше 25 (см. рис.4.48). Причем, приближаясь к верхней границе диапазона на 60, профит незначительно спадает.
Уменьшим диапазон изменения и этого параметра, задавая нижнюю границу на 25, верхнюю - на 50, а шаг изменения попробуем уменьшить до 1.



Рис.4.48.


4.6.3.4. Результаты для модифицированного диапазона параметров.



Рис.4.49.

Максимальная прибыль еще немного увеличилась и получена она для значений opt1=18 и opt2 = 41. в целом, в этом диапазоне значений опитмизационных переменных провалы в профите от теста к тесту меньше.



Рис.4.50.

Кривая эквити теста (рис.4.50) близка к оптимальной. Относительные просадки невелики, тренды на данном участке диапазона выделяются и торгуются достаточно эффективно.

Цифры из отчета:

Система провела на 1000 свечей 40 сделок.
Уплачено комиссии (спреда) - 80пп.

Прибыльных сделок - 16.
Средняя прибыль на сделку – 712пп.
Максимальная прибыль на сделку – 1632пп.

Убыточных сделок – 24.
Средний убыток на сделку – 139пп.
Максимальный убыток на сделку – 366пп.

Результат торговли – прибыль 8047пп.

Следует отметить, что профит-фактор торговой системы больше 3, что является очень хорошим показателем, так же как и другие статистические характеристики системы.

Ну что, мы нашли Грааль?
Возможно, только это нужно проверить.
А как проверить? Нужно взять диапазон вне выборки. Более детальным исследованием стратегии в этом разделе мы заниматься не будем, просто возьмем более широкие диапазоны данных и посмотрим на поведение торговой системы.


4.6.3.5. Результаты для диапазона данных вне выборки.
Сводные результаты теста для диапазона данных 5000 баров приведены на рисунке 4.51.



Рис.4.51.

Максимальная прибыль выросла, но есть два неприятных сюрприза.
Первый – прибыльность части комбинаций значительно снизилась, а некоторые вообще стали убыточными.
И второй, гораздо более неприятный, максимальная прибыль получена для другой комбинации параметров, для значений opt1=24 и opt2 = 30.
О чем это говорит?
О том, что в предыдущем примере мы выбрали наилучшую комбинацию параметров системы, но эта комбинация является результатом подстройки под локальные параметры рынка и не факт, что эти параметры в будущем дадут такую же высокую эффективность, поскольку в прошлом они ее не давали бы.
Но где же результат системы с параметрами, которые мы определили в предыдущем примере, как оптимальные.
Он средний по прибыльности (8065пп) и располагается примерно в середине списка с упорядочиванием по убыванию профита (рис.4.52), обеспечивая примерно такой же размер прибыли, как и на интервале 1000 баров.



Рис.4.52.


Чтобы разобраться в причинах, почему не выросла прибыль, выведем график эквити (рис.4.53).



Рис.4.53.

И вот он сюрприз. Много-много лет в прошлом система торговала ни в прибыль, ни в убыток и вдруг пошел прибыльный участок.

Это та самая ловушка, обусловленная рассогласованием параметров индикаторной МТС и рынка, из-за которой возникают основные проблемы системной торговли. Потому что так же внезапно, как система начала приносить доход, она может перестать быть прибыльной.

Это основная проблема в механической системной торговле, основанной на использовании индикаторов, и мы к ней еще вернемся позже, когда начнем строить конкретные классы и типы торговых систем.

А пока проведем тест на всем интервале доступных исторических данных и проанализируем его результаты.


Сводные результаты теста для диапазона данных 8769 баров приведены на рисунке 4.54.



Рис.4.54.

Максимальная прибыль также выросла, и она опять получена для комбинации параметров opt1=24 и opt2 = 30.


Но где же результат системы с параметрами opt1=18 и opt2 = 41? Он тоже показал увеличение прибыли до 24460пп (рис.4.55) и находится в верхней трети списка по прибыльности.



Рис.4.55.


Опять смотрим график эквити (рис.4.56).



Рис.4.56.

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


Раз тестер усиленно толкает нас к варианту opt1=24 и opt2 = 30, смотрим эквити для этого варианта (рис.4.57). Если вспомнить, что в стратегии без дополнительного условия оптимальным значением N была величина 25 (opt1=25), то эта величина не такая уж случайная, и должна показать неплохой результат.



Рис.4.57.

Вроде бы все хорошо, в том числе и на конечном участке длиной 1000 баров, где поначалу тестировалась система. Но вот беда, в самом конце графика эквити есть провал.


Для того, чтобы лучше разобраться с причинами провала строим на графике цены экспоненциальную скользящую среднюю с периодом сглаживания 30 и график пользовательского индикатора момент с формулой:

N:=Input("N",100,24);
C-Ref(C,-N);

Смотрим конечный участок графика с нанесенными индикаторами в увеличенном масштабе (рис.4.58).



Рис.4.58.

Из представленных материалов видно, что система не справилась с колебаниями месячного цикла в широком диапазоне.
Это и не удивительно, ведь период момента у нас 24, т.е. на колебаниях месячного цикла он будет выдавать сигналы в противофазе с рынком. А скользящая средняя с периодом сглаживания 30 к таким колебаниям нечувствительна и ее влияние не смогло подавить эти сделки.


 Для подтверждения нашего предположения смотрим на графике другие участки с просадкой, например, рис.4.59.




Рис.4.59.

Картина аналогичная, опять колебания месячного цикла, хотя и с меньшей амплитудой.

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


4.6.4. Комбинирование условий.

Вспомним, с чего мы начали в п.4.6.2, перед тем как получить очень даже неплохой конечный результат в конечных подразделах п.4.6.3. Начали с простой и, казалось, очевидной идеи об определении направления тренда по ценам закрытия.

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

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

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

Вовсе не факт, что это не даст положительного результата. Мы знаем, что есть торговая стратегия черепашек, а есть торговая стратегия «Черепаховый суп», основанная на противоположных условиях совершения сделок. И обе они дают прибыль, только немного в разных условиях. А опыт и интуиция иногда обманывают.

Поэтому приступим к комбинированию, не вдаваясь в углубленный анализ результатов.


4.6.4.1. Зеркальная модель (или контр-трендовая для трендовых систем).
Зеркальная модель заключается в простой перемене местами правил для открытия и закрытия длинных и коротких позиций.

Применение «зеркальной» модели может быть особенно эффективным, в случае, когда первоначальная модель дает убытки.

В случае, когда первоначальная модель дает прибыль, тестирование «зеркальной» модели дает грубую оценку степени случайности полученного результата. Если результат теста «зеркальной» модели даёт стабильный убыток, то это еще один аргумент в пользу того, что мы на правильном пути. (Еще раз почеркнем, на рынке никогда ни в чем нельзя быть уверенным на 100%.)

Для варианта, рассмотренного в п.4.6.3, первоначальная торговая идея записывается следующим образом;

- если C>ref(C,-N) и C>Mov(C,N1, E) - восходящий тренд;
- если C<ref(C,-N) и C<Mov(C,N1, E) - нисходящий тренд.

Ее модификация для зеркального варианта будет иметь вид:

- если C>ref(C,-N) и C>Mov(C,N1, E) - продаем;
- если C<ref(C,-N) и C<Mov(C,N1, E) - покупаем.

Соотвественно торговые правила будут модифицированы следующим образом:

Buy Order: (C<ref(C,-opt1)) AND (C<Mov(C,opt2, E));
Sell Order: (C>ref(C,-opt1)) AND (C>Mov(C,opt2, E));
Sell Short Order: (C>ref(C,-opt1)) AND (C>Mov(C,opt2, E));
Buy to Cover Order: (C<ref(C,-opt1)) AND (C<Mov(C,opt2, E)).


Задаем диапазон переменных оптимизации (рис.4.60), такой же, как у первоначальных тестов системы-прототипа п.4.6.3, и нажимаем «ОК». Система готова к тестированию.



Рис.4.60.

Задаем длительность диапазона исторических данных 1000 баров и начинаем тестирование.



Рис.4.61.

Результаты теста, которые представлены на рисунке 4.61, показывают убыток при любых вариантах.

Перед тем, как окончательно отбросить «зеркальную» стратегию, проведем еще тест при малых значениях opt1 в диапазоне 1-10 (рис.4.62), т.е. там, где были убытки системы, основанной на индикаторе Момент.



4.62.

Вывод: это не тот, результат, который можно развивать и за который нужно бороться.


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

Соотвественно условия для входа в позицию имели вид:

- если C>ref(C,-N) и C>Mov(C,N1, E) - условие открытия длинной позиции;
- если C<ref(C,-N) и C<Mov(C,N1, E) - условие открытия короткой позиции.

Запишем условия для выхода из позиции в виде:

- если C<ref(C,-N) или C<Mov(C,N1, E) - условие закрытия длинной позиции;
- если C>ref(C,-N) или C>Mov(C,N1, E) - условие закрытия короткой позиции.

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

Торговые правила при этом примут вид:

Buy Order: (C>ref(C,-opt1)) AND (C>Mov(C,opt2, E))
Sell Order: (C<ref(C,-opt1)) OR (C<Mov(C,opt2, E))
Sell Short Order: (C<ref(C,-opt1)) AND (C<Mov(C,opt2, E))
Buy to Cover Order: (C>ref(C,-opt1)) OR (C>Mov(C,opt2, E))

где OR – оператор логического ИЛИ.

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

Аналогично, для короткой позиции продажа происходит в случае, когда и индикатор момент меньше нуля и цена закрытия ниже скользящей средней, а закрытие позиции jceotcndkztncz, когда хотя бы одно из условий не выполняется.


Создаем копию системы, модифицируем название и торговые правила и задаем диапазон изменения переменных оптимизации (рис.4.63).



Рис.4.63.


Запускаем сравнительный вариант двух тестов (сравнительный тест запускается при одновременном выборе всех систем в списке в левой колонке тестера) с одинаковыми диапазонами изменения оптимизационных переменных (рис.4.64).



Рис.4.64.

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

Нажимаем клавишу «View» и получаем сравнительную диаграмму усредненных результатов тестирования двух систем (рис.4.65):



Рис.4.65.

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

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



Рис.4.66. Тесты системы-прототипа



Рис.4.67. Тесты модифицированной системы с раздельным выходом.

Точно также, выбирая любую из строчек в таблицах нижней части рисунков 4.66 и 4.67 и нажимаяч клавишу «View» можно получить детальную информацию о ходе и результатах любого конкретного теста, сравнить и оценить параметры систем для соответствующих наборов оптимизационных переменных.

Однако, как мы помним из предыдущего материала, тестируемый интервал исторических данных длительность 1000 последних баров был достаточно специфическим – на нем система-прототип для оптимальной комбинации переменных обеспечивала профит после длительного периода бездействия. Так что вполне вероятно, что этот фактор сказался и на результатах сравнительного теста систем на этом же наборе данных, и система с раздельным выходом по этой причине не показывает лучшего результата.
Для проверки этого предположения проведем сравнительный тест на всем интервале доступных данных. Выбираем в опциях теста диапазон данных 50000 (реально в файле доступно 8769 баров) и получаем результат, показанный на рисунке 4.68.



Рис.4.68. Сравнительный тест систем на расширенном диапазоне данных.

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

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



Рис.4.69. Тесты системы-прототипа на расширенном диапазоне данных




Рис.4.70. Тесты модифицированной системы с раздельным выходом на расширенном диапазоне данных.

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

В заключение этого подраздела рассмотрим сравнительные данные по выборке сделок для двух систем.

Цифры из отчета для системы-прототипа:

Система провела на 8769 свечей 370 сделок.
Уплачено комиссии (спреда) - 740пп.

Прибыльных сделок - 134.
Средняя прибыль на сделку – 442пп.
Максимальная прибыль на сделку – 2524пп.

Убыточных сделок – 236.
Средний убыток на сделку – 121пп.
Максимальный убыток на сделку – 521пп.

Результат торговли – прибыль 30561пп.


Цифры из отчета для модифицированной системы с раздельным выходом:

Система провела на 8769 свечей 581 сделку.
Уплачено комиссии (спреда) - 1162пп.

Прибыльных сделок - 203.
Средняя прибыль на сделку – 289пп.
Максимальная прибыль на сделку – 1586пп.

Убыточных сделок – 378.
Средний убыток на сделку – 81пп.
Максимальный убыток на сделку – 347пп.

Результат торговли – прибыль 28205пп.


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


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

Рассмотрим еще два примера простых МТС для того чтобы проиллюстрировать применение некоторых технических приемов и перейдем к изучению основного материала курса.


4.6.5. Система на точках трехбарового разворота.

4.6.5.1. Определение точки трехбарового разворота.
Точками трехбарового разворота часто начинаются и заканчиваются свинги – короткие или длинные безоткатные участки трендов или тренды.
Примеры точек трехбарового разворота отмечены эллипсами на графике рисунка 4.71.



Рис.4.71. Примеры точек трехбарового разворота.

Для локального минимума точка трехбарового разворота означает выполнение условия: в последовательности из трех свечей цена L средней из них ниже двух соседних, а цена закрытия правой свечи выше цены закрытия средней.
Соотвественно, для локального максимума точка трехбарового разворота означает выполнение условия: в последовательности из трех свечей цена H средней из них выше двух соседних, а цена закрытия правой свечи ниже цены закрытия средней.


4.6.5.2. Торговая модель (идея).
Наша торговая идея для этого случая заключается в том, что мы будем пробовать торговать свинги – безоткатные движения (импульсы) между точками трехбарового разворота, характеризующими локальные максимумы и минимумы.
Осталось построить математическую модель точек трехбарового разворота.
Модель строится крайне просто с помощью логических операторов и оператора сдвига и для локального минимума имеет следующий вид:

((Ref(L,-2)>Ref(L,-1)) AND (Ref(L,-1)<L) AND (Ref(C,-1)<C)).

Два первых условия в приведенной формуле задают соотношение меду ценами L трех последовательных свечей (баров), а третье условие проверяет рост цен закрытия. Одновременное выполнение всех условий и характеризует точку трехбарового разворота.

Аналогичное выражение для локального максимума запишется следующим образом:

((Ref(H,-2)<Ref(H,-1)) AND (Ref(H,-1)>H) AND (Ref(C,-1)>C)).

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


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

Buy Order: ((Ref(L,-2)>Ref(L,-1)) AND (Ref(L,-1)<L) AND (Ref(C,-1)<C))
Sell Order: ((Ref(H,-2)<Ref(H,-1)) AND (Ref(H,-1)>H) AND (Ref(C,-1)>C))
Sell Short Order: ((Ref(H,-2)<Ref(H,-1)) AND (Ref(H,-1)>H) AND (Ref(C,-1)>C))
Buy to Cover Order: ((Ref(L,-2)>Ref(L,-1)) AND (Ref(L,-1)<L) AND (Ref(C,-1)<C))

Альтернативный вариант торговых правил получается заменой оператора AND знаком умножения:

Buy Order: ((Ref(L,-2)>Ref(L,-1)) *(Ref(L,-1)<L)*(Ref(C,-1)<C))
Sell Order: ((Ref(H,-2)<Ref(H,-1)) *(Ref(H,-1)>H)*(Ref(C,-1)>C))
Sell Short Order: ((Ref(H,-2)<Ref(H,-1)) *(Ref(H,-1)>H)*(Ref(C,-1)>C))
Buy to Cover Order: ((Ref(L,-2)>Ref(L,-1)) *(Ref(L,-1)<L)*(Ref(C,-1)<C))

Оба варианта полностью эквивалентны.



4.6.5.4. Результаты тестирования.
Результаты тестирования стратегии в виде графика эквити с обозначенными сигналами входов и выходов из рынка представлены на рисунке 4.72.



4.72. Отображение результатов сделок – график эквити.

Цифры из отчета:

Система провела на 1000 свечей 229 сделок.
Уплачено комиссии (спреда) - 458пп.

Прибыльных сделок - 80.
Средняя прибыль на сделку – 199пп.
Максимальная прибыль на сделку – 1041пп.

Убыточных сделок – 149.
Средний убыток на сделку – 136пп.
Максимальный убыток на сделку – 1064пп.

Результат торговли – убыток 4415пп.

Предварительные выводы.

Как и в случае с ценой закрытия, первоначальная торговая идея несовершенна.
Наблюдается явная переторговля – 229 сделок на 1000 свечей графика, но это уже не так много, как в случае использования цен закрытия.
В целом торговая система потенциально способна выделять тренды и полностью использовать их потенциал, но при ошибочном входе в рынок точно так же, почти до конца тренда, может держать убыточную позицию, о чем говорит примерно равный размер максимальной прибыльной и максимальной убыточной сделок.
В целом результат отрицательный и даже хуже, чем у самой первой рассмотренной системы по ценам закрытия (убыток 2744пп).
Проанализируем факторы, которые мешают получить прибыль, рассматривая график цены с нанесенными торговыми сигналами в увеличенном масштабе.


4.6.5.5. Анализ условий и причин убыточной торговли
Из графика рис.4.73 можно видеть, что одним из типовых режимов, когда система приносит убыток, является торговля в тренде с откатами, когда система преждевременно закрывает позиции с убытком и открывает контр-трендовые позиции, которые тоже закрываются с убытком.



Рис.4.73.

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


4.6.6. Система на точках трехбарового разворота с фильтром тренда.

4.6.6.1. Торговая модель (идея).
Добавим к алгоритму системы, рассмотренной в подразделе 4.6.5, дополнительное условие, определяющее признак тренда по взаимному расположению цены и ее экспоненциальной скользящей средней:
- если линия МА располагается ниже графика цен, то считается, что тренд направлен вверх;
- если линия МА располагается выше графика цен, то считается, что тренд направлен вниз.
Соответствующие торговые правила будут иметь вид:

C>Mov(C,N1, E) - восходящий тренд;
C<Mov(C,N1, E) - нисходящий тренд,

где N1 – период сглаживания скользящей средней.

Дополним этими условиями торговую систему на точках трехбарового разворота, рассмотренную в предыдущем подразделе, и получим:

- ((Ref(L,-2)>Ref(L,-1)) AND (Ref(L,-1)<L) AND (Ref(C,-1)<C)) AND (C>Mov(C,N1, E)) - условие покупок и закрытия коротких позиций на восходящем тренде;

- ((Ref(H,-2)<Ref(H,-1)) AND (Ref(H,-1)>H) AND (Ref(C,-1)>C)) AND (C<Mov(C,N1, E)) – условие продаж и закрытия длинных позиций на нисходящем тренде.

Торговые правила в этом варианте будут иметь вид:

Buy Order: ((Ref(L,-2)>Ref(L,-1)) AND (Ref(L,-1)<L) AND (Ref(C,-1)<C)) AND (C>Mov(C,opt1, E))
Sell Order: ((Ref(H,-2)<Ref(H,-1)) AND (Ref(H,-1)>H) AND (Ref(C,-1)>C)) AND (C<Mov(C,opt1, E))
Sell Short Order: ((Ref(H,-2)<Ref(H,-1)) AND (Ref(H,-1)>H) AND (Ref(C,-1)>C)) AND (C<Mov(C,opt1, E))
Buy to Cover Order: ((Ref(L,-2)>Ref(L,-1)) AND (Ref(L,-1)<L) AND (Ref(C,-1)<C)) AND (C>Mov(C,opt1, E))

где opt1 – переменная оптимизации.
Делаем копию исходной системы на точках трехбарового разворота, редактируем торговые правила, задаем диапазон изменения переменной оптимизации от 5 до 60 с шагом 5, и приступаем к тестированию.


4.6.6.2. Результаты тестирования.
Запускаем тест, и нажимаем клавишу «View», чтобы отобразить сводные результаты тестирования (рис.4.74).



Рис.4.74.

Анализ приведенных данных показывает, что наша исходная система при N от 35 и выше торговая стратегия становится прибыльной, а максимальная прибыльность достигается при значении параметра N=50.


Проверим устойчивость полученных результатов к случайным возмущениям, тестируя полученную систему в диапазоне знеачений переменной оптимизации от 25 до 60 с шагом 1.

Сводный результат теста, показанный на рисунке 4.75, указывает на неслучайный характер полученного результата (тесты упорядочены по возрастанию параметра N). Однако количество сделок, которые производит торговая система на заданном интервале данных сравнительно невелико, немного больше или меньше 30 в зависимости от значения параметра N.

Зона оптимальных значений параметра N сконцентрирована в диапазоне от 40 до 50.



Рис.4.75.


Кривая эквити для наиболее прибыльного теста для N=50, которая показана на графике рисунка 4.76, в целом характеризуется ростом, но имеет провалы.



Рис.4.76.

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


4.6.6.3.Модификация торговых правил и результаты.
Модифицированные торговые правила будут иметь вид:

Buy Order: ((Ref(L,-2)>Ref(L,-1)) AND (Ref(L,-1)<L) AND (Ref(C,-1)<C)) AND (C>Mov(C,opt1, E))
Sell Order: (((Ref(H,-2)<Ref(H,-1)) AND (Ref(H,-1)>H) AND (Ref(C,-1)>C)) AND (C<Mov(C,opt1, E))) OR Cross(Mov(C,opt1,E),C)
Sell Short Order: ((Ref(H,-2)<Ref(H,-1)) AND (Ref(H,-1)>H) AND (Ref(C,-1)>C)) AND (C<Mov(C,opt1, E))
Buy to Cover Order: ((Ref(L,-2)>Ref(L,-1)) AND (Ref(L,-1)<L) AND (Ref(C,-1)<C)) AND (C>Mov(C,opt1, E)) OR Cross(C,Mov(C,opt1,E))

где opt1 – переменная оптимизации.
Здесь мы использовали функцию Cross, которая выделяет момент пересечения двух графиков, в данном случае графика цены закрытия и графика экспоненциальной скользящей средней от цены закрытия.

Создаем копию исходной системы, меняем название, модифицируем правила и запускаем тестирование.


Сводный результат теста показан на рисунке 4.77.



Рис.4.77.

Сопоставление диаграмм рисунков 4.75 и 4.77 указывает на несомненный положительный эффект от нововведения:
- во-первых, уменьшился диапазон изменения параметра N, при котором система показывала убытки, и величина убытка;
- во-вторых, увеличилась прибыльность системы;
- в-третьих, увеличилось количество сделок, и соотношение средней прибыли к среднему убытку, т.е. убыточные сделки стали меньше по размеру.


Сравнительный визуальный анализ кривой эквити для этого случая при значении параметра N=50 (рис.4.78) с данными графика, представленного на рисунке 4.76, показывает, что планость кривой эквити после модификации стала больше, а прибыль на заданном диапазоне данных выросла почти на 25%.



Рис.4.78.


В заключение проведем сравнительный анализ исходной и модифицированной систем на точках трехбарового разворота для всего диапазона доступных данных
Результаты сравнительного теста представлены на диаграмме рисунка 4.79.



Рис.4.79.

И здесь модифицированная система показывает лучшие усредненные характеристики по всем параметрам.


Сводные результаты тестов, показанные на рисунках 4.80 (для модифицированной системы) и 4.81, показывают, что система сохранила устойчивость и на расширенном диапазоне данных.
Зона оптимальных значений параметра N по-прежнему сконцентрирована в диапазоне от 40 до 50, но для модифицированной системы оптимальная величина N ближе к 40, а для немодифицированной - к 50.



Рис.4.80. Сводные результаты тестов для модифицированной системы (упорядочены по росту N)




Рис.4.81. Сводные результаты тестов для немодифицированной системы (упорядочены по росту N)



В целом все неплохо, но следует посмотреть на поведение графика эквити.
Выбираем для модифицированной системы значение оптимума при N=42 и рисуем график (рис.4.82).



Рис.4.82.

Мда…
Вроде бы и неплохо, но почти четверть времени система находилась в затяжном флэте, не принося прибыли.


Может для немодифицированной системы результат лучше.
Выбираем значение оптимума при N=50 и рисуем график (рис.4.83).



Рис.4.83.

И здесь аналогичный результат с несущественными отличиями.
Что делать?
Этот вопрос мы обсудим немного ниже.


4.6.7. Некоторые особенности системной торговли

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

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

Еще один момент, который мы не учитывали в этом разделе, работая с иллюстративными примерами, это секционирование данных и последовательную оптимизацию в соответствии с принципами, описанными в первом разделе курса (см. 1.10. Оптимизация.).

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

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


4.7. Отчеты по результатам тестирования.

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

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


4.7.1. Вызов диалога вывода отчетов

Для вывода информации о системах и результатах тестирования необходимо открыть диалог тестера систем (рис.4.84) и выбрать в колонке слева торговую стратегию, информация о которой нас интересует. В нижнем окне справа появится список результатов всех тестов, которые проводились для данной системы. Если список пустой, то вначале необходимо провести тестирование, поскольку в противном случае доступа к диалогу вывода информации не будет.



Рис.4.84.

Итак, мы выбираем, например, верхнюю строчку списка в окне справа снизу в диалоге тестера систем. После этого активируются кнопки «View» и «Discard».
С помощью кнопки «Discard» мы можем удалить выбранные результаты тестирования, а с помощью кнопки «View» вывести на экран монитора и просмотреть, а при необходимости и распечатать информацию о тестируемой системе и о результатах тестирования.
Есть еще кнопка «Cansel», она активна только во время выполнения тестов используется для прерывания идущего процесса тестирования из этого диалога.


4.7.2. Вывод результатов тестов и данных о системах.

После нажатия кнопки «View» мы переходим к диалогу со списом тестов.
Если проводился сравнительный тест нескольких торговых систем, то вначале выводится сводный список тестов для всех систем (рис.4.85).



Рис.4.85.

Выбирая любую строчку из сводного списка и нажимая клавишу «View» можно перейти к тестам конкретной системы.
Нажимая клавишу «Discard» можно удалить из результатов теста данные по конкретной выбранной системе.
Отметим, что с помощью клавиши «Back» мы возвращаемся к предыдущему диалогу.


Выбрав верхнюю строчку в диалоге рисунка 4.85 и нажав клавишу «View» переходим к диалогу риснука 4.86, в котором приведен список тестов конкретной системы.



Рис.4.86.

Здесь уже знакомые нам клавиши «Back», «View» и «Discard», и новая, с надписью «Plot on Chart», с помощью которой можно вывести на график инструмента график эквити (в отдельное окно) и значки, обозначающие торговые сигналы и действия торговой стратегии для конкретного теста. Примеры вывода такой информации были показаны в предыдущем подразделе, когда мы рассматривали примеры построения собственных торговых систем.

Перед тем, как нажимать клавишу «Plot on Chart» полезно настроить необходимые опции вывода информации, нажав клавишу «Options» в верхней части диалогового окна. С помощью этой клавиши вызывается диалог настройки параметров вывода информации на график, показанный на рисунке 4.87.



Рис.4.87.

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


Настраиваем опции вывода информации на график и нажимаем клавишу «Plot on Chart». Тестер загрузит в программу график цены из диапазона тестирования для финансового инструмента, на котором проводился тест, а также график эквити и условные обозначения действий системы, как показано на рисунке 4.88.



Рис.4.88.

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


Однако вернемся к диалогу рисунка 4.86.
Выбирая нужный тест и нажимая клавишу «View» в этом диалоге мы переходим к диалоговому окну, показанному на графике рисунка 4.89.



Рис.4.89

Окно содержит пять закладок, в первой из которых «Summary» содержится краткое резюме по итогам теста с названием торговой системы, обозначением финансового инструмента и диапазоном исторических данных, на которых проводился тест.
Кроме того в этой же закладке приводятся значения оптимизационных переменных (если проводилась оптимизация) и сводные данные по результатам тестирования (рис.4.89 и 4.90).



Рис.4.90.

Полученные данные можно сохранить для последующего анализа и использования на жестком диске компьютера в виде текстового или веб-файла с помощью клавиши «Save» в верхней части окна, и/или распечатать на принтере с помощью клавиши «Print».

Следующая закладка «Orders» дает детальную раскладку действий системы на каждом баре, на котором был сигнал открытия или закрытия позиции по рыночному, лимитному или стоповому ордеру (рис.4.91).



Рис.4.91.

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


С помощью закладки «Positions» вызывается детальная информация о прохождении и параметрах каждой из открывавшихся в течение теста сделок (рис.4.92).



Рис.4.92.

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


Закладка «Equity» (рис.4.93) представляет побаровую информацию об изменении состояния текущего торгового баланса, включая как прибыль, зафиксированную предыдущими торговыми сделками, так и прибыль или убыток по текущей торговой позиции. Кроме того, в верхней части диалогового окна выводится побаровый график эквити для анализируемого теста.



Рис.4.93.

Эти данные также можно сохранить и распечатать.


И последняя закладка диалога «System» содержит детальную информацию о правилах тестируемой торговой системы, опциях и условиях проведения теста (рис.4.94).



Рис.4.94.

Эта информация также может быть сохранена и распечатана.


4.7.3. Смысл и интерпретация данных по результатам теста в закладке «Summary».


Summary

Приводится информация о финансовом инструменте, на котором производилось тестирование, дата и время проведения теста, количество баров данных, включенных в тест и временной диапазон использованных исторических данных по котировкам финансового инструмента.
Кроме того, указывается тип тестирования, в валюте или в пунктах (Points Only Test).

Perfomance

Profit - Прибыль или убыток полученная торговой системой в валюте.
Performance - Прибыль или убыток в процентах.
Annualized Performance - Доходность в процентах годовых.
Buy & Hold Profit - Прибыль или убыток стратегии "Купи и держи" в валюте.
Buy & Hold Performance - Прибыль или убыток стратегии "Купи и держи" в процентах.
Buy & Hold Annualized Performance - Доходность в процентах годовых стратегии "Купи и держи".


Trade Summary

Total Trades - Общее количество завершенных торговых операций.
Trade Efficiency - Процент потенциальной прибыли торговых операций.
Average Profit/Average Loss - Отношение средней прибыли выигрышных операций (Averages Win) к среднему убытку проигрышных операций (Average Loss).


Profitable Trades

Total – Общее количество прибыльных сделок.
Long - Количество закрытых с прибылью длинных позиций.
Short - Количество закрытых с прибылью коротких позиций.

Average Profit - Средняя прибыль, рассчитанная по всем прибыльным сделкам.
Highest Profit – Размер максимальной прибыли в одной прибыльной сделке.
Lowest Profit – Размер минимальной прибыли в одной прибыльной сделке.
Most Consecutive - Наибольшее количество прибыльных сделок подряд.

Unprofitable Trades

Total – Общее количество убыточных сделок.
Long - Количество закрытых с убытком длинных позиций.
Short - Количество закрытых с убытком коротких позиций.

Average Loss - Средний убыток, рассчитанный по всем убыточным сделкам.
Highest Loss – Максимальный убыток в одной убыточной сделке.
Lowest Loss - Наименьший убыток в одной убыточной сделке.
Most Consecutive - Наибольшее количество убыточных сделок подряд.


Maximum Position Excursions

Long Favorable - Наибольшая текущая (незафиксированная) прибыль, полученная в прибыльной длинной позиции.
Short Favorable - Наибольшая текущая (незафиксированная) прибыль, полученная в прибыльной короткой позиции.
Long Adverse - Наибольший текущий (незафиксированный) убыток, полученный в убыточной длинной позиции.
Short Adverse - Наибольший текущий (незафиксированный) убыток, полученный в убыточной короткой позиции.


Trade Efficiency

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

Long Trade Entry Efficiency - разность максимальной цены во время совершения сделки и цены входа, деленная на диапазон изменения цен во время сделки.
Long Trade Exit Efficiency – разность цены выхода и минимальной цены во время совершения сделки, деленная на диапазон изменения цен во время сделки.
Long Trade Total Efficiency – разность цен выхода и входа, деленная на диапазон изменения цен во время сделки.

Short Trade Entry Efficiency – разность цены входа и минимальной цены во время совершения сделки, деленная на диапазон изменения цен во время сделки.
Short Trade Exit Efficiency – разность максимальной цены во время совершения сделки и цены выхода, деленная на диапазон изменения цен во время сделки.
Short Trade Total Efficiency – разность цен входа и выхода, деленная на диапазон изменения цен во время сделки.

В отчете рассчитывается и выводится для отображения три варианта усредненной торговой эффективности: для длинных позиций, для коротких позиций и общая.


Performance Indices

Buy & Hold Index - Этот индекс показывает процентное отношение прибыльности работы торговой системы по сравнению с прибыльностью стратегии "Купи и держи". Значение "-50" говорит о том, что торговая система дала прибыль на половину меньше, чем (т.е., 50%) стратегия "Купи и держи". Значение "25" - о том, что торговая система принесла прибыли на 25% больше. Значение "0" - прибыльность одинакова.
Естественно, что имеет смысл использовать только те системы, которые обеспечивают большую прибыльность, чем стратегия “Купи и держи” (т.е., Buy/Hold Index > 0). В противном случае торговля не стоит времени и усилий.

Profit/Loss Index - Индекс сравнивает суммарную прибыль выигрышных (Trade Profit) и суммарные убытки проигрышных (Trade Loss) операций, приводя их к одному числу, которое может изменяться в пределах от -100 (наихудшее значение) до +100 (наилучшее значение). Индекс рассчитывается делением результирующей прибыли (убытка) теста без учета комиссий на максимальную из величин Trade Profit или Trade Loss.

Reward/Risk Index - Этот индекс вознаграждения и риска, связанного с его получением. Риск в этом индексе определяется, как самая низкая точка линии денежного баланса под линией начальных инвестиций. Вознаграждение определяется как общая чистая прибыль, конечная точка на линии баланса.
Этот индекс комбинирует вознаграждение и риск в один показатель, который может изменяться от -100 (очень рискованный) до +100 (очень надежный).
Необходимо отметить, что этот показатель учитывает только абсолютную просадку и не может считаться надежным. Более целесообразно и надежно было бы использовать для расчета этого показателя значение относительной просадки, но в тестере Метастока эта функция не реализована.


Accounting

Initial Equity – Начальный баланс.
Trade Profit - Суммарная прибыль всех выигрышных операций.
Trade Loss - Суммарный убыток всех проигрышных операций.
Commissions - Сумма всех выплаченных комиссионных за время теста.
Interest Credited - Сумма процентов полученных в тот момент, когда торговая система не имела открытых позиций, т.е. деньги были свободны и их можно было вложить в ликвидный "безрисковый" финансовый инструмент. (Только для тестирования в денежных средствах.)
Interest Charged - Сумма процентов, уплаченных за заем денежных средств. (Только для тестирования в денежных средствах.)
Final Equity - Конечное значение баланса.
Open Positions - Размер текущих открытых позиций, если они есть, в валюте.

Account Variation

Highest Account Balance - Наибольшее значение баланса за весь период тестирования.
Lowest Account Balance - Наименьшее значение баланса за весь период тестирования.
Highest Portfolio Value - Наибольшее значение баланса во время открытой позиции.
Highest Open Drawdown - Значение наибольшего снижения линии баланса (относительно начальных инвестиций) рассчитанного по открытым позициям. Таким образом, это максимальное расстояние от линии начальных инвестиций до линии баланса рассчитанного при открытой позиции (по текущим ценам) при условии, что такой баланс ниже уровня начальных инвестиций.
Highest Closed Drawdown - Значение наибольшего снижения линии баланса (относительно начальных инвестиций) рассчитанного по фактически закрытым позициям. Таким образом, это максимальное расстояние от линии начальных инвестиций до линии фактического баланса при условии, что фактический денежный баланс ниже уровня начальных инвестиций.

Account Events

Margin Calls - количество событий, при которых свободных средств на торговом счете не хватает для покрытия маржинальных требований по открытым позициям. (Для Points Only Test не рассчитывается).
Overdrafts - число краткосрочных кредитов клиента в случае, когда величина платежа превышает остаток средств на счете клиента. (Только для тестирования в денежных средствах.)


Profitable Timing.

Average Trade Length - Средняя продолжительность (в барах) выигрышных торговых операций.
Longest Trade Length - Наибольшая продолжительность (в барах) выигрышной длинной позиции.
Shortest Trade Length - Наибольшая продолжительность (в барах) выигрышной короткой позиции.
Total Trade Length - Продолжительность (в барах) выигрышных торговых операций всего.

Unprofitable Timing

Average Trade Length - Средняя продолжительность (в барах) проигрышных торговых операций.
Longest Trade Length - Наибольшая продолжительность (в барах) проигрышной длинной позиции.
Shortest Trade Length - Наибольшая продолжительность (в барах) проигрышной короткой позиции.
Total Trade Length - Продолжительность (в барах) проигрышных торговых операций всего.

Out of Market Timing

Average - Средняя продолжительность (в барах) нахождения системы без открытых позиций.
Longest - Наибольшая продолжительность (в барах) нахождения системы без открытых позиций.
Total - Суммарная продолжительность (в барах) нахождения системы без открытых позиций.

Optimization Variables

OPT1, OPT2 и т.д. – значения переменных, характеризующих параметры индикаторов торговой стратегии.



Комментариев нет:

Отправить комментарий