Изучаем ЗигЗаги

zigzag

Давайте начнем наш сегодняшний разговор со всем нам знакомого индикатора ЗигЗаг, который входит в стандартный комплект поставки терминала МТ4. Реализация индикатора из стандартной поставки далеко не самая лучшая и уж точно не самая быстрая, но нам сейчас это неважно. Давайте сначала вспомним, что представляет собой ЗигЗаг. Это не что иное как фильтр, который отсеивает движения цены меньше заданного порога (заданного в пунктах или в %ах)  и соединяет получившиеся экстремумы цены прямыми отрезками. По условиям алгоритма, максимумы и минимумы строго чередуются. Поэтому, если после одного максимума цена нарисует еще больший максимум, то последняя вершина будет перемещена на этот самый больший максимум.  В результате получается ломаная линия, которая в компактном виде содержит всю существенную информацию о движении цены на выбранном масштабе.

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

Помимо таких наглядных свойств,  ЗигЗаги обладают еще рядом скрытых количественных – и очень любопытных — закономерностей. Сегодня мы познакомимся с некоторыми из них.  Давайте подумаем: вот минимальная длина колена ЗигЗага – по построению – равна величине порога. А средняя длина колена, очевидно, больше. А вот на сколько именно больше? Иными словами, сколько в среднем проходит цена после того, как образовалось новое колено ЗигЗага?

Почему нас это может интересовать? Представим себе такую торговую стратегию: мы открываем сделку в момент открытия нового колена ЗигЗага, которую держим до тех пор пока не откроется следующее колено. На открытии каждого колена мы закрываем предыдущую позицию и открываем противоположную. И так далее. Тогда наш профит (или убыток) на каждом колене (без учета спреда и комиссии) будет = длина колена минус порог*2. Исходя из того, что в среднем рынок является сбалансированным (модель эффективного рынка), мы можем ожидать, что средняя длина колена ЗигЗага должна быть близка к удвоенному значению порога. Действительно, это так. Эта закономерность хорошо прослеживается на любых торговых инструментах и любых масштабах. Однако, как нетрудно догадаться, в реальной ситуации всегда будут отклонения от предсказанного значения. Вот эти-то отклонения и представляют наибольший интерес для нас сегодня.

Давайте исследовать так называемые овершоты (overshots), определенные таким образом:

Овершот = (длина колена — порог)/порог

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

Чтобы изучить этот вопрос, я написал вспомогательный советник для тестера стратегий МТ4, который можно скачать в конце данной статьи. Советник имеет один входной параметр ZZStepPips – порог ЗигЗага в 4х-значных пунктах. Если его прогнать в тестере стратегий, советник выдает среднее значение овершотов с заданным порогом, а также записывает в файл распределение количества колен ЗигЗага в зависимости от величины овершота.

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

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

Так, для пары EURUSD за период 01.01.2010 – 01.04.2015 получаем следующую картину:

fig1 eurusd

Для обеспечения воспроизводимости результатов скажу, что они были получены на котировках Альпари с 90% качеством моделирования.

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

  1. Торгуя ЗигЗаги на пробой, мы будем иметь небольшое статистическое преимущество (перед альтернативным вариантом, торговли на откат), т.е. EURUSD является преимущественно трендовой валютной парой.
  2. Это преимущество всегда меньше, чем средний спред (скажем, для ZZStepPips=20 пт, преимущество 3.5%, т.е. 0.7 пт), т.е. в чистом виде такая стратегия не является прибыльной.
  3. Трендовый характер EURUSD слабо зависит от величины порога, т.е. свойства валютной пары с хорошей точностью не зависят от масштаба.

Представляется любопытным сравнить результаты, полученные для EURUSD, с результатами для других валютных пар за тот же промежуток времени. Сразу скажу, что мне показалось наиболее интересным в этом сравнении. У каждой валютной пары достаточно четко проявляется ее характер (трендовый/контртрендовый), причем этот характер слабо зависит от масштаба (от величины порога ЗигЗага). А теперь посмотрим на результаты.

Наиболее трендовые пары:

EURJPY

fig2 eurjpy

USDJPY

fig2 eurjpy

Самые контр-тредовые пары:

AUDCAD

fig4 audcad

AUDNZD

fig5 audnzd

 

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

 

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

Для такого анализа советник создает текстовый файл (в tester\files) “ZZDistribution имя_валютной_пары.txt”, в который пишет всю необходимую информацию. Для нашего теста по паре EURUSD, например, это выглядит следующим образом

fig6

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

Давайте взглянем как это выглядит на графике. Вот распределение вероятностей различных овершотов для EURUSD и ЗигЗага с порогом 10 пт.

fig7

Мы видим, что вероятность монотонно убывает по мере увеличения значения овершота; некоторые нерегулярности очевидно связаны с недостатком статистики. Выброс у максимального значения овершота (5) связан с тем, что это сумма вероятностей всех овершотов >= 5.

А вот график распределения кумулятивной вероятности (= вероятности выпадения колена с овершотом большим или равным данному значению), тоже для EURUSD и ЗигЗага с порогом 10 пт.

fig8

Что примечательно: среднее значение овершота примерно 1, а вероятность выпадения овершота >= 1 всего 40%. Т.е., примерно в 60% случаев колено ЗигЗага окажется короче своего среднего значения. Зато часть из оставшихся 40% длинных колен окажутся очень длинными, что и восстановит в результате среднее значение овершота около единицы.

Хорошо. Теперь мы немного познакомились со стандартным ЗигЗагом и его свойствами. Теперь меня будет интересовать следующий вопрос: если взять ЗигЗаг, построенный по другому алгоритму – будет ли он обладать похожими свойствами? А если да – возможно, какой-нибудь другой ЗигЗаг  предоставит большее статистическое преимущество в нашей стратегии?

Предлагается следующее обобщение стандартного ЗигЗага. Возьмем индикатор текущей тенденции (тренда). Любой. Строим на его основе ЗигЗаг следующим образом: пока у нас тенденция (тренд) вверх, мы рисуем колено ЗигЗага вверх. Колено фиксируется (и начинается новое в другую сторону) когда тренд меняется на противоположный. Вершина ЗигЗага, как обычно, ставится на экстремум цены.  Соединяя получившиеся вершины ломаной линией, получаем одну из реализаций обобщенного ЗигЗага. Я буду называть такое обобщение адаптивным ЗигЗагом, поскольку порог смены тенденции на каждом колене ЗигЗага будет разным.  Один из примеров такого адаптивного ЗигЗага выложен у нас на форуме.

fig9

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

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

Овершот = (P[i] – P0)/(P0-P[i-1])

Здесь P[i-1] и P[i] – цены двух последовательных вершин ЗигЗага, а P0 – цена между вершинами, отвечающая моменту смены тенденции (= появления нового колена). Как легко видеть, для стандартного ЗигЗага это определение соответствует тому определению, которое мы давали раньше.

Теперь напишем аналогичный советник для адаптивного ЗигЗага и прогоним его в тестере в режиме оптимизации и выясним среднее значение овершотов.

Для EURUSD за тот же период что и прежде, получаем следующую картинку

fig10 eurusd

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

EURJPY

fig11 eurjpy

AUDCAD

fig12 audcad

Можно продолжать и проверить другие валютные пары, но вывод уже понятен. У (данной реализации) адаптивного ЗигЗага средняя величина овершотов систематически больше, чем для стандартного.

Что из этого?

Мораль #1: Если мы торгуем по тренду на основе ЗигЗага, то для этого лучше использовать приведенную реализацию адаптивного ЗигЗага, а если на откат – то стандартный ЗигЗаг. А еще лучше сначала изучить другие возможности – не исключено, что найдется ЗигЗаг с еще бОльшим (или, для отката, еще меньшим) средним овершотом.

Мораль #2: Как я уже говорил, адаптивный ЗигЗаг можно построить для любого индикатора тренда. Вдумавшись, мы понимаем, что получили методику для количественного сравнения различных индикаторов. Достаточно для каждого из них построить ЗигЗаг, затем просчитать среднее значение овершотов. У кого это среднее значение больше, тот и лучше показывает тренд. А если окажется, что у какого-то индикатора среднее значение овершотов существенно меньше единицы, то это значит, что это хороший индикатор канала – и от границ этого канала надо торговать на отбой. Самый «скучный» результат это значения овершотов близкие к единице. Это значит, что мы близки к точке эффективного рынка, в которой прибыль получить невозможно.

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

Удачи вам и профитов.

Скачать:

 

Владимир aka loopsider

02.06.2015

Метки: , , , , ,
Опубликовано в Индикаторы Форекс, Публикации, Секреты мастерства




Советники ARGOLab
Последние статьи

Комментарии
E-Mail:
Форекс рейтинг . Форекс каталог