Александр Дрозд
Александр Дрозд личный блог
23 декабря 2011, 19:23

Ценная подборка №35. Генератор свечных паттернов (стратегия)

Кирилл Арепьев — частный инвестор. В 2010 году, участвуя в Кубке ММВБ под ником FlyOffMax, он занял 14-е место с доходностью 140,6%.
Кирил подробно описывает стратегию, которой пользовался на Кубке ММВБ. Материал интересен, поскольку представляет достаточно нетривиальный подход к анализу рынка.


Труд разработчика торговых систем сродни Сизифову: сначала долго выдумываются правила стратегии, прорабатываются возможные нюансы, потом система программируется и проверяется на исторических данных. При этом нет никакой гарантии, что впоследствии мы получим выдающиеся показатели вместо печальной картинки с отрицательной доходностью. Но, даже если все тесты были сданы на «отлично», это отнюдь не обеспечивает самого главного — прибыли на реальном брокерском счете. Если ее нет, приходится начинать все с начала. Как показывает практика, далеко не все стратегии со сложным математическим аппаратом дают приемлемые результаты. Более того, прямая связь между сложностью и доходностью отсутствует вовсе. Поэтому, чтобы облегчить и без того непростое ремесло разработчика торговых систем, будем оперировать самыми простыми математическими понятиями, не создавая дополнительных трудностей.
 
«Классные» преобразования
 

Свечные конфигурации — это, пожалуй, самое простое, что есть в науке технического анализа. Единственный нюанс заключается в том, что их нужно знать и уметь находить. Мы же поступим несколько иначе. Чтобы не шататься по графикам биржевых котировок в поисках всем известных свечных шаблонов1, зададим собственную конфигурацию паттерна2. Именно собственную! Можете не стесняться в своих фантазиях и не мучиться вопросом: «А что этот паттерн должен означать?» Ровным счетом ничего. Пока ничего. Это может показаться просто забавным бредом, но в процессе дальнейшего изложения логическая цепочка сомкнется, и вы удивитесь ее четкости.
 
Итак, чтобы далеко не ходить, выберем в качестве паттерна простую последовательность из трех свечей: черной, белой и снова черной (см. график 1). Введем необходимые обозначения:
 
Cp — цена паттерна, которая равняется полусумме максимальной и минимальной цены центральной (белой) свечки;
 
Cs — цена закрытия правой свечки паттерна.
 
Между двумя соседними паттернами (i-1 и i) цена может совершать любые движения. Поэтому максимальный и минимальный показатели на этом промежутке определим как Cmax и Cmin соответственно.
 
Для того чтобы как-то характеризовать положение соседних паттернов относительно друг друга, отметим два коэффициента:
 
k1 = (Cmax – Cp) / Cp — насколько цена последнего паттерна ниже максимального значения между двумя паттернами;
 
k2 = (Cmin – Cp) / Cp — насколько цена последнего паттерна выше минимального значения между двумя паттернами.
 
Таким образом, каждому паттерну будет соответствовать пара чисел k1 и k2. Чтобы не запутаться во введенных параметрах и не терзать себя вопросом: «А зачем это нам нужно?», перейдем к конкретным финансовым инструментам и цифрам.
 



В качестве примера рассмотрим котировки обыкновенных акций Сбербанка на периоде истории с января 2004-го по ноябрь 2010 года с часовым временным масштабом. Найдем в данном наборе все наши паттерны и вычислим соответствующие им коэффициенты k1 и k2 (к примеру, при помощи программы Excel). В зависимости от полученных результатов разобьем все имеющиеся паттерны на классы. Это можно делать разными способами. Основное условие при формировании классов — одинаковое количество паттернов в каждом из них (хотя бы приблизительно). Мы воспользуемся графическим методом. Для этих целей возьмем систему координат, где по горизонтали отложены значения k1, а по вертикали — k2. Поскольку каждый паттерн оценивается парой этих чисел, его можно представить в виде точки на такой координатной плоскости (см. график 2). Здесь же проведем три прямые: y1 = –2x, y2 = –x, y3 = –1/2x. Если точка, соответствующая определенному паттерну, лежит ниже прямой y1, то она принадлежит классу 1, между y1 и y2 — классу 2, между y2 и y3 — классу 3, выше y3 — классу 4. В каждом случае нужно подбирать уравнение прямой при условии равенства точек в классе.
 
Итак, подытожим: во-первых, в котировках Сбербанка мы нашли все наши паттерны, во-вторых, для каждого из них вычислили коэффициенты k1 и k2, а в-третьих, в зависимости от полученных значений отнесли паттерн к одному из четырех классов. Иными словами, мы совершили преобразование котировок в классы паттернов. Двигаемся дальше.
 
От паттернов к стратегии



Для входа в позицию будем использовать комбинацию из трех паттернов, то есть последовательность, которая должна сложиться на ценовой истории. Сигналом для выхода из позиции будет вновь сформированный паттерн, чей класс также может быть любым. Поясним сказанное примером — ценовой историей, которая уже преобразована в ряд паттернов соответствующего класса (см. таблицу 1). Будем работать по следующему правилу: вход в рынок осуществляется только тогда, когда сформируется сначала паттерн из класса 1, потом — из класса 3 и, наконец, снова из класса 1. Выходить будем, когда сложится паттерн класса 4.
 
Итак, после возникновения последовательности 1-3-1 мы приобретаем акции по цене 8,58 руб. Далее опять встречается паттерн 1-3-1, и мы покупаем уже по 8,64 руб. Но вот появляется паттерн класса 4, и мы ликвидируем обе позиции по 8,5 руб. После этого снова видим паттерн на вход 1-3-1 по цене 8,855 руб., а затем и по 10,101 руб. Закрытие происходит по 10,1 руб. И так далее.
 
Поскольку набор комбинаций для входа в позицию может быть совершенно любым (1-2-3 или 4-3-2 — пока без разницы), то, как несложно заметить, для четырех классов мы получим 64 варианта (4 х 4 х 4) входных последовательностей. А если учесть, что на каждый из них имеется по четыре варианта выхода, то в общей сложности получается 64 х 4 = 256 возможных комбинаций из паттернов, которые определяют сделку. Пронумеруем всевозможные комбинации от 1 до 256 (начиная с 1-1-1-1 и заканчивая 4-4-4-4). Как бы дико это ни звучало, но нам предстоит проверить график доходности каждой, чтобы определить оптимальную последовательность паттернов для входов и выходов торговой системы. Для удобства будем считать, что покупки / продажи совершаются на всю сумму депозита.
 

На графиках представлена доходность отдельных комбинаций в долях единицы, то есть ее значение, равное единице, соответствует 100%. По горизонтальной оси отмечены номера сделок в порядке возрастания временной шкалы. Периоды между сделками могут быть разными.
 
Например, комбинацию со входом 3-3-1 и выходом 1 (см. график 3) можно использовать для работы с короткими позициями. Еще один вариант — комбинация 3-3-3 на вход и выходом 1 (см. график 4), в которой не наблюдается статистического преимущества ни для длинных, ни для коротких позиций. Зато последовательность паттернов 3-4-1-1 (см. график 5) вполне можно использовать для открытия длинных позиций. Также существуют комбинации, которые хорошо работают большую часть времени, но в определенные моменты дают сбой и приносят существенные убытки. К примеру, комбинация с входом 3-4-2-1 (см. график 6).


Отбор лучших


Итак, из имеющихся 256 комбинаций выберем лучшие по следующему критерию: просадка3 меньше, прибыль больше. Для каждого варианта вычислим максимальный убыток и средний доход на сделку. Чтобы избежать перевеса комбинаций под длинные позиции, станем принудительно отбирать их в соотношении: одна для «шортов» на две для «лонгов». Кроме этого, стоит исключить использование одинаковых входных последовательностей с разными выходами, дабы уменьшить корреляцию4 между выбранными комбинациями. Итоговый торговый алгоритм будет представлять собой набор лучших комбинаций — подсистем, суммарная прибыль и просадка которых должны удовлетворять требуемым значениям.
 
Зададимся максимальным убытком комплекса подсистем 10% и средним доходом на сделку не менее 2%. Сначала отбираем одну комбинацию по критерию максимальной прибыли. Далее добавляем еще одну из оставшихся, чтобы средний доход на сделку отобранных комбинаций был максимальным при условии выполнения критерия максимальной просадки. И так до тех пор, пока максимальная просадка или средняя прибыль на сделку комплекса подсистем не выйдет за пределы требуемых значений. В итоге наш вариант стратегии состоит из 11 подсистем (см. таблицу 2). Максимальный убыток составляет 9,11%, средний доход на одну сделку — 2,65%. Кривая капитала системы (суммарная кривая всех 11 подсистем) представлена на графике 7.
 
В начале статьи было предложено задать собственный паттерн. Как теперь ясно, система в итоге сама определяет, насколько удачен был ваш вариант. Гибкость в выборе паттерна подтверждает универсальность предложенного подхода, который, по сути, можно использовать как шаблон для реализации великого множества других торговых систем. Помимо различных взаимных комбинаций свечных формаций в качестве паттерна способны выступать и значения каких-либо индикаторов. Существуют и иные способы разделения паттернов на классы. Если в процессе торговли какая-либо из подсистем перестанет удовлетворять требуемым критериям по доходности и просадке, от нее можно легко отказаться, заменив на более достойный вариант. Это обеспечивает устойчивость системы в целом: сбой одной из подсистем не заставит отказаться от торговли.
 
К недостатку данного метода относится отсутствие контроля за уровнем убытков (отсутствие стоп-лоссов). Несмотря на то что при тестировании и отборе лучших комбинаций мы учитывали значение максимальной просадки, ее величина оценивалась только после закрытия позиции. Проще говоря, текущий убыток открытой позиции мог быть весьма приличным. Использование защитных стоп-лоссов позволяет избежать сильных провалов капитала в некоторых комбинациях (см. график 6). В описанной стратегии отсутствует система управления капиталом5, ее разработка, так же как и применение стоп-лоссов, может стать следующим этапом развития торгового алгоритма.

17 Комментариев
  • Dick
    23 декабря 2011, 19:39
    а можно эти(новые) паттерны искать на графиках с помощью программы?
      • Dick
        23 декабря 2011, 20:09
        Александр Дрозд, Я понял только почему то мы их в статье задаём вручную. Я как раз имел в виду поиск изначально перспективных паттернов до их тестирования.
  • sloNIK.
    23 декабря 2011, 19:44
    мдя, сколько у нас в россии гениев)
  • Сармин Алексей (escoman)
    23 декабря 2011, 20:14
    Сенкью, Александр, за Ваши посты.
  • Спекулятор
    23 декабря 2011, 20:27
    Спасибо, Александр, плюсанул.
  • Кобкина Лада
    23 декабря 2011, 23:56
    офигенная статья! +++
  • Fox27
    24 декабря 2011, 00:12
    Интересная статья, спасибо Александр! Длину паттернов при этом можно увеличить, проанализировав как изменится при этом показатели, правда количество комбинаций увеличится как N^m это приближает анализ к нейросетям. В этом случае для выбора лучшей комбинации подойдет лучше всего генетический алгоритм. Вообще интересная тема требует дополнительного изучения.
  • Spiritschaser
    27 декабря 2011, 03:11
    Пуркуа па не сделать кластерный анализ по свечам с допусками соответствия (относительная длина элементов, и т.п.), а потом по простой нейронной сети не сделать функцию?
  • prosper
    07 января 2012, 09:00
    Саша спасибо реально классная работа от вас всегда с удов читаю для молодых особенно полезно…
  • Margin_Nicolas
    07 января 2012, 19:36
    А не будет ли такой метод создания ТС подгоном под историю?
  • wavelet
    30 января 2012, 18:18
    Хорошая идея :) +

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн