Введение в торговлю с глубоким обучением в хедж-фондах

Опубликовано: 2022-03-11

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

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

Одним из наиболее привлекательных применений глубокого обучения являются хедж-фонды. Хедж-фонды — это инвестиционные фонды, финансовые организации, привлекающие средства инвесторов и управляющие ими. Обычно они работают с данными временных рядов и пытаются сделать некоторые прогнозы. Существует особый тип архитектуры глубокого обучения, который подходит для анализа временных рядов: рекуррентные нейронные сети (RNN) или, точнее, особый тип рекуррентной нейронной сети: сети с долговременной кратковременной памятью (LSTM).

LSTM способны фиксировать наиболее важные функции данных временных рядов и моделировать их зависимости. Модель прогнозирования цен на акции представлена ​​в качестве наглядного примера того, как хедж-фонды могут использовать такие системы. Фреймворк PyTorch, написанный на Python, используется для обучения модели, разработки экспериментов и получения результатов.

Мы начнем с некоторых основ глубокого обучения, прежде чем перейти к реальным примерам:

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

Представляем аргументы в пользу трейдинга с глубоким обучением

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

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

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

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

Что отличает хедж-фонды

Прежде чем перейти к технической стороне проблемы, необходимо объяснить, в чем уникальность хедж-фондов. Итак, что такое хедж-фонд?

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

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

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

В данной статье рассматривается нормативно-правовая база США, так как в США самый развитый финансовый рынок на земном шаре. Так, в Соединенных Штатах Америки термин «аккредитованный инвестор» определен в Правиле 501 Положения D Комиссии по ценным бумагам и биржам США (SEC).

Согласно этому положению, аккредитованными инвесторами могут быть:

  • банки
  • Частные компании по развитию бизнеса
  • Организации
  • Директора, должностные лица и генеральные партнеры эмитентов предлагаемых или продаваемых ценных бумаг
  • Физические лица, чей индивидуальный собственный капитал или совместный собственный капитал с супругом этого лица превышает 1 000 000 долларов США.
  • Физические лица, которые имели индивидуальный доход более 200 000 долларов США в каждый из двух последних лет или совместный доход с супругом этого лица в размере более 300 000 долларов США в каждый из этих лет и имеют разумные ожидания достижения того же уровня дохода в текущем году.
  • Трасты с общими активами более 5 000 000 долларов США
  • Компании, в которых все владельцы капитала являются аккредитованными инвесторами

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

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

Краткая история хедж-фондов

Первый хедж-фонд появился в 1949 году, его основал бывший писатель и социолог Альфред Уинслоу Джонс. Это было в 1948 году, когда он писал статью о текущих инвестиционных тенденциях для Fortune.

Он пытался распоряжаться деньгами и очень преуспел. Он привлек деньги, используя свою инвестиционную инновацию, которая теперь широко известна как длинная/короткая акция. Стратегия по-прежнему очень популярна среди хедж-фондов. Акции можно купить (купить: длинная) или продать (продать: короткая).

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

Финансовые данные и наборы данных

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

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

Наборы данных с более богатыми характеристиками и меньшими временными интервалами обычно не являются общедоступными, и их получение может быть очень дорогим. Меньшие интервалы означают больше данных временных рядов за фиксированный период — в одном году 365 (или 366) дней, поэтому доступно максимум 365 (или 366) точек данных. Каждый день состоит из 24 часов, поэтому за один год доступно 8 760 (или 8 784) почасовых точек данных, а каждый день состоит из 86 400 минут, поэтому за один год доступно 525 600 (или 527 040) минутных точек данных.

Чем больше данных, тем больше информации доступно, а с большим количеством информации можно сделать более точные выводы о том, что произойдет в следующий период времени — при условии, конечно, что данные состоят из достаточно хороших признаков, чтобы их можно было хорошо обобщить. Данные о ценах на акции за 2007–2008 годы, в разгар мирового финансового кризиса, необъективны и, вероятно, не подходят для прогнозирования цен в наши дни. С меньшим временным интервалом легче предсказать, что произойдет дальше, из-за большого количества точек данных в фиксированном интервале. Легче предсказать, что произойдет в следующую наносекунду, если у нас есть все точки данных для каждой наносекунды в фиксированном n -летнем интервале, чем то, что произойдет на фондовом рынке в следующем году, если у нас есть все n точек данных для каждого года в фиксированный интервал в n лет.

Однако это не означает, что, если предположить, что быстрая серия краткосрочных прогнозов верна, долгосрочный прогноз также должен быть верным. Каждое предсказание вносит ошибку, и при объединении нескольких предсказаний долгосрочный прогноз в конечном итоге будет содержать значительное количество ошибок и будет бесполезным. Ниже приведен пример данных с интервалом в 1 день для акций Google, взятых онлайн из Yahoo Finance.

Временной ряд финансовых данных по акциям Google для алгоритмической торговли

В наборе данных всего несколько столбцов: «Дата», «Открытие», «Максимум», «Минимум» и «Закрытие» — соответственно, цена, по которой ценная бумага впервые торгуется при открытии биржи, самая высокая цена, достигнутая ценной бумагой в данный торговый день. , самая низкая цена, достигнутая в данный торговый день, и окончательная цена, по которой ценная бумага торгуется в этот день.

Обычно в таких наборах данных есть еще два столбца — Adjusted Close и Volume, но здесь они не актуальны. Скорректированное закрытие — это цена закрытия после корректировки применимых сплитов и распределения дивидендов, а объем — это количество акций, торгуемых на рынке в течение заданного периода времени.

Вы можете видеть, что некоторые даты отсутствуют. Это дни, когда биржа не работает, обычно в выходные и праздничные дни. В целях демонстрации нашего алгоритма глубокого обучения недостающие дни дополняются ранее доступной ценой. Например, цены закрытия на 16 января 2010 г., 17 января 2010 г., 18 января 2010 г. будут равны 288,126007, потому что это было 15 января 2010 г. Для нашего алгоритма важно, чтобы данные были без пробелов, чтобы мы их не путали. Алгоритм глубокого обучения может узнать отсюда, когда наступают выходные и праздничные дни — например, он узнает, что после пяти рабочих дней должно быть два дня с фиксированными ценами с последнего рабочего дня.

визуальное представление движения цены акций Google за определенный период времени

Это график движения цен на акции Google с 4 января 2010 года. Обратите внимание, что для построения графика используются только торговые дни.

Что такое глубокое обучение?

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

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

Глубокая нейронная сеть находится в центре глубокого обучения. Самый простой и базовый пример глубокой нейронной сети — нейронная сеть с прямой связью. Ниже приведено изображение простой нейронной сети с прямой связью. Он состоит из входных и выходных слоев, а также скрытых слоев.

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

Скрытые слои — это все слои между входным и выходным слоями. Мы говорим, что нейронная сеть глубокая, если она имеет более одного скрытого слоя. Каждый слой состоит из различного количества нейронов. Слои в этой базовой нейронной сети с прямой связью называются линейными слоями — нейроны в линейном слое только умножают значения одномерных (или двумерных, если данные отправляются через сеть пакетами) входных данных с соответствующим весом, суммируют произведения вместе и дать окончательный результат в виде 1-D или 2-D вывода.

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

Общий конвейер глубокого обучения такой же, как и конвейер машинного обучения, и состоит из следующих шагов:

  1. Сбор информации. Данные разделены на три части: данные обучения, данные проверки и данные тестирования.
  2. Обучение DNN с использованием данных обучения в течение нескольких «эпох» (каждая из которых состоит из нескольких итераций) и проверка после каждой эпохи с использованием данных проверки.
  3. Тестирование модели (один экземпляр нейронной сети с фиксированными параметрами) после последовательности тренировок и проверок.

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

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

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

Есть два важных термина, связанных с выбором модели: переоснащение и недооснащение . Если нейронная сеть слишком сложна в отношении данных, на которых она обучается, — если у нее слишком много параметров (слишком много слоев и/или слишком много нейронов в слоях) — нейронная сеть может переобучить данные. Он может хорошо приспосабливаться к обучающим данным, потому что у него более чем достаточно возможностей для размещения всех данных, но тогда производительность при проверке и тестовых наборах низкая.

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

графическое представление сценариев недостаточного, оптимального и избыточного соответствия

Рекуррентные нейронные сети

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

графическое представление общей архитектуры rnn

На изображении ниже показан один рекуррентный нейрон. Он принимает X_{t} , момент времени t , в качестве входных данных и возвращает h_{t} , скрытое состояние во время t , в качестве вывода. Скрытый вывод распространяется обратно на нейрон. Рекуррентный нейрон можно развернуть, как показано на том же изображении справа. X_{t_0} – ​​это точка в периоде времени t_{0} , X_{t_1} – в периоде времени t_{1} , а X_{t} – в периоде времени t . Выходы, полученные с использованием входов X_{t_0} , X_{t_1} , …, X_{t_n} в периоды времени t_{0} , t_{1} , …, t_{n} , являются так называемыми скрытыми выходами: h_{t_0} , h_{t_1} , …, h_{t_n} соответственно.

визуальная иллюстрация структуры ввода / вывода рекуррентного нейрона

Одной из лучших архитектур рекуррентных нейронных сетей является архитектура LSTM. LSTM показан ниже:

визуализация архитектуры lstm

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

Давайте назовем вход для нейронной сети «вектором признаков». Это n -мерный вектор, элементами которого являются признаки: f_{0} , f_{1} , f_{2} …, f_{n} .

 \vv{X} = [f_{0}, f_{1}, f_{2}, …, f_{n}]

Теперь давайте объясним, как рекуррентные нейронные сети можно применить к задаче, связанной с финансами. Вход для рекуррентной нейронной сети: [X_{t_0}, X_{t_1}, X_{t_2}, …, X_{t_n}] . Предположим, что n = 5 . Мы берем пять цен акций Google Close за пять последовательных дней (см. таблицу с данными открытия/максимума/минимума/закрытия выше) между, скажем, 04.01.2010 и 08.01.2010, т. е [[311.35], [309.98], [302.16], [295.13], [299.06]] . Вектор признаков в этом примере является одномерным. Временная последовательность состоит из пяти таких векторов признаков. Выходами рекуррентной нейронной сети являются скрытые функции [h_{t_0}, h_{t_1}, h_{t_2}, …, h_{t_n}] . Эти функции находятся на более абстрактном уровне, чем входные функции [X_{t_0}, X_{t_1}, X_{t_2}, …, X_{t_n}] — LSTM должен изучить важные части входных функций и спроецировать их на пространство скрытых функций. Эти скрытые абстрактные функции могут быть распространены в следующей ячейке LSTM, что даст следующий набор скрытых, более абстрактных функций, которые затем могут быть снова распространены на следующую LSTM и так далее. После последовательности связанных LSTM последним компонентом нейронной сети является линейный слой (строительная часть простой сети с прямой связью, описанная в предыдущем разделе), который отображает скрытые функции из последнего LSTM в точку в одномерном пространстве, и эта точка является окончательным выходом сети — прогнозируемой ценой закрытия в период времени X_{t+1} . Основная истина в этом примере для X_{t+1} равна 298.61 .

Примечание. Также может быть всего один LSTM — установка количества LSTM — это гиперпараметр, который обычно находится эмпирически, хотя мы можем использовать некоторые эвристики. Если данные не такие сложные, мы используем менее сложную архитектуру, чтобы модель не соответствовала данным. Если данные сложные, мы используем сложную модель, чтобы модель не соответствовала данным.

На этапе обучения спрогнозированные цены закрытия сравниваются с наземными ценами, и разница между спрогнозированными ценами закрытия и наземными истинными ценами минимизируется с использованием алгоритма обратного распространения и алгоритма оптимизации градиентного спуска (или одной из его форм — конкретно, в данном случае). blog используется так называемая «адамовская» версия алгоритма оптимизации градиентного спуска) путем изменения весов нейронной сети.

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

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

Ниже приведено изображение архитектуры, используемой в этом блоге для экспериментов. Он состоит из двух сложенных LSTM и одного линейного слоя.

визуальное представление архитектуры, описанной выше

Эксперименты с алгоритмами хедж-фондов

Попробуйте использовать простые алгоритмические торговые стратегии, например: если алгоритм предсказывает, что цена на следующий день пойдет вверх, то купите n (в этом примере n = 1 ) акций компании (длинная позиция), в противном случае продайте все акции компании. компания (коротко). Начальная стоимость портфеля (сумма денежных средств и акций вместе взятых) установлена ​​на уровне 100 000 долларов США. Каждое длинное или короткое действие будет покупать n акций компании (в данном примере Google) или продавать все акции компании соответственно. В начале система владеет 0 акциями данной компании.

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

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

Показателем для оценки торговой стратегии является коэффициент Шарпа (его годовая версия, предполагающая, что все дни в году являются торговыми днями, а в году 365 дней: sqrt(365)*mean(returns)/std(returns)) , где доход определяется как p_{t}/p_{t-1} - 1 , а p_{t} - цена в период времени t . Коэффициент Шарпа показывает соотношение между доходностью и дополнительным риском, поэтому хорошо иметь больший коэффициент Шарпа. Обычно инвесторы принимают соотношение больше 1, 2 — очень хорошо, а 3 — отлично.

В качестве функции используется только ежедневная цена закрытия исторических цен Google из набора данных Yahoo Finance. Дополнительные функции помогут, но проверка того, какие другие функции из набора данных (открытые, высокие, низкие) важны, выходит за рамки этого блога. Также могут быть полезны некоторые другие функции, не включенные в таблицу, например тональность новостей в конкретную минуту или важные события в конкретный день. Однако иногда очень сложно создать представления данных, полезные для ввода нейронной сети, и объединить их с существующими функциями. Например, легко расширить вектор признаков и поместить число, отражающее отношение к новостям или отношение Трампа к твиту ( -1 очень негативное, 0 нейтральное, +1 очень положительное и т. д.) для каждого заданного периода времени, но это не так. так легко поместить определенные события (пираты в Суэцком канале, бомба на нефтеперерабатывающем заводе в Техасе) в вектор признаков, потому что для каждого конкретного момента нам потребуется дополнительный элемент в векторе признаков, чтобы поставить 1 , если событие произошло или 0 в противном случае, что приведет к бесконечному количеству элементов для всех возможных моментов.

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

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

График торговли с глубоким обучением, показывающий средний убыток с течением времени

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

График торговли с глубоким обучением, показывающий средний тестовый убыток с течением времени

Алгоритм жадный; если он предсказал, что на следующий день цена пойдет вверх, то алгоритм немедленно покупает n=1 акцию компании (если в портфеле достаточно денег), в противном случае он продает все акции компании (если у нее есть ). Срок инвестирования фиксированный и занимает 300 дней. Через 300 дней все акции продаются. Моделирование невидимых данных после некоторого обучения можно увидеть ниже. Показано, как стоимость портфеля увеличивается с течением времени за счет длинных/коротких действий (или бездействия) каждый день.

Финансовый график глубокого обучения, показывающий моделирование на невидимых данных

Коэффициент Шарпа для приведенного выше моделирования равен 1,48. Окончательная стоимость портфеля через 300 дней составляет 100 263,79 долларов США. Если бы мы просто купили акции в первый день и продали их через 300 дней, портфель стоил бы 99 988,41 доллара.

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

Результаты нейросетевой торговли

Коэффициент Шарпа равен -0,94. Окончательная стоимость портфеля через 300 дней составляет 99 868,36 долларов США.

Вот один интересный пример: приведенный выше алгоритм является жадным и просто предсказывает цену на следующий день, предпринимая действия только на основе этого предсказания. Можно связать несколько прогнозов и предсказать цену на следующие несколько шагов в будущем. Например, с первым входом [X_ground_truth_{t0}, X_ground_truth_{t1}, X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}] и первым выходом [X_predicted_{t5}] мы можем передать нейронной сети с этим прогнозом, так что следующим входом будет [X_ground_truth_{t1}, X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}, X_predicted_{t5}] , а выходом будет [X_predicted_{t6}] . Следующий вход оттуда — [X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}, X_predicted_{t5}, X_predicted_{t6}] , что приводит к [X_predicted_{t7}] и так далее. Проблема здесь в том, что мы вводим ошибку прогнозирования, которая увеличивается с каждым новым шагом и в конечном итоге приводит к очень плохому долгосрочному результату, как показано на изображении ниже. Предсказание в начале следует за тенденцией к уменьшению истинности, а затем стагнирует и со временем становится все хуже и хуже.

график, показывающий кумулятивный прогноз, контрастирующий с истинной стоимостью акций

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

Подведение итогов

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

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

If the system lost the ability to generalize, then it would be necessary to retrain it from the beginning and test it again (maybe by introducing more discriminative features or new knowledge—using new data from the past that didn't exist when the model was first trained).

Sometimes, the data is simply not good enough for the deep learning system to be trained and generalize well and, in that case, an experienced deep learning engineer should be able to detect and rectify such a situation. To build a deep learning trading system, you need hedge funds data scientists, machine learning/deep learning experts (both scientists and engineers), R&D engineers familiar with machine learning/deep learning, etc. No matter which part of an application of machine learning they are familiar with, whether it's computer vision or speech recognition, seasoned professionals will be able to put their experience to good use in the financial sector. At its root, deep learning has the same basics regardless of application or industry, and it should be easy for someone experienced to switch from theme to theme.

The system we presented is very basic and, to be applied in the real world, more R&D should be done in order to increase the returns. Possible improvements of the system could be in developing better trading strategies. Collecting more data for training, which is usually very expensive, will help. A smaller time interval between the points is better. Improvements can also surface in using more features (eg, news sentiments or important happenings corresponding to each point in the dataset, despite being hard to code for a neural network) and extensive grid search for hyperparameters and RNN architecture discovery.

Also, more computing power (powerful GPUs are a must) is needed to make a lot of extensive experiments in parallel and to process a large amount of data, provided that a large amount of data is collected.

Использованная литература:

  • https://www.datacamp.com/community/tutorials/finance-python-trading
  • http://colah.github.io/posts/2015-08-Understanding-LSTMs/
  • https://en.wikipedia.org
  • https://www.investopedia.com/
  • https://finance.yahoo.com/
  • http://pytorch.org/

Author's Note: I would like to thank Ivan Capalija and Matej Paradzik for the constructive conversations and advice about deep learning in finance, which helped me in writing this blog.