Автор: Николай Камынин
Данная статья имеет цель осветить ряд результатов и подходов полученных мною при исследовании исторических данных на фондовых рынках. Я не ставлю своей целью продать кому-то “черный ящик” , который сделает его богаче. Однако, надеюсь найти серьезных исследователей и возможно последователей, с которыми возможно обсуждение и обмен результатами создания систем искусственного интеллекта применительно к фондовым рынкам.
Эта статья является некоторым итогом моих исследований. Отсутствие у меня в настоящее время хороших баз исторических данных затрудняет дальнейшую разработку и исследование методов и систем прогнозирования рынков.
Итак, начну с начала.
Так получилось, что по окончанию института, мне предложили заняться системами искусственного интеллекта применительно к задачам диагностики авиационной техники.
Первые труды в этой области, которые я изучал, были в основном работы американских математиков в области прогнозирования товарных рынков, активности солнца и советских исследователей в области медицинской диагностики послеоперационного состояния больных.
В данных работах как правило использовался спектральный анализ на основе БПФ (быстрого предобразования Фурье) , многофакторный анализ, известный как разложение Карунена— Лоева, метод группового учета аргументов(МГУ),методы самоорганизации систем, методы линейного прогнозирования и распознавания образов .
В результате работы в данном направлении, на основе теории структурных свойств сигналов и методов обработки сигналов, я изобрел ряд устройств (10 изобретений) для обнаружения автоколебаний газового потока двигателя при взлете и посадке самолетов. ( При возникновении данного явления двигатель либо глохнет, и самолет падает, либо в считанные секунды двигатель разваливается вместе с самолетом в воздухе.)
На основе теории самообучающихся систем разработал алгоритм диагностики состояния коробок передач автомобиля и редукторов авиадвигателя (еще 15 изобретений).
Имея большой опыт применения методов и систем цифровой обработки сигналов для решения задач диагностики машин и механизмов, в 2000 году я решил применить данные методы для исследования фондовых рынков и построения систем прогнозирования движения цен.
Как правило, систему распознавания структурно разделяют на два функциональных блока : систему первичных признаков и систему принятия решения.
В техническом анализе на фондовом рынке к системе первичных признаков можно отнести усредненные тем или иным способом значения цены. Например , четыре параметра свечи, построенной на определенном интервале, либо значение того или иного индикатора.
Первоначально я подошел к решению задачи как к проблеме идентификации объекта по параметрам отклика в предположении , что на входе действует случайный процесс. Я изучил доступные работы по применяемым методам технического анализа. При детальном изучении свойств индикаторов , а их уже наплодили несколько сотен, я пришел к заключению, что все множество индикаторов, которые имеют различные хитрые названия и увлекательные истории их создания, в реальности представляют собой простейшие цифровые фильтры не выше 2-го порядка, так называемые ФНЧ, ФВЧ, ПФ,РФ, являющиеся линейными системами. Основное свойство линейных систем в том, что они без искажения формы пропускают гармоническую составляющую. Такие системы описываются системой линейных диф. уравнений с постоянными коэффициентами.
Как правило, коэффициенты технических индикаторов эмпирически подбираются трейдерами под конкретный участок движения цен.
Парадоксально то, что при известном виде функции, а технический анализ есть не что иное, как анализ графических функций, уже давно разработаны формализованные методы определения параметров фильтров , но трейдеры на фондовом рынке упорно эмпирически продолжают искать “Грааль” — “наилучший” из простейших фильтров.
Система принятия решения, как правило, строится в виде логического выражения с использованием пороговых значений. В общем случае, такие системы в теории распознавания называются линейные решающие правила, их запись в дискретном виде представляет собой пороговую функцию в виде взвешенной суммы первичных признаков. Существуют формализованные методы построения таких правил с учителем или без него( метод самообучения).
Первоначально я проводил исследования на доступных мне исторических дневных данных бирж США. Как средство графического отображения использовал Метасток, но быстро получил ограничение по объему обрабатываемых данных и перешел на Omega Research. Сервер Omega Research позволяет хранить и обрабатывать практически неограниченный объем данных, чего не скажешь о программах данного пакета. Вопросы моделирования решал с применением МАТЛАБ.
Для основных исследований я выбрал акции ММВБ РАО ЕЭС , начиная с 1999 года. Однако, при объеме данных около 1 млн. отсчетов, Omega Research практически перестает работать, так как процесс поиска начальной зоны настройки может занимать несколько часов.
Для решения данной проблемы, ,я написал собственную библиотеку функций на С++ и подключил ее к Omega Research. Кроме того, для исключения проблемы длительного поиска начального участка я применил циклические элементы памяти при реализации цифровых фильтров. В результате скорость выполнения программ возросла примерно в 100 раз, а поиск начального участка не требуется, что позволило провести исследования на базе данных объемом более 10 млн. отсчетов.
При изучении эффективности индикаторов были реализованы следующие методы фильтрации: Фильтры Чебышева, Баттерворта, Гильберта до 12 порядка, фильтры Галлея, Прямое и обратное Фурье преобразование, Прямое и обратное косинусное преобразование, методы спектрального оценивания Берга, Прони, максимальной энтропии, AРCC предсказатели, полиномиальные методы фильтрации. Все методы реализованы в виде динамических библиотек к Omega Research.
Фильтры позволяют эффективно выделять различные тренды с наперед заданной максимальной скоростью изменения и существенно лучше, чем любой из известных индикаторов.
Любой из перечисленных методов построения фильтров позволяет полностью заменить все известные индикаторы и устранить кажущееся многообразие в их наборе. Правда в этом случае как-то исчезает вся таинственность и некоторая метафизичность, существующая в рассказах и названиях тех или иных авторов их технических индикаторов.
Опыт исследования показал, что эффективность решения задачи торговли на фондовом рынке определяется в основном не выбором того или иного индикатора, а зависит от правил принятия решения.
Попытка применить методы нейронных сетей к построению правил принятия решений на фондовом рынке, в случае произвольного выбора признаков, приводит к построению систем, которые эффективны лишь на конкретных участках движения цен. Таким образом, как следовало ожидать, применение нейронных сетей к эмпирическим данным без учета физики явления и создания определенной модели явления приводит к получению торговой системы, которую периодически надо строить заново. Этот результат подобен тому, который получают трейдеры, пытаясь построить торговую систему путем автоматической подгонки коэффициентов на исторических данных.
Поэтому следующим этапом явилась разработка теории и математической модели фондового рынка и создание формализованной системы построения решающего правила.
Начавшийся в 2005 году рост фондового рынка позволил практически всем игрокам почувствовать себя Гуру в умении правильно принимать решения.
Растущий рынок создает иллюзию безошибочности принимаемых решений и существенном превосходстве интуитивного подхода по сравнению с автоматическими торговыми системами. В 2007 года я написал по этому поводу: “Думаю, что ближайший разворот рынка несколько отрезвит “гениев” интуитивного предсказания, но это в будущем.”
В 2004 -2005 годах я поставил задачу исследовать возможность построения систем торговли, которые не требуют их перестройки от года к году. Система была создана в январе 2006 года. Она проработала до последнего дня торговли акциями РАО ЕЭС.
При этом ставилась задача исследовать эффективность автоматизированной торговой системы при следующих ограничениях.
Система работает в Long, по РАО ЕЭС на ММВБ.
В конце торговой сессии на основе лишь информации о дневных ценах система принимает следующие решения:
1) Закрыть/открыть длинную позицию по текущей цене;
2) Выставить заявку на следующий день на открытие сессии и поставить стоп.
В каждой сделке система использует постоянный капитал равный 1000,при комиссии 0.1%.
За одну сделку система покупает на всю сумму или продает весь пакет акций.
Система не использует плечи, а полученная ранее прибыль используется лишь для покрытия убытка при восстановлении капитала до начального значения.
Первичные признаки определены следующим образом:
Open of Day(n), Close of Day(n), Low of Day(n) , High of Day(n) – открытие, закрытие, минимум и максимум данных дня, где n – номер дня, считая от текущего в прошлое.
Open of Month(m) , Close of Month(m) , Low of Month(m), High of Month(m) — открытие, закрытие, минимум и максимум данных месяца, где m – номер месяца, считая от текущего в прошлое;
R(i),S(i) – максимумы и минимумы волн движения дневных данных, где i – номер волны, считая от текущей в прошлое. Волны выделяются специальной программой фильтрации первичных признаков, работа которой не зависит от принятых системой решений.
Система принятия решения условно состоит из четырех блоков: Блок 1 — правила принятия решения об открытии позиции, Блок 2- фильтрация решений об открытии позиции , Блок 3- правила принятия решения о закрытии позиции , Блок 4 – фильтрация решений о закрытии.
Обучение системы производится следующим образом. Начальная группа правил сформирована на основе статистических исследований. Последующие правила формируются псевдослучайным образом и фильтруются “методом ортогональной селекции”. Данный метод реализует принцип “на ошибках – учатся” и позволяет системе “умнеть” в будущем, “не глупея” в прошлом.
При работе системы правила не меняются для всего временного интервала с 2000 года по 2008 год. Обучение системы осуществлялось на исторических данных периода с 2000 по 2005 год, после этого система торговала с постоянными параметрами.
Annual Analysis (Mark-To-Market):
Period |
Net Profit |
Net Profit % |
Profit Factor |
# Trades |
% Profitable |
YTD |
64 |
6.4% |
1.17 |
17 |
64.71% |
12 month |
331 |
33% |
1.83 |
48 |
64.58% |
07 |
658 |
66% |
3.17 |
44 |
77.27% |
06 |
2 319 |
232% |
67.77 |
36 |
91.67% |
05 |
1 161 |
116% |
52.17 |
40 |
87.50% |
04 |
1 510 |
151% |
35.64 |
42 |
88.10% |
03 |
1 893 |
189% |
10.35 |
45 |
86.67% |
02 |
1 650 |
165% |
69.41 |
40 |
87.50% |
01 |
4 011 |
401% |
13.49 |
45 |
80.00% |
00 |
2 940 |
294% |
6.21 |
44 |
77.27% |
Annual Rolling Period Analysis (Mark-To-Market):
Period |
Net Profit |
Net Profit % |
Profit Factor |
# Trades |
% Profitable |
08 |
64 |
6.4% |
1.17 |
17 |
64.71% |
07-08 |
722 |
72% |
2.08 |
61 |
73.77% |
06-08 |
3 041 |
304% |
5.31 |
97 |
80.41% |
05-08 |
4 203 |
420% |
6.77 |
137 |
82.48% |
04-08 |
5 714 |
571% |
8.39 |
179 |
83.80% |
03-08 |
7 608 |
760% |
8.80 |
224 |
84.38% |
02-08 |
9 258 |
925% |
10.26 |
264 |
84.85% |
01-08 |
13 270 |
1327% |
11.05 |
309 |
84.14% |
00-08 |
16 185 |
16185% |
9.59 |
353 |
83.29% |
Далее я решил исследовать вопрос об оценке эффективности автоматической торговли портфелем акций. Так как построение системы торгующей портфелем требует создание многопроцессорного комплекса, то я упростил задачу и решил ее на примере торговли индексом RTSI. (исторические данные получены с сайта finam.ru)
Так как индекс представляет собой взвешенную сумму цен акций, то следует ожидать более предсказуемое поведение временной функции RTSI. Поэтому система признаков была упрощена . В качестве признаков были выбраны внутридневные данные с интервалом 30 минут. R(i),S(i) – максимумы и минимумы волн движения дневных данных, где i – номер волны, считая от текущей в прошлое. Волны выделяются специальной программой фильтрации первичных признаков, работа которой не зависит от принятых системой решений.
Упрощено правило принятия решения следующим образом:
if MarketPosition <=0 then Buy next bar at Rz(0)+20 Point Stop;
if MarketPosition >0 then Sell next bar at Su(0)-20 point Stop;
Обучение, за исключением порога в 20 point не производилось.
Результаты работы представлены ниже.
TradeStation Strategy Performance Report — ANK_2009_2 RTSI-30 min. (02.16.2001-02.24.2009)
Performance Summary: All Trades
Total Net Profit (Чистая прибыль) |
111 019 |
Open position P/L |
150 |
Gross Profit |
137 130 |
Gross Loss (Убытки) |
(26 111) |
Total # of trades (Число сделок) |
1 586 |
Percent profitable(% удачных сделок) |
56% |
Number winning trades |
889 |
Number losing trades |
697 |
Largest winning trade |
2 300 |
Largest losing trade |
(588) |
Average winning trade |
154 |
Average losing trade |
(37) |
Ratio avg win/avg loss |
4 |
Avg trade (win & loss) |
70 |
Max consec. Winners |
11 |
Max consec. losers |
7 |
Avg # bars in winners |
17 |
Avg # bars in losers |
5 |
Max intraday drawdown |
(649) |
|
|
Profit Factor |
5.25 |
Max # contracts held |
62 |
Account size required |
649 |
Return on account |
17090% |
Annual Analysis (Mark-To-Market):
Period (Период) |
Net Profi (Прибыль)t |
% Gain (Прибыль %) |
Profit Factor |
# Trades |
% Profitable |
2009 |
3 504 |
35% |
7.44 |
32 |
56% |
12 month |
22 424 |
224% |
4.33 |
297 |
48% |
2008 |
21 643 |
216% |
4.32 |
302 |
50% |
2007 |
9 697 |
97% |
4.75 |
246 |
57% |
2006 |
16 414 |
164% |
8.02 |
227 |
60% |
2005 |
11 354 |
114% |
5.97 |
213 |
56% |
2004 |
10 809 |
108% |
4.43 |
161 |
50% |
2003 |
11 510 |
115% |
5.40 |
151 |
59% |
2002 |
13 070 |
131% |
5.60 |
142 |
57% |
2001 |
13 165 |
132% |
4.88 |
121 |
60% |
График ежемесячных результатов торговли индексом в период с 01.01.2001 по 24.02.2009 гг.