Автоматические торговые системы. Использование методов Data Mining и оптимального управления в трейдинге.

четверг, 14 февраля 2008 г.

О методе «белой вороны»

применительно к построению механических торговых систем


Дмитрий Толстоногов



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

Ф. Бэкон

1. Contrarian opinion.

Известно, что метод «белой вороны», или «contrarian opinion»1, может быть весьма эффективен на финансовых рынках. Причины этой эффективности изучает новый раздел финансовой науки, называющийся «поведенческие финансы». За исследования в этой области Daniel Kahneman даже удостоился в 2002 году Нобелевской премии по экономике2. В частности, он показал, что инвесторы в своей массе действуют нерационально3. Что примечательно, Harry Markowitz ранее получил Нобелевскую премию за теорию оптимального портфеля, которая основывалась на постулате о рациональном поведении инвесторов. Интересующихся поведенческими финансами отсылаем к книге Поведенческие финансы или Между страхом и алчностью4.

2. Нерыночный пример.

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

Лет двадцать назад один студент-математик получил в качестве курсовой работы задание: применить метод функций Ляпунова к исследованию устойчивости какой-либо математической модели термоядерного реактора. Самым сложным оказалось найти подходящую модель. Для этого пришлось проштудировать подшивку журнала «Физика плазмы» за всю его историю. Остальное было делом техники: построить функцию Ляпунова и получить результат. Как выяснилось позднее, данная математическая модель была создана академиком, одним из создателей водородной бомбы и теории термоядерного синтеза, и вопрос о ее устойчивости был до того времени открыт. Все дело в том, что физики исследовали устойчивость традиционными спектральными методами, которые неприменимы для задач такого типа. В итоге данная работа по математике выиграла Всесоюзный конкурс студенческих научных работ в разделе «физика плазмы».

3. О том, как надо строить механические торговые системы.

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

Собственно говоря, способ построения торговых систем был задан еще в 1987 году с появлением популярной торговой платформы TradeStation, ставшей де-факто стандартом индустрии, и в кругу российских трейдеров известной как «Омега»5. Это способ растиражирован программами-аналогами разной степени навороченности – от простой MetaStock, до очень продвинутой MultiCharts, и мало у кого вызывает сомнения.

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

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

Далее, выбирается торговый метод и его формализация при помощи индикаторов теханализа. Что любопытно, при их выборе люди склонны руководствоваться принципом «зачем делать просто, когда можно сделать сложно». Например, широкую известность среди российских трейдеров получила торговая система, основанная на «индикаторе динамического ценового канала»6, опубликованном в одном из выпусков почившего в бозе русскоязычного журнала «Современный трейдинг». Примечательно, что в том же выпуске журнала независимо был приведен тот же самый метод под названием «простейшая торговая система». Он содержал один параметр вместо трех у «динамического ценового канала» и программный код на EasyLanguage в три раза короче предыдущего. Но что может быть интересного в простейшей торговой системе!

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

Далее, параметры индикаторов оптимизируются на участке ряда данных in sample, как правило, простым перебором. Результаты оптимизации оцениваются по критериям Net Profit, Profit Factor и т.п., и выбираются наилучшие значения параметров. Считается, что график значений критерия оптимизации как функции от параметров у надежной торговой системы должен иметь некое подобие плато в области оптимальных значений параметров. Затем, система с оптимальными параметрами тестируется на участке ряда данных out of sample. Если результаты тестирования мало отличаются от результатов на участке in sample, то считается, что найдена некоторая устойчивая закономерность в ценах, которая гипотетически будет сохраняться в будущем. Механическая торговая система при этом представляет собой набор из нескольких логических правил с параметрами, описывающих эту закономерность. В точках на графике, где эти правила выполняются, система генерирует сигналы на совершение сделок – открытие или закрытие позиций.

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

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

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

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


4. Человек думает, компьютер пашет.

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

  1. допустимого набора входных данных – индикаторов и т.п., из которых можно гипотетически сгенерировать торговую систему;

  2. допустимого набора значений параметров;

  3. допустимого набора элементарных логических правил, способов комбинации индикаторов и т.п.

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

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


5. И снова метод «белой вороны».

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

Каким образом мы можем воздействовать на капитал, чтобы достичь этой цели? Единственно, покупкой или продажей тех или иных активов, что мы, в принципе, можем делать на каждом шаге. Регулировать изменение капитала мы можем, изменяя в любой момент времени leverage – «плечо». Положительное «плечо» означает нетто-лонг позицию, отрицательное – нетто-шорт, нулевое – деньги.

Приращение капитала на каждом шаге по времени описывается уравнением


dEquity(t) = leverage(t) * dPrice(t) – Slippage&Comission(t),


где

dEquity(t) = Equity(t+1) / Equity(t) – 1


dPrice(t) = Price(t+1) / Price(t) – 1.


Здесь leverage и dPrice в общем случае векторы8, «*» означает скалярное произведение векторов, Slippage&Comission означает проскальзывание и комиссию.

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


Equity(T) max,

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

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

Как известно, правильная постановка задачи – половина ее решения. Остается решить вторую половину – собственно, саму задачу. С чего начать?

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

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

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

Что самое интересное, и при решении этой сложной задачи метод «белой вороны» тоже может быть очень полезен.

1 contrarian 1) "белая ворона" 2) противоположный инвестор (инвестор, действующий вопреки тенденциям рынка; это выражается в таких действиях, как покупка акций, падавших в цене в последнее время, или продажа акций, цена которых возрастала) – Lingvo FinancialMarkets

2 Будучи психологом, а не экономистом.

3 Рациональные инвесторы при равном риске выбирают больший доход, а при равном доходе меньший риск.

4 Строгалев, верни, наконец, книгу!

5 которая уже 6 лет не Omega Research, а TradeStation Group Inc.

6 Google выдал 26000 ссылок на «индикатор динамического ценового канала».

7 Linda Raschke называет этот метод «Черепаховый суп», см. Биржевые секреты.

8 Одномерный вектор означает торговлю одним активом, многомерный – портфелем активов.

5 комментариев:

Unknown комментирует...

Дмитрий, как всегда любопытно,спасибо, но зачем передёргивания и ирония: Google выдал 26000 ссылок на «индикатор динамического ценового канала» - ссылок на самом деле не более 30.
или это: "Примечательно, что в том же выпуске журнала независимо был приведен тот же самый метод под названием «простейшая торговая система». Он содержал один параметр вместо трех у «динамического ценового канала» и программный код на EasyLanguage в три раза короче предыдущего. Но что может быть интересного в простейшей торговой системе!". Ну достались Кости "лавры" , был более публичен в то время. Чего старое вспоминать?:)

DT комментирует...

Проверил: сейчас Гугл выдал 22800ссылок.
http://www.google.com/search?hl=ru&rls=GGLD%2CGGLD%3A2007-13%2CGGLD%3Aru&q=%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%2B%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE%2B%D1%86%D0%B5%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE%2B%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB%D0%B0&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=

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

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

Unknown комментирует...

"Проверил: сейчас Гугл выдал 22800ссылок."

ну дык 99.9% ссылок не в тему :)

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

"А я человек не публичный, лет пять вообще не появлялся в сети."

А вот это очень жаль. Сообщество много теряет из за этого :)

DT комментирует...

"склонность усложнять-это признак не компетентности"

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

Unknown комментирует...

Спасибо, Дмитрий. Скажите, планируете развивать этот блог? или так два-три поста после 5 лет молчания ? :)
В свое время все ваши посты автоматически шли в мемориз :)
Есть несколько вопросов, которые я не хочу публично (даже посредством этого блога) спрашивать. Можно ли куда-нить написать?