Прогнозирование цен с помощью нейронных сетей
Введение
В последние несколько лет мы наблюдаем взрыв интереса к нейронным сетям, которые успешно применяются в самых различных областях - бизнесе, медицине, технике, геологии, физике. Нейронные сети вошли в практику везде, где нужно решать задачи прогнозирования, классификации или управления. Такой впечатляющий успех определяется несколькими причинами:
- Богатые возможности. Нейронные сети - исключительно мощный метод моделирования, позволяющий воспроизводить чрезвычайно сложные зависимости. В частности, нейронные сети нелинейны по свой природе. На протяжении многих лет линейное моделирование было основным методом моделирования в большинстве областей, поскольку для него хорошо разработаны процедуры оптимизации. В задачах, где линейная аппроксимация неудовлетворительна, линейные модели работают плохо. Кроме того, нейронные сети справляются с "проклятием размерности", которое не позволяет моделировать линейные зависимости в случае большого числа переменных
- Простота в использовании. Нейронные сети учатся на примерах. Пользователь нейронной сети подбирает представительные данные, а затем запускает алгоритм обучения, который автоматически воспринимает структуру данных. При этом от пользователя, конечно, требуется какой-то набор эвристических знаний о том, как следует отбирать и подготавливать данные, выбирать нужную архитектуру сети и интерпретировать результаты, однако уровень знаний, необходимый для успешного применения нейронных сетей, гораздо скромнее, чем, например, при использовании традиционных методов статистики.
Нейронные сети привлекательны с интуитивной точки зрения, ибо они основаны на примитивной биологической модели нервных систем. В будущем развитие таких нейро-биологических моделей может привести к созданию действительно мыслящих компьютеров.[1]
Предсказание финансовых временных рядов - необходимый элемент любой инвестиционной деятельности. Сама идея инвестиций - вложения денег сейчас с целью получения дохода в будущем - основывается на идее прогнозирования будущего. Соответственно, предсказание финансовых временных рядов лежит в основе деятельности всей индустрии инвестиций - всех бирж и небиржевых систем торговли ценными бумагами.
Известно, что 99% всех сделок - спекулятивные, т.е. направлены не на обслуживание реального товарооборота, а заключены с целью извлечения прибыли по схеме "купил дешевле - продал дороже". Все они основаны на предсказаниях изменения курса участниками сделки. Причем, что немаловажно, предсказания участников каждой сделки противоположны друг другу. Так что объем спекулятивных операций характеризует степень различий в предсказаниях участников рынка, т.е. реально - степень непредсказуемости финансовых временных рядов.
Это важнейшее свойство рыночных временных рядов легло в основу теории "эффективного" рынка, изложенной в диссертации Луи де Башелье (L.Bachelier) в 1900 г. Согласно этой доктрине, инвестор может надеяться лишь на среднюю доходность рынка, оцениваемую с помощью индексов, таких как Dow Jones или S&P500 для Нью-Йоркской биржи. Всякий же спекулятивный доход носит случайный характер и подобен азартной игре на деньги (а что то в этом есть, не находите?). В основе непредсказуемости рыночных кривых лежит та же причина, по которой деньги редко валяются на земле в людных местах: слишком много желающих их поднять.
Теория эффективного рынка не разделяется, вполне естественно, самими участниками рынка (которые как раз и заняты поиском "упавших" денег). Большинство из них уверено, что рыночные временные ряды, несмотря на кажущуюся стохастичность, полны скрытых закономерностей, т.е. в принципе хотя бы частично предсказуемы. Такие скрытые эмпирические закономерности пытался выявить в 30-х годах в серии своих статей основатель волнового анализа Эллиот (R.Elliott).
В 80-х годах неожиданную поддержку эта точка зрения нашла в незадолго до этого появившейся теории динамического хаоса. Эта теория построена на противопоставлении хаотичности и стохастичности (случайности). Хаотические ряды только выглядят случайными, но, как детерминированный динамический процесс, вполне допускают краткосрочное прогнозирование. Область возможных предсказаний ограничена по времени горизонтом прогнозирования, но этого может оказаться достаточно для получения реального дохода от предсказаний (Chorafas, 1994). И тот, кто обладает лучшими математическими методами извлечения закономерностей из зашумленных хаотических рядов, может надеяться на большую норму прибыли - за счет своих менее оснащенных собратьев.
В последнее десятилетие наблюдается устойчивый рост популярности технического анализа - набора эмпирических правил, основанных на различного рода индикаторах поведения рынка. Технический анализ сосредотачивается на индивидуальном поведении данного финансового инструмента, вне его связи с остальными ценными бумагами. Но технический анализ очень субъективен и плохо работает на правом краю графика – именно там, где нужно прогнозировать направление цены. Поэтому все большую популярность приобретает нейросетевой анализ, поскольку в отличие от технического, не предполагает никаких ограничений на характер входной информации. Это могут быть как индикаторы данного временного ряда, так и сведения о поведении других рыночных инструментов. Недаром нейросети активно используют именно институциональные инвесторы (например, крупные пенсионные фонды), работающие с большими портфелями, для которых особенно важны корреляции между различными рынками.
Нейросетевое моделирование в чистом виде базируется лишь на данных, не привлекая никаких априорных соображений. В этом его сила и одновременно - его ахиллесова пята. Имеющихся данных может не хватить для обучения, размерность потенциальных входов может оказаться слишком велика.
Поэтому для хорошего прогноза нужно пользоваться во-первых, очень качественно подготовленными данными, а во-вторых, нейропакетами с большой функциональностью.
Подготовка данных
Для начала работы нужно подготовить данные, от правильности этой работы зависит 80% успеха.
Гуру говорят, что в качестве входов и выходов нейросети не следует выбирать сами значения котировок Ct. Действительно значимыми для предсказаний являются изменения котировок. Поскольку эти изменения, как правило, гораздо меньше по амплитуде, чем сами котировки, между последовательными значениями курсов имеется большая корреляция - наиболее вероятное значение курса в следующий момент равно его предыдущему значению C(t+1)=C(t)+delta(C)=C(t).
Между тем, для повышения качества обучения следует стремиться к статистической независимости входов, то есть к отсутствию подобных корреляций. Поэтому в качестве входных переменных логично выбирать наиболее статистически независимые величины, например, изменения котировок delta(С) или логарифм относительного приращения log(C(t)/C(t+1)).
Последний выбор хорош для длительных временных рядов, когда уже заметно влияние инфляции. В этом случае простые разности в разных частях ряда будут иметь различную амплитуду, т.к. фактически измеряются в различных единицах. Напротив, отношения последовательных котировок не зависят от единиц измерения, и будут одного масштаба несмотря на инфляционное изменение единиц измерения. В итоге, большая стационарность ряда позволит использовать для обучения большую историю и обеспечит лучшее обучение.
Отрицательной чертой погружения в лаговое пространство является ограниченный "кругозор" сети. Технический анализ же, напротив, не фиксирует окно в прошлом, и пользуется подчас весьма далекими значениями ряда. Например, утверждается, что максимальные и минимальные значения ряда даже в относительно далеком прошлом оказывают достаточно сильное воздействие на психологию игроков, и, следовательно, должны быть значимы для предсказания. Недостаточно широкое окно погружения в лаговое пространство не способно предоставить такую информацию, что, естественно, снижает эффективность предсказания. С другой стороны, расширение окна до таких значений, когда захватываются далекие экстремальные значения ряда, повышает размерность сети, что в свою очередь приводит к понижению точности нейросетевого предсказания - уже из-за разрастания размера сети.
Выходом из этой, казалось бы, тупиковой ситуации являются альтернативные способы кодирования прошлого поведения ряда. Интуитивно понятно, что чем дальше в прошлое уходит история ряда, тем меньше деталей его поведения влияет на результат предсказаний. Это обосновано психологией субъективного восприятия прошлого участниками торгов, которые, собственно, и формируют будущее. Следовательно, надо найти такое представление динамики ряда, которое имело бы избирательную точность: чем дальше в прошлое - тем меньше деталей, при сохранении общего вида кривой.
Весьма перспективным инструментом здесь может оказаться вейвлетное разложение (wavelet decomposition). Оно эквивалентно по информативности лаговому погружению, но легче допускает такое сжатие информации, которое описывает прошлое с избирательной точностью.
Выбор программного обеспечения
Для работы с нейросетями предназначено множество специализированных программ, одни из которых являются более-менее универсальными, а другие – узкоспециализированными. Проведем краткий обзор некоторых программ :
1. Matlab – настольная лаборатория для математических вычислений, проектирования электрических схем и моделирования сложных систем. Имеет встроенный язык программирования и весьма богатый инструментарий для нейронных сетей – Anfis Editor (обучение, создание, тренировка и графический интерфейс), командный интерфейс для программного задания сетей, nnTool – для более тонкой конфигурации сети.
2. Statistica – мощнейшее обеспечение для анализа данных и поиска статистических закономерностей. В данном пакете работа с нейросетями представлена в модуле STATISTICA Neural Networks (сокращенно, ST Neural Networks, нейронно-сетевой пакет фирмы StatSoft), представляющий собой реализацию всего набора нейросетевых методов анализа данных.
3. BrainMaker – предназначен для решения задач, для которых пока не найдены формальные методы и алгоритмы, а входные данные неполны, зашумлены и противоречивы. К таким задачам относятся биржевые и финансовые предсказания, моделирование кризисных ситуаций, распознавание образов и многие другие.
4. NeuroShell Day Trader - нейросетевая система, которая учитывает специфические нужды трейдеров и достаточно легка в использовании. Программа является узкоспециализированной и как раз подходит для торговли, но по своей сути слишком близка к черному ящику.
5. Остальные программы являются менее распространенными.
Для первичной работы вполне подойдет Matlab, в нем и будем пытаться определить степень пригодности нейросетей для прогнозирования рынка Forex.
Ознакомиться с комплексом MatLab можно в википедии https://ru.wikipedia.org/wiki/MATLAB
Много материалов по программе предоставлено на сайте http://matlab.exponenta.ru/Приобрести программу можно через компанию SoftLine http://soft.softline.ru/author_page_all.php?id=410
Эксперимент
Подготовка данных
Данные очень удобно можно получить стандартными средствами MetaTrader:
Сервис -> Архив котировок -> Экспорт
В результате получаем файл в формате *.csv, который является первичным сырьем для подготовки данных. Для преобразования полученного файла в удобный для работы файл *.xls нужно произветси импорт данных из файла *.csv. Для этого в excel нужно произвести следующие махинации:
Данные -> Импорт внешних данных -> Импортировать данные и указать подготовленный первичный файл. В мастере импорта все необходимые действия выполняются в 3 шага:
На 3 шаге необходимо поменять разделитель целой и дробной части на точку, делается это при нажатии кнопки Подробнее…
Для того чтобы данные были восприняты как цифры, а не как строки, нужно поменять разделитель целой и дробной части на точку:
Сервис -> Параметры -> Международные -> Разделитель целой и дробной части.
На скриншотах показан пример сохранения цен открытия и закрытия, остальные данные пока не нужны.
Теперь данные надо преобразовать в соответствии с тем, что и как мы хотим прогнозировать. Составим прогноз цены закрытия будущего дня по четырем предыдущим (данные идут в пяти столбцах, цены в хронологическом порядке).
1.2605 |
1.263 |
1.2641 |
1.2574 |
1.2584 |
1.2666 |
1.263 |
1.2641 |
1.2574 |
1.2584 |
1.2666 |
1.2569 |
1.2641 |
1.2574 |
1.2584 |
1.2666 |
1.2569 |
1.2506 |
1.2574 |
1.2584 |
1.2666 |
1.2569 |
1.2506 |
1.2586 |
1.2584 |
1.2666 |
1.2569 |
1.2506 |
1.2586 |
1.2574 |
Благодаря нехитрым манипуляциям в excel данные подготавливаются за пару минут. Пример подготовленного файла с данными можно взять в прикрепленых файлах.
Для того, чтобы Matlab распознал файлы, необходимо, чтобы подготовленные данные были сохранены в файлах с расширением *.txt или *.dat. Сохраним их в файлах *.txt. Далее каждый файл разбиваем на два множества – для обучения сети (выборка) и для ее тестирования (вне выборки). Подготовленные таким образом euro.zip данные пригодны для дальнейшей работы
Знакомство с Matlab
Из командной строки по команде anfisedit запускаем пакет ANFIS. Редактор состоит из четырех панелек – для данных (Load data), для генерации сети (Generate FIS), для тренировки (Train FIS)и для ее тестирования (Test FIS). Верхняя панель предназначена для просмотра структуры полученной нейросети (ANFIS Info).
Более подробно с работой пакета можно ознакомиться по приведенным ниже ссылкам.
http://forest.akadem.ru/library/matlab/fuzzylogic/book1/7_6.html
http://matlab.exponenta.ru/fuzzylogic/book1/1_7_5_7.php
Для начала работы загружаем данные, подготовленные на предыдущих этапах. Для этого нажимаем кнопку Load Data и указываем файл с данными выборки. После этого создаем нейросеть нажатием кнопки Generate FIS.
Для каждой из входных переменных зададим по 3 лингвистические переменные с треугольной функцией принадлежности. В качестве функции принадлежности выходной функции зададим линейную функцию.
Для обучения нейросетей в пакете AnfisEdit предусмотрено 2 алгоритма обучения – обратного распространения и гибридный. При гибридном способе обучения сеть обучается буквально за пару-тройку проходов. На тренировочной выборке (60 значений) после обучения прогноз сети отличается от реального на несколько пунктов.
Но вот предсказывать то надо будущее! В качестве данных вне выборки были взяты следующие 9 дней после данных внутри выборки. На данных вне выборки среднеквадратичная ошибка составила 32 пункта, что конечно неприемлемо для реальной торговли, но говорит о том, что в направлении нейросетей можно работать дальше - игра должна стоить свеч.
Результатом нашей работы является многослойная гибридная нейронная сеть, которая способна прогнозировать абсолютные значения цен на небольшой будущее. Она кардинально отличается своей архитектурой и целями от однослойной нейронной сети, представленной господином Решетовым в своей статье http://articles.mql4.com/ru/articles/1447 и реализованной в качестве эксперта https://www.mql5.com/ru/code/10289.
Нам удалось получить более-менее сносный прогноз по самим котировкам, хотя специалисты в области нейронных сетей настоятельно не рекомендуют делать это. Полученной нейросетью можно полюбоваться при нажатии кнопки Structure. Обученную нейросеть можно взять в прикрепленых файлах neuro.zip .
Заключение
Нейронные сети являются очень мощным инструментом для работы на финансовых рынках, но для освоения этого этой технологии нужно потратить времени уж точно не меньше, чем на освоение технического анализа.
Плюсом нейросетей является объективность при принятии решения, а минусом – то, что решение принимает фактически черный ящик.
Основные проблемы, возникающие при работе с этой технологией – правильная предобработка данных, этот этап играет решающую роль для прогнозирования данных и очень многие безуспешные попытки работы с нейросетями связаны именно с этим этапом.
Для того, чтобы хорошо освоить нейросети нужно очень много экспериментировать – но игра стоит свеч. Если институциональные инвесторы используют этот инструмент, то и рядовые трейдеры тоже могут попытаться добиться успеха именно с помощью обученных нейросетей, ведь на вход сети можно подавать все – от индикаторов и цен до сигналов фундаментального анализа.
Литература
1. Нейрокомпьютинг и его применение в науке и бизнесе. А. Ежов, С. Шумский. 1998 г
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Скажу по секрету -- пока вы научитесь правильно подавать нужные данные в нужном формате в нейросетку, вам уже сама нейросеть не будет нужна. Так как тех данных как правило хватает для построения системы вручную. К тому же, автор совсем не раскрывает такую важную тему как - числовые параметры КАЧЕСТВА процесса обучения. А они очень важны :) а то не будет работать, и не будете знать почему. Про анализ входных данных на линейную разделимость тоже ничего не сказано, а без него тоже нет никаких гарантий, что ваши данные нерпотиворечивы, и что сеть хоть чемуто может научиться. А после хорошего анализа входных данных - например, картами Кохонена - сама нейросеть тоже уже становится не нужна. Но, даже карты Кохонена "переоптимизируют" торговую систему, причем весьма значительно. Хотя, подходы бывают разные.
В целом по статье полный низачот, никаких важных цифр не показано, читайте ЛеКуна для начала, или статьи с http://basegroup.ru/.
>>Основные проблемы, возникающие при работе с этой технологией – правильная предобработка данных, этот этап играет решающую роль для прогнозирования данных и очень многие безуспешные попытки работы с нейросетями связаны именно с этим этапом.
Скажу по секрету -- пока вы научитесь правильно подавать нужные данные в нужном формате в нейросетку, вам уже сама нейросеть не будет нужна. Так как тех данных как правило хватает для построения системы вручную. К тому же, автор совсем не раскрывает такую важную тему как - числовые параметры КАЧЕСТВА процесса обучения. А они очень важны :) а то не будет работать, и не будете знать почему. Про анализ входных данных на линейную разделимость тоже ничего не сказано, а без него тоже нет никаких гарантий, что ваши данные нерпотиворечивы, и что сеть хоть чемуто может научиться. А после хорошего анализа входных данных - например, картами Кохонена - сама нейросеть тоже уже становится не нужна. Но, даже карты Кохонена "переоптимизируют" торговую систему, причем весьма значительно. Хотя, подходы бывают разные.
В целом по статье полный низачот, никаких важных цифр не показано, читайте ЛеКуна для начала, или статьи с http://basegroup.ru/.
Я читал классику - Уоссермен и Ежов. А эта статья никак не претендует на полный мануал для профессионалов...
Просто хотелось показать, как можно поэксперементировать с нейросетями в MatLab, что это на так сложно, кого немного заинтересовало - тот пойдет дальше.
Если Вы профессионал в этой области - напишите свою статью под названием - "Нейросети для профессионалов", на этом форуме будет 20-30 человек, которые с удовольствием поддержат данную тему.
Сколько промежуточных слоев использовали и сколько эпох обучения использовали?
Спасибо
vtigers@gmail.com
М-да.
1.е.Статья тяжеловатая для новичков. ( Все такими были не надо...)
2.е. ни чего не сказано про выходы НС ... сколько лутше 1н выход или 2 выхода.
3.е. ни чего нет про обучение ( а иммено сколько лутше всего довать баров на перемолку сети).
Как можно использовать результаты для дальнейшей торговли?
Как использовать результаты для написания советника или индикатора, который бы предсказывал будущее с какой-то долей вероятностей?
Чем отличается MF Type: linear от constant?
В статье для обучения использовались цены. А можно ли использовать показания индикаторов (осциляторов)? Какие при этом выставлять параметры в Afins Editor?
В статье для результатов использовались цены. А можно ли в качестве результатов указывать на изменение цены (приращение)? Какие при этом выставлять параметры в Afins Editor?