Проект UTMIST Джека Кая, Лизы Ю, Юнву (Итана) Чоя, Дунфан Цуя, Алаапа Гранди, Деметра Жураса, Кевина Ми, Ян Цюя, Чжэньхай (Джоэл) Цюань, Томаса Верта.

Проект Wall Street Bots — это шестимесячная задача по созданию платформы для торговли акциями с использованием методов анализа данных и машинного обучения. Конечный продукт предназначен для обеспечения аутентификации пользователей, осуществления торговли, создания портфелей и использования автоматической балансировки портфеля с помощью одной из наших проверенных стратегий на нашей веб-платформе. Читатели и разработчики могут попробовать внести свой вклад в этот проект на нашей веб-платформе и странице Github.

Создание платформы для торговли акциями на основе искусственного интеллекта (ИИ) гораздо сложнее, чем прогнозирование цен на акции с использованием численных методов, таких как импульс, или методов машинного обучения с глубоким обучением. В то время как последний представляет собой чистый анализ данных и машинное обучение, первый охватывает гораздо более широкие области, от не только прогнозирования цен, но и стратегий управления портфелем, анализа состояния рынка, обратного тестирования, конвейера данных и развертывания в режиме реального времени. Проект Wall Street Bots должен сделать все вышеперечисленное — что, если мы создадим ИИ не с точки зрения науки о данных, а с точки зрения практичности (он приносит деньги)? Что, если мы сделаем что-то похожее на хедж-фонд, но индивидуальное и с открытым исходным кодом? Какого уровня сложности мы достигнем и как он работает по сравнению с рынком? Проект Wall Street Bots направлен на достижение всего этого (или частично в некоторых областях). Кроме того, мы изучили роль обработки естественного языка в прогнозировании цен/трендов акций и могут ли новости об акциях и рыночные настроения действительно помочь в прогнозировании цен. Мы создали платформу, которая позволяет пользователям вручную торговать акциями через Alpaca API или с помощью одной из разработанных нами стратегий искусственного интеллекта.

В этой статье на Medium мы познакомим вас с общим обзором того, как мы создали ботов Уолл-Стрит. Следующая статья организована:

1. История

Торговля акциями с использованием автоматической торговой платформы не является чем-то новым. На самом деле, банки, хедж-фонды и торговые фирмы уже давно используют аналогичные методы алгоритмической торговли. С появлением цифрового потока рыночных ордеров идея алгоритмической торговли становится все более и более актуальной. Поскольку эти торговые объекты должны постоянно точно выполнять большое количество заказов, кажется гораздо более разумным и эффективным предоставить это машинному алгоритму, а не людям. Однако когда эти мегакорпорации используют алгоритмическую торговлю на практике, это создает много потенциальных проблем. Например, широко распространено мнение, что крах фондового рынка 1987 года и внезапный крах 2010 года были вызваны крупномасштабными ордерами, размещаемыми алгоритмическими торговыми машинами. Кроме того, эти алгоритмы машинного обучения часто не так доступны для общественности. Если потребитель решит вложить свои деньги в один из этих банков или хедж-фондов, часть его прибыли часто будет у него отнята. Более того, инвестор часто не может контролировать, какую торговую стратегию использует алгоритм. Кто-то может спросить: «Зачем кому-то выбирать свою собственную стратегию торговли акциями, если они могут просто оставить это на усмотрение аналитиков с Уолл-стрит?» Ответ на этот вопрос прост. Поскольку все больше и больше обычных людей выходят на фондовый рынок в эпоху после Covid-19, розничные инвесторы теперь имеют больше возможностей влиять на рынок, чем когда-либо прежде. Приток инвесторов и напряженность между мировыми державами в сочетании с высоким ростом технологических компаний во время пандемии создали один из самых нестабильных рынков за последние 100 лет. Поэтому мы считаем, что индивидуализированная автоматическая торговая платформа с открытым исходным кодом, такая как WallStreetBots, потенциально может стать еще одним инструментом для обычных инвесторов и трейдеров, позволяющим оказывать влияние на рынок и получать прибыль. В таких событиях, как короткое сжатие GME, эти инвесторы и трейдеры уже доказали, что они могут наказывать за плохие торговые решения, принятые институциональными торговыми фирмами. С такой платформой, как WallStreetBots, эти трейдеры и инвесторы будут иметь тот же инструмент, который институциональные фирмы используют для облегчения торговли, а также делая ее более последовательной и точной.

2. Платформа

2.1. Альпака

Прежде чем приступить к созданию платформы для торговли акциями, необходимо рассмотреть несколько вопросов. Во-первых, как мы можем получить согласованные данные о котировках в реальном времени? Как мы заботимся о различных типах заказов, храним информацию о запасах и максимально приближаем моделирование к реальной жизни? К счастью, API торговли бумагой Alpaca позаботится обо всех этих проблемах, так что мы можем сосредоточиться на разработке стратегии и конвейера. Alpaca предлагает бесплатные ключи API для бумажной торговли, которые позволяют пользователям размещать заказы, получать доступ к информации об учетной записи и получать информацию о запасах через библиотеку API Python Alpaca. Платформа Wall Street Bots построена на основе API Alpaca. Пользователи могут получить свой бесплатный ключ API Alpaca и секретный ключ с официального веб-сайта Alpaca и ввести их на странице панели инструментов. Всякий раз, когда пользователь размещает заказ на сайтеwallstreetbots.org, та же информация обновляется на странице торговли бумагой Альпака и наоборот.

2.2. Инструменты и библиотека

Веб-приложение было создано с использованием основных технологий Docker, Python+Django и psql. Python был выбран потому, что он де-факто является языком машинного обучения, а хранение всей кодовой базы на одном языке является огромным преимуществом. Docker должен помочь в развертывании с воспроизводимыми сборками. Как именно используется docker, также будет подробно описано в разделе развертывания. Psql был выбран из-за его собственной поддержки с Django. Psql теперь является выбором по умолчанию для многих веб-приложений, если не может быть удовлетворена конкретная потребность. Первоначально этот проект мог потребовать большого количества данных временных рядов для обучения машинному обучению, но эта часть проекта была вырезана, и вместо этого использовались файлы CSV. Сохранение этих данных вне базы данных позволило снизить сложность и сократить время реализации. Внешний интерфейс веб-приложения визуализируется с помощью механизма шаблонов Django — это позволяет избежать большей части сложности, которую могут принести React/Angular/Vue. Поскольку этот проект был в основном ограничен по времени, возможность работать с минимально возможным количеством настроек была приоритетом при выборе всех этих технологий.

2.3. Структура веб-приложения

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

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

2.4. Торговая воронка

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

В проекте Wall Street Bots была реализована Скрытая Марковская модель (HMM) и различные глубокие нейронные сети (DNN), а также обработка естественного языка (NLP) для прогнозирования цены и волатильности, а также две стратегии балансировки портфеля: наивный портфель с одинаковым весом и моделирование Монте-Карло для максимизации Коэффициент Шарпа.

2.5. Развертывание и автоматизация

Все веб-приложение докеризовано, что упрощает развертывание. Используются только два контейнера Docker: один с приложением Django и один с предварительно созданной базой данных psql. Контейнеры организованы с помощью docker-compose. Опять же, это было выбрано из-за простоты, а не Kubernetes или подобных инструментов. Он размещен на DigitalOcean с использованием наименьшего размера капли. Проект клонирован с GitHub, а в файлы .env добавлены секретные ключи. Сама капля имеет обратный прокси-сервер для перенаправления трафика HTTP/HTTPS в контейнер веб-приложения, а правила брандмауэра изменены, чтобы разрешить этот внешний трафик в этих портах и ​​из них.

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

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

3. Сбор данных

Данные являются неотъемлемой частью любой задачи анализа. Проект Wall Street Bots собирает рыночные данные, включая цены на акции, цены на индексы, биржевые новости, комментарии инвесторов и фундаментальные данные из различных источников. Эти источники и используемые методы перечислены ниже.

3.1. Данные рынка Альпака

Альпака предлагает котировки акций и индексов, а также исторические данные для всех бирж США. Кроме того, Альпака предлагает новостной API для заголовков исторических новостей и новостей в реальном времени. Хотя и не в больших количествах, эти заголовки новостей используются в сочетании с другими источниками для анализа настроений и задач НЛП.

3.2. API архива новостей New York Times

The New York Times предлагает бесплатный новостной API для анализа заголовков исторических новостей NYT.

3.3. Заголовки новостей Finviz

Finviz не предлагает никаких API, но является хорошим источником новостей об акциях. Из-за простоты веб-сайта извлекать заголовки из Finviz относительно легко. Извлечение заголовков новостей из Finviz осуществляется с помощью библиотеки Python Beautiful Soup. Написан простой скрипт веб-скрейпинга, который ищет 100 последних новостей по каждой акции на FinViz. Скрипт доступен здесь.

3.4. r/wallstreetbets Комментарии к ежедневному обсуждению

Мы получаем доступ к данным комментариев инвесторов через дискуссионную ветку Reddit r/wallstreetbets. Собрать комментарии в Daily Discussion Thread с r/wallstreetbets намного сложнее, чем соскоблить заголовки Finviz. Причины двоякие. Во-первых, каждая ежедневная ветка обсуждения содержит примерно 10 000 комментариев в день. Мы просмотрели r/wallstreetbets за период с 01.01.2020 по 13.05.2022, и даже если мы возьмем только 1,5 тыс. лучших комментариев в день, в общей сложности их будет более миллиона. Во-вторых, в то время как Reddit PRAW API позволяет получить все комментарии ветки по идентификатору ветки, в идентификаторе каждой ветки ежедневного обсуждения нет шаблона. Чтобы решить эту проблему, мы приняли подход, аналогичный [1], в котором мы запрограммировали драйвер Chrome библиотеки Selenium для автоматического поиска имени потока и поиска определенного тега класса в HTML для уникального идентификатора потока. Затем мы сохранили эти идентификаторы в формате CSV и использовали Reddit PRAW API, чтобы получить 1,5 тыс. самых популярных комментариев для каждой темы. Полный сценарий доступен здесь.

3.5. RSS-каналы

Также были извлечены RSS-каналы из различных источников новостей. Интерес представляли в основном заголовки и короткие тела. Этими источниками часто были традиционные газеты, такие как The Economist или The New York Times. Канал RSS опрашивается для новых дополнений. На практике это был неэффективный источник данных, поскольку каждый источник новостей слишком сильно отличался друг от друга, чтобы сгруппировать их вместе в одном наборе данных. Статьи были не так часты, как другие источники. Исторические данные было трудно зафиксировать. Этот источник не использовался для обучения ни одной из моделей.

4. Стратегии

4.1. Прогнозирование цены закрытия акций с помощью НЛП

2021 год — феноменальный год не только потому, что рынок достиг наивысшей точки в истории после пандемии, но и потому, что рост акций мемов, таких платформ, как r/wallstreetbets, и отдельных трейдеров, которые напоминают нам, что рынок зависит не только от банков. , торговые фирмы и крупные хедж-фонды, а также отдельные трейдеры и общественные настроения вокруг рынка. Идея о том, что рынок коррелирует с общественным мнением, не нова. Фактически, известное исследование 2011 года, проведенное Bollen et al. [2] выявил корреляцию между промышленным индексом Доу-Джонса (DJIA) и настроениями в Твиттере из модели Google GPOMS, которая выводит настроения по шести категориям. В частности, категория спокойствие показала наибольшую корреляцию, в то время как другие категории почти не выявили. Исследование продемонстрировало поразительную точность предсказания тренда 86,7% с линейной регрессией, сочетающей прошлую цену и оценку спокойствия, чтобы предсказать цену закрытия следующего дня DJIA, в то время как базовая точность, основанная на скользящем среднем, достигла 73,3%. Несмотря на высокие показатели, следует помнить о том, что период тестирования — это короткий промежуток времени, всего 15 торговых дней, и период выбран с наименьшей волатильностью индекса Доу-Джонса и отсутствием крупных неожиданных социально-экономических событий. В действительности часто происходят неожиданные события, которые искажают цены акций от прогноза, а точность предсказания тренда скользящей средней ограничена примерно 50%, в отличие от 73,3% в исследовании, особенно когда рынок нестабилен.

К сожалению, мы не смогли напрямую принять подход Боллена и др. к ботам с Уолл-стрит из-за того, что модель GPOMS, используемая в исследовании, является моделью с закрытым исходным кодом. Вместо этого мы переключили свое внимание на большие языковые модели, разработанные в последние годы благодаря преобразователям и механизмам внимания. Конкретной моделью, которую мы будем использовать, является BERT [3], что означает представление двунаправленного кодировщика от трансформаторов. Мы не будем вдаваться в подробности о том, как работает BERT в этой статье, но одной из его ключевых функций является кодирование строки текста в вектор 768-D, называемый вектором внедрения предложения. Вектор встраивания предложения улавливает смысл предложения, и хотя он не говорит нам напрямую о его спокойствии, нейронная сеть, обученная на основе этих вложений, безусловно, может. Мы использовали FinBert [4], доработанную версию BERT, обученную на финансовых данных. Поэтому вместо того, чтобы использовать показатель спокойствия из данных Twitter для проведения линейной регрессии, мы обучили глубокие нейронные сети (DNN) с вложениями FinBERT на различных текстовых источниках в сочетании с прошлыми ценами и индикаторами, такими как VIX и QQQ, для прогнозирования следующего дня. цена закрытия. (Обратите внимание, что FinBERT напрямую классифицирует текст по трем показателям тональности — положительному, нейтральному и отрицательному. Мы извлекаем вложение FinBERT как вложение токена ‹CLS› последнего скрытого состояния.)

4.1.1. Многоуровневый персептрон прогнозирования тенденций на основе заголовков биржевых новостей

Первой моделью, которую мы попробовали, был многоуровневый персептрон (MLP), предсказывающий тренд акций (растущий или падающий) исключительно на основе заголовков. Мы сделали это в качестве отправной точки, потому что заголовки биржевых новостей проще всего получить с помощью парсинга из FinViz и Alpaca News API. Мы собрали 50 акций роста с NASDAQ с аналогичными фундаментальными показателями и собрали их заголовки с 2016 по 2022 год, и мы получили в общей сложности около 100 000 заголовков. Наборы поездов/тестов представляют собой встраивания этих заголовков в FinBERT, а метки показывают, идет ли цена акций вверх или вниз после выпуска заголовка (1 = вверх, -1 = вниз). Мы пробовали это как за час, так и за день до и после выхода новости. Однако независимо от того, какие методы обучения мы применяли или какой гиперпараметр использовали, мы не смогли снизить потери при тестировании. На рисунке ниже показана типичная кривая потерь и итераций для этой модели на одном из сеансов обучения.

Приведенный выше рисунок представляет собой типичную проблему переобучения, но уменьшение размера модели и добавление правил, таких как отсев, не сделали ее лучше — потери при обучении в конечном итоге росли вместе с потерями при тестировании. После дополнительных исследований мы обнаружили, что в этом подходе есть что-то принципиально неправильное. Во-первых, предсказать цену по новостям практически невозможно. Согласно гипотезе эффективного рынка, когда появляются новости, цена акций отражает их почти сразу. В конце концов, как у побочного проекта, у нас нет ни ресурсов, ни нулевой задержки, чтобы реагировать быстрее, чем рынок. На самом деле аналитики с Уолл-Стрит предвосхищают новости, что представляет собой совершенно другую проблему, которую гораздо труднее изучить. Кроме того, мы не включали в обучающую выборку прошлые цены и другие индикаторы; на самом деле это наивное предположение, потому что тренды акций нельзя отделить от их цен. Например, если акции уже сильно переоценены, они, скорее всего, упадут, несмотря на положительные новости. Мы отказались от этого подхода и вместо этого просмотрели комментарии r/wallstreetbets для предсказания цены/тренда.

4.1.2. Прогноз цен GME MLP, CNN и LSTM с r/wallstreetbets Daily

Комментарии к обсуждениям Комментарии Reddit, с другой стороны, являются гораздо лучшими источниками настроений инвесторов, чем заголовки новостей, потому что, во-первых, в отличие от заголовков новостей, которые поступают из нескольких изданий, комментарии Reddit имеют различные источники, которые представляют большую часть населения. Во-вторых, комментарии Reddit содержат больше эмоций (что легче для анализа настроений), чем заголовки новостей, которые в основном представляют собой констатацию фактов. Ежедневная дискуссионная ветка r/wallstreetbets — это место, где большинство инвесторов r/wallstreetbets высказывают свое мнение о рынке, поэтому это отличный источник для анализа настроений. Хотя инвесторы r/wallstreetbets представляют собой лишь небольшую часть населения, мы считаем, что они представляют гораздо большую часть инвесторов в акции мемов. По этой причине мы использовали комментарии Reddit при прогнозировании цены GME, а не индексы, представляющие общий рынок, такие как SPY и NASDAQ.

Как и в предыдущем подходе, мы запускаем FinBERT для комментария Reddit и извлекаем вложения. Но на этот раз мы рассматриваем прошлые цены, результаты настроений FinBERT, индекс SPY, индекс VIX и индекс NASDAQ. Общие функции и метки обучающего/тестового набора показаны ниже.

Мы собрали около 1,1 миллиона комментариев за 598 торговых дней, с 1 января 2020 г. по 13 мая 2022 г. Входные данные включают предыдущую цену закрытия, положительные/нейтральные/отрицательные оценки комментариев Reddit, полученные с помощью модели FinBert, предыдущее закрытие VXX (в качестве замены VIX), предыдущее закрытие SPY, предыдущее закрытие QQQ (в качестве замены NASDAQ), количество голосов за комментарий Reddit, час дня, когда комментарий был опубликован, и 768 размер FinBert встраивание комментария. Целью, которую мы пытаемся предсказать, является следующая цена закрытия акций. Мы протестировали следующие модели (перечисленные ниже) и некоторые с добавлением данных по другим ценам на акции, таким как AMC, TSLA, AAPL и KOSS, которые часто упоминаются в r/wallstreetbets или имеют высокую корреляцию с GME.

Скользящая средняя за N дней (контрольная). Мы рассчитываем скользящую среднюю за N за прошлые N дней, которая является следующей прогнозируемой ценой для GME, и мы выбрали N, обеспечивающее наибольшую точность предсказания тренда (50,0%). и самая низкая средняя абсолютная процентная ошибка (MAPE) (6,24%) для эталонной модели.

Многослойный персептрон (MLP). Используя в качестве входных данных полные функции (𝑁 × 777), трехуровневая модель MLP с активациями ReLU пытается предсказать нормализованную дневную доходность на основе следующей цены закрытия. Чтобы избежать предвзятости, мы разделили данные для обучающих и проверочных наборов в хронологическом порядке (80% и 20%). Модель MLP достигла точности предсказания тренда проверки 54,3% и MAPE 10,87%. Эти результаты хуже, чем эталонная стратегия скользящей средней. Это может быть связано с тем, что каждый отдельный комментарий рассматривается как одна точка данных, что приводит к появлению нескольких комментариев с разными настроениями в течение одного дня, и все они имеют одинаковую целевую доходность для прогнозируемой модели. Эта взаимосвязь вход/цель имеет смысл только в том случае, если все комментарии каждый день имеют очень схожие настроения.

Сверточная нейронная сеть (CNN). Сначала мы рассматриваем только данные о ценах GME. Чтобы решить проблему, поднятую в предыдущем разделе модели MLP, мы объединили входные признаки всех комментариев в один и тот же день в матрицу размером 500 × 777 (поскольку мы собирали 500 комментариев каждый день) и обработали каждый из этих «ежедневных» матрицы как отдельная точка данных с одним соответствующим целевым доходом. Окончательный набор данных имеет размеры 606 × 500 × 777 после исключения дней с менее чем 500 комментариями. Мы случайным образом разделяем данные, чтобы получить наборы для обучения и тестирования (80% и 20%). Окончательная сеть CNN с двумя слоями свертки и двумя плотными слоями с максимальным объединением и активациями ReLU достигла точности предсказания тренда проверки 49,5% и MAPE 14,49%. Опять же, эта модель оказалась хуже эталона скользящей средней. Вероятно, это связано с тем, что после группировки точек данных на основе даты комментария новый набор данных для GME имеет размер всего 606, что слишком мало для обучения модели.

CNN с дополнением данных. Мы пытаемся решить проблему нехватки данных, дополняя данные GME данными о ценах различных акций, доходность которых сильно коррелирует с доходностью GME. Это приводит нас к разработке модели CNN с увеличением данных. Мы выбрали AMC, KOSS, TSLA и AAPL и выполнили тест на поезд в хронологическом порядке (80%, 20%). С той же моделью CNN мы достигли точности предсказания тренда проверки 58,1% и MAPE 8,7%. Точность предсказания тренда значительно превзошла контрольный показатель скользящего среднего.

Долгосрочная кратковременная память (LSTM). Модель LSTM создается с полным набором функций (𝑁 × 777) в тренировочном наборе X, и мы усредняли вложения комментариев и оценки тональности каждый день, создавая в общей сложности 611 точки данных. Из-за отсутствия точек данных и многомерных признаков был использован анализ основных компонентов (PCA), чтобы уменьшить вложение FinBert до 20 измерений, что сохранило дисперсию 63,2%. Несмотря на уменьшение размерности, тестовые потери не смогли сойтись. Общая наилучшая точность тренда проверки составляет 51,0% и 29,52% для MAPE.

Дистиллированная версия LSTM:
Дистиллированная версия LSTM создается без вложений FinBERT и содержит только 8 функций на каждом временном шаге. Тестовый убыток смог сойтись, и мы нашли лучшую модель с 256 скрытыми измерениями, используя прошлые N = 10 точек данных, чтобы предсказать следующую цену закрытия. Общая наилучшая точность тренда проверки составляет 61,8% и 6,20% для MAPE.

Сравнение вышеуказанных моделей показано ниже.

В целом, наша лучшая модель (LSTM Distilled) показала значительно большую точность проверки тренда (61,8% против 50,0%), чем эталон, с небольшим улучшением MAPE (6,20% против 6,24%). Действительно, акции GME являются волатильными, поэтому предсказать цены, близкие к цели, сложно, что объясняет, почему так трудно снизить MAPE. Тем не менее, точность тренда в 61,8% может быть достаточной для построения алгоритма управления портфелем, который в долгосрочной перспективе будет иметь положительную ожидаемую доходность. Обратите внимание, что по сравнению с Bollen et al., наш период проверки значительно больше (120 дней против 15 дней), а точность нашего эталона ниже (50,0% против 73,3%) для акций и периода времени, которые мы выбрали.

4.2. Ежедневный прогноз цены открытия акций с помощью HMM

Скрытая марковская модель (HMM) представляет собой последовательную модель с предположением о статистическом марковском процессе и широко применяется в моделировании временных рядов, например, прогрессирования заболевания и сегментации текста. Марковский процесс предполагает, что каждое наблюдение зависит только от короткой истории, а каждое наблюдение зависит только от текущего скрытого состояния. Интерпретация скрытого состояния зависит от контекста проблемы, и здесь его можно интерпретировать как основные условия фондового рынка. В проекте Wall Street Bots мы используем внутридневную минутную цену каждого дня, чтобы предсказать цену открытия следующего дня.

На приведенном выше рисунке показан стандартный HMM (в контексте предсказания цены открытия акции):

  • Z_(1) …, Z_(t+1) представляет собой скрытое состояние, которое является представлением скрытых условий фондового рынка.
  • Y_(1), …, Y_(t) представляет собой цену закрытия текущего дня в минуту, а Y_(t+1) представляет цену открытия следующего дня.
  • Стрелка представляет зависимость.

Реализация. Здесь мы предполагаем, что цена акции в каждой точке зависит только от ее текущего скрытого состояния, а каждое скрытое состояние зависит только от предыдущего скрытого состояния. Мы используем реализацию hmmlearn для архитектуры модели. Чтобы построить наши обучающие данные, мы стандартизировали цену закрытия в тот же день на минутной основе, вычитая первую цену закрытия. Мы строим один временной ряд как цену закрытия текущего дня на минутной основе, за которой следует цена открытия следующего дня. Конечная цель состоит в том, чтобы предсказать цену открытия следующего дня, используя цену закрытия предыдущего дня на минутной основе. Обоснование этого заключается в том, что мы предполагаем, что модель остается неизменной во время рынка и послепродажного обслуживания. Когда рынок открывается, цена акции остается в том же скрытом состоянии, что и последняя цена закрытия. Обратите внимание, что торговать на вторичном рынке невозможно, поэтому при развертывании мы запускаем HMM прямо перед закрытием рынка и предполагаем, что в оставшееся время цена акций остается стабильной и находится в тех же скрытых состояниях.

Есть несколько причин для использования HMM здесь: во-первых, потому что HMM продемонстрировал свою сильную способность делать выводы и прогнозы во многих других исследованиях и случаях использования, мы считаем, что HMM также может иметь многообещающие результаты в сценарии прогнозирования цен на акции; другая причина заключается в том, что HMM выводит распределение прогнозируемых значений. При определенных конфигурациях модели он выводит нормальное распределение со средним значением, равным ожидаемой стоимости акции, и дисперсией, пропорциональной ее волатильности. Таким образом, мы можем изучать рыночные колебания по модели и напрямую использовать ее для алгоритмов балансировки портфеля, таких как поиск методом Монте-Карло для максимизации коэффициента Шарпа.

Результат. Мы оцениваем производительность модели по двум показателям: среднеквадратической ошибке (MSE) и точности предсказания тренда. Мы определяем точность предсказания тренда следующим образом: доля правильного предсказания тренда акций на следующий день (растущий или падающий) и MSE, как обычно:

Во время оценки мы использовали данные Microsoft с 2019 по 2021 год и обучили HMM с 15 скрытыми состояниями. Синий график представляет истинную цену, а красный график представляет результаты прогнозирования модели. HMM может делать прогнозы, очень близкие к истинным значениям, с MSE 21,0 по сравнению с 3623,6 по эталонной модели скользящего среднего. С этой настройкой мы можем достичь точности предсказания тренда 66,2%. Чтобы показать, что прогноз имеет смысл, мы сравнили его с долей дней, когда наблюдается восходящий тренд (53,2%), показывая, что прогноз тренда HMM значительно превосходит случайное предположение.

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

Хотя кажется, что HMM превосходит все модели DNN с точностью тренда 66,2%, важно иметь в виду, что HMM предсказывает только цену открытия следующего дня, в то время как DNN предсказывает цены закрытия. Эти два типа моделей несопоставимы, поскольку прогнозирование цены закрытия следующего дня является более сложной задачей с большей случайностью. Тем не менее, как показал наш результат, HMM остается мощным алгоритмом.

4.3. Балансировка портфеля с прогнозируемой ценой акций

Учитывая нашу прогнозируемую цену закрытия и открытия на следующий день и предполагая, что мы открываем только длинные позиции, мы построили нашу торговую стратегию следующим образом:

4.3.1. Равновзвешенный портфель

4.3.2. Моделирование методом Монте-Карло для портфеля с максимальным коэффициентом Шарпа

Коэффициент Шарпа — это показатель доходности портфеля с поправкой на риск. Он имеет формулу

Монте-Карло — это распространенный метод, используемый для оптимизации портфеля. Мы аппроксимируем максимальный портфель Шарпа, случайным образом присваивая веса портфеля каждому весу от 0 до 1 таким образом, чтобы общий вес всех акций в сумме равнялся 1. Затем мы вычисляем ожидаемую доходность и дисперсию портфеля.

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

Затем мы рассчитываем коэффициент Шарпа портфеля по приведенной выше формуле, предполагая безрисковую ставку 2%. Мы повторяем этот процесс тысячи раз, чтобы получить оптимальный вес портфеля, который максимизирует коэффициент Шарпа. См. приведенный ниже график для примера анализа Монте-Карло — максимальный портфель Шарпа помечен красным, а портфель с минимальной дисперсией отмечен синим.

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

5. Демонстрация

В этом разделе показаны все компоненты Wall Street Bots, работающие вместе как единое целое. Это также пошаговое руководство по использованию веб-приложения для опробования стратегий.

  1. Во-первых, вам нужно будет создать бесплатную учетную запись на https://alpaca.markets/.
  2. После создания бесплатной учетной записи перейдите на панель управления торговлей бумагой по адресу https://app.alpaca.markets/paper/dashboard/overview.
  3. Рядом с Ваши API-ключи нажмите кнопку Просмотреть, а затем нажмите Создать ключ повторно.
  4. Скопируйте идентификатор ключа и секретный ключ.
  5. Теперь перейдите на https://wallstreetbots.org/. Следуйте инструкциям и создайте учетную запись. Войдите в систему, и вы будете перенаправлены на страницу панели инструментов.
  6. Вставьте свой Идентификатор ключа и Секретный ключ в поля Идентификатор Alpaca и Ключ Alpaca соответственно, затем нажмите ОБНОВИТЕ УЧЕТНЫЕ СВЕДЕНИЯ. (Примечание: выполняя этот шаг, вы соглашаетесь передать свои учетные данные Alpaca API в базу данных Wall Street Bots)
  7. У вас все настроено! Теперь вы можете размещать заказы, просматривать информацию об акциях/историю портфеля и создавать свой собственный портфель на странице «Позиция».

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

6. Заключительные замечания

В заключение, предсказать движение запасов сложно, а создать платформу, которая объединяет различные модели и стратегии и выполнять заказы от имени пользователей, еще сложнее. В этом проекте мы прошли все этапы создания «мини-хедж-фонда» — от выбора и проверки стратегий до разработки и развертывания программного обеспечения. Мы надеемся, что эта статья вдохновит вас сделать что-то подобное или даже рассмотреть возможность участия в этом проекте с открытым исходным кодом. Уолл-стрит-боты — это непрерывная работа, и в будущем будут постоянно разрабатываться новые функции и стратегии. Следите за обновлениями!

Еще раз, вы можете проверить нашу кодовую базу в нашем репозитории GitHub здесь или попробовать наш веб-сайт по адресу walltreetbots.org. Сотрудничество также приветствуется в форме запросов на включение.

Спасибо за прочтение!

Ссылки

[1] Смит, А. Reddit Wallstreetbets — Учебник по парсингу веб-страниц. https://algotrading101.com/learn/reddit-wallstreetbets-web-scraping/

[2] Bollen, J, Mao, H, Zeng, X. Настроение Twitter предсказывает фондовый рынок. https://arxiv.org/pdf/1010.3003.pdf

[3] Девлин, Дж., Чанг, М., Ли, К., Тутанова, К. БЕРТ: Предварительная подготовка глубоких двунаправленных преобразователей для понимания языка. https://arxiv.org/pdf/1810.04805.pdf

[4] Арачи, Д. ФинБЕРТ: Анализ финансовых настроений с помощью предварительно обученных языковых моделей. https://arxiv.org/pdf/1908.10063.pdf

[5] Ахмед, С. Как создать эффективный портфель с помощью современной теории портфеля в Python?
https://towardsdatascience.com/how-to-construct-an-efficient-portfolio-using-the- современная-портфолио-теория-на-питоне-5c5ba2b0cff4