суббота, 27 августа 2016 г.

Робот. Блокировка при аномальной волатильности.

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

Для начала подумаем о том, как будем фиксировать убыток.
В качестве основы возьмем волатильность часовых трендов, т.е. колебаний рынка со средним периодом 50-70 минут. Величина этого параметра измеряется индикатором волатильности на графике минутного масштаба и в обычных условиях для большинства инструментов находится в пределах 80-100пп с небольшими отклонениями.
Если в ходе движения цены в течение минуты ушли на величину больше волатильности часового тренда, то это уже признак чего-то ненормального (численный критерий может быть и другим, но в качестве основы наших экспериментов для начала мы возьмем именно этот).

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



Итак, жизнь неспешно идет своим чередом, в 16:59 сформирован минутный бар с ценой Low. В 17:00 открывает рот Йеллен, еще никто ничего не услышал, но уже начинается сумасшедший дом.


Пусть у нас были открыты лонги. Покажем как мы будем выходить из рынка при движении цены против позиции (независимо от того, в прибыли позиция или убыточная).
Как только текущая цена Bid опустится на V01пп ниже цены Low предыдущего бара мы в режиме потиковой обработки событий вызываем модуль закрытия всех лонгов по данном у инструменту и уходим из рынка.
Аналогичная процедура реализуется для коротких позиций, только там для расчетов используется High предыдущего бара и цена Ask.
V01 - волатильность тренда часового цикла, измеряемая индикатором на графике масштаба М01. На момент описываемых событий была равна примерно 160пп.

Программный код, добавленный в текст программы робота:

//---аварийный выход из позиций на всплеске волатильности
if(iHigh(0,1,1)<(Bid-V01*Point)) CloseSellOrders(Magic,10);
if(iLow(0,1,1) >(Ask+V01*Point)) CloseBuyOrders(Magic,10);

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

Программный код, добавленный в текст программы робота для этого случая:

//---аварийный выход с прибылью по трейлинг-стопу
if(iHigh(0,1,1)<(Bid-V01*Point)) SetTrailingStopBuy(Magic,TrailingStop,V01);
if(iLow(0,1,1) >(Ask+V01*Point)) SetTrailingStopSell(Magic,TrailingStop,V01);

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

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

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

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

Исходный робот.




Робот без блокировки входов, но с обработкой быстрых событий.



Робот с блокировкой входов и обработкой быстрых событий.



Есть улучшение во всех вариантах.


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

Робот с блокировкой входов и обработкой быстрых событий.



Робот без блокировки входов, но с обработкой быстрых событий.



Исходный робот без нововведений.




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


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

Исходный робот.




Робот без блокировки входов, но с обработкой быстрых событий.




Робот с блокировкой входов и обработкой быстрых событий.



Везде убыток, но убыток в последней версии в 3 раза меньше по сравнению с исходным вариантом. И это не может не радовать.

Продолжим наши исследования...


SWT-метод. Теория и практика применения
Торговая тактика SWT-метода

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

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