В моем предыдущем посте я обучил простую нейронную сеть аппроксимировать функцию цена-доходность облигаций. Как мы видели, учитывая довольно большой набор данных, нейронная сеть может найти основную статистическую взаимосвязь между входами и выходами, регулируя веса и смещения в своих нейронах. В этом посте я сделаю еще один шаг, обучив агента принимать автоматические торговые решения в моделируемой стохастической рыночной среде с использованием обучения с подкреплением или Deep Q-Learning, которое является формой полу-контролируемого обучения. Он был изобретен британской фирмой Deep Mind и смог освоить широкий спектр игр для Atari 2600 до сверхчеловеческого уровня. Посмотреть его игру можно здесь.

Зачем использовать ИИ для алгоритмической торговли? Подавляющее большинство алгоритмической торговли состоит из стратегий статистического арбитража / относительной ценности, которые в основном основаны на конвергенции к среднему , где среднее значение получается из случайно выбранной выборки исторических данных. Алгоритмическая торговля в основном состоит из двух компонентов: политики и механизма. Политика выбирается трейдерами, а механизм реализуется машинами. Выбор правильной выборки данных для универсальной меры спреда с помощью регрессии всегда был огромной проблемой. Проблема здесь в том, что «Статистический арбитраж - это не столько проблема регрессии, сколько проблема поведенческого дизайна”, и она была хорошо понята, но довольно плохо реализована. . С развитием искусственного интеллекта и машинного обучения следующая волна алгоритмической торговли заставит машины выбирать как политику, так и механизм. Используя передовые концепции, такие как глубокое обучение с подкреплением и нейронные сети, можно создать систему управления торговлей / портфелем, обладающую когнитивными свойствами, которая может открывать долгосрочную стратегию посредством обучения. в различных стохастических средах.

РЕАЛИЗАЦИЯ:

Основываясь на инвестиционном тезисе о среднем изменении спредов, я смоделирую 500 эпизодов двух случайных процессов, возвращающихся к среднему, и научу агента использовать длинную / короткую стратегию. Подумайте об этом как о двух инструментах (акции или облигации), принадлежащих к одному и тому же отраслевому сектору, которые более или менее движутся вместе, а агент, то есть нейронная сеть, - это трейдер, который будет использовать отклонения в своем поведении из-за новостей, отчета о доходах, погоды или чего-то другого. макроэкономические события, открывая длинную позицию по более дешевому инструменту и короткую по более дорогому и наоборот, пока он не вернется к своему среднему значению. Фактически, нейронная сеть даже не будет знать о поведении возврата к среднему или о том, следует ли использовать стратегию статистического арбитража или нет, вместо этого она сама обнаружит эту закономерность в своем стремлении максимизировать вознаграждение / прибыль в каждом эпизоде, т.е. изучит эту стратегию самостоятельно, методом проб и ошибок. После обучения в этой среде этот агент должен уметь торговать любыми двумя инструментами, которые имеют определенное поведение совместной интеграции и соответствующий диапазон волатильности. Мы можем с уверенностью предположить, что объем торгов достаточно мал, чтобы никак не повлиять на рынок. Я хотел бы еще раз подчеркнуть важность создания объективных данных, а не использования исторических рыночных данных, поскольку я определил концепцию как Умные данные в моем предыдущем сообщении. .

ОКРУЖАЮЩАЯ СРЕДА

Первая и самая важная часть - это дизайн окружающей среды. Класс среды должен реализовывать следующие атрибуты / методы, основанные на соглашении OpenAI / gym:

Init: для инициализации среды в начале эпизода.

State: содержит цену A и B в любой момент времени = t.

Шаг: изменение среды после одного временного шага. При каждом вызове этого метода среда возвращает 4 значения, описанных ниже:

a) next_state: состояние в результате действия, выполненного агентом. В нашем случае это всегда будет цена A и B при t = t + 1.

б) вознаграждение: дает вознаграждение, связанное с действием, выполненным агентом.

c) done: дошли ли мы до конца серии.

г) info: содержит диагностическую информацию.

Сброс: для сброса среды после каждого эпизода тренировки. В этом случае он восстанавливает цены как A, так и B до их соответствующих средних значений и моделирует новый ценовой путь.

Рекомендуется хранить код среды отдельно от кода агента. Это упростит изменение поведения среды и обучение агента на лету. Я написал класс Python под названием market_env для реализации его поведения.

Примерный путь из 500 временных шагов для двух активов, сгенерированных средой с A (синий): среднее = 100,0, объем = 10% и B (зеленый): среднее = 100,0, объем = 20%, с использованием процесса Орнштейна – Уленбека »(Построенный с использованием python / matplotlib) показан ниже. Как вы можете видеть, два процесса пересекаются друг с другом много раз, демонстрируя свойство совместной интеграции, что является идеальной почвой для обучения агента стратегии длинные-короткие.

АГЕНТ

Агент представляет собой нейронную сеть MLP (Multi Layer Perceptron) с несколькими классами, принимающую два входных сигнала из среды: цену A и B. приводящие к действиям: (0) Длинная A, Короткая B (1) Короткая A, Длинная B (2) Ничего не делать, при условии максимизации общей награды на каждом шаге. После каждого действия он получает следующее наблюдение (состояние) и награду, связанную с его предыдущим действием. Поскольку среда является стохастической по своей природе, агент работает через MDP (M arkov Decision Process), т.е. следующее действие полностью основано на текущем состоянии, а не на истории. цен / состояний / действий и дисконтирует будущие награды с определенной мерой (гаммой). Оценка рассчитывается на каждом шаге и сохраняется в памяти Агента вместе с действием, текущим состоянием и следующим состоянием. Накопленное вознаграждение за эпизод представляет собой сумму всех индивидуальных оценок за время существования эпизода и в конечном итоге будет определять эффективность агента в процессе его обучения. Полная схема рабочего процесса показана ниже:

Почему этот подход вообще должен работать? Поскольку распространение двух совместно интегрированных процессов демонстрирует стационарное свойство, то есть имеет постоянное среднее значение и дисперсию во времени и может рассматриваться как имеющее нормальное распределение. Агент может идентифицировать это статистическое поведение, покупая и продавая A и B одновременно на основе их ценового разброса (= Price_A - Price_B). Например, если спред отрицательный, это означает, что A дешево, а B дорого, агент решит, что действие будет заключаться в открытии длинной позиции A и короткой позиции B для получения более высокого вознаграждения. Агент попытается аппроксимировать это с помощью функции Q (s, a), где 's' - это состояние, а 'a' - оптимальное действие, связанное с этим состоянием, чтобы максимизировать его отдачу за время существования эпизод. Политика для следующих действий будет определена с использованием алгоритма Беллмана Форда, как описано нижеприведенным уравнением:

Благодаря этому механизму он также оценит долгосрочные перспективы, а не просто немедленное вознаграждение, присвоив разные значения Q каждому действию. В этом суть обучения с подкреплением. Поскольку пространство ввода может быть очень большим, мы будем использовать глубокую нейронную сеть для аппроксимации Q (s, a) через обратное распространение. За несколько итераций функция Q (s, a) будет сходиться, чтобы найти оптимальное действие в каждом возможном состоянии, которое она исследовала.

Говоря о внутренних деталях, он состоит из двух основных компонентов:

  1. Память: это список событий. Агент будет хранить информацию с помощью итераций исследования и эксплуатации. Он содержит список в формате: (состояние, действие, награда, следующее_состояние, сообщение)
  2. Мозг: это полностью подключенная нейронная сеть с прямой связью, которая будет обучаться на основе памяти, то есть прошлого опыта. Учитывая текущее состояние в качестве входных данных, он спрогнозирует следующее оптимальное действие.

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

На изображении выше

Входы (2): Цена A и B зеленым цветом.

Скрытый (2 слоя): Обозначается узлами «H» синего цвета.

Выход (3): классы действий выделены красным.

Для реализации я использую Keras и Tensorflow, которые являются бесплатными библиотеками python с открытым исходным кодом.

Нейронная сеть обучается с произвольно выбранным размером выборки из ее памяти в конце каждого эпизода в реальном времени, поэтому после каждого эпизода сеть собирает больше данных и обучается дальше от него. В результате функция Q (s, a) сойдется с большим количеством итераций, и мы увидим, что производительность агента увеличивается со временем, пока не достигнет точки насыщения. Возврат / вознаграждение масштабируются на изображении ниже.

На приведенном выше графике вы можете увидеть 3 разных графика, представляющих полные сценарии обучения из 500 эпизодов, каждый из которых имеет 500 шагов. На каждом шаге агент выполняет действие и получает свою награду. Как видите, вначале, поскольку агент не имеет предвзятого мнения о последствиях своих действий, он предпринимает случайные действия, чтобы наблюдать связанные с ним вознаграждения. Следовательно, совокупное вознаграждение за эпизод сильно колеблется в начале от 0 до 300-го эпизода, однако после 300 эпизодов агент начинает учиться на своем обучении, и к 400-му эпизоду он почти сходится в каждом из сценариев обучения, поскольку он обнаруживает длительные -короткий шаблон и начинает его полностью эксплуатировать.

Перед ним по-прежнему существует много проблем, и он все еще является частью продолжающихся исследований в области инженерии как агента, так и окружающей среды. Моя цель здесь заключалась не в том, чтобы показать протестированную прибыльную торговую стратегию, а в том, чтобы описать, как применять передовые концепции машинного обучения, такие как Deep Q-Learning / Neural Networks в область алгоритмической торговли. Это чрезвычайно сложный процесс, и его довольно сложно объяснить в одном сообщении в блоге, однако я изо всех сил старался упростить его. Посмотрите код по ссылке dl-algo-trader.

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

В конце концов, возникает вопрос, может ли ИИ все делать? Вероятно, не. Можем ли мы эффективно обучить его чему-либо? Возможно, да, то есть с реальным интеллектом искусственный интеллект определенно может процветать. Спасибо за прочтение. Пожалуйста, не стесняйтесь делиться своими идеями в разделе комментариев ниже или свяжитесь со мной в linkedin.

Надеюсь, вам понравился пост!

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:

1. Выраженные мной мнения являются исключительно моими и не отражают взгляды или мнения какого-либо из моих работодателей.

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