Недавно я закончил магистерский курс в Технологическом институте Джорджии под названием «Машинное обучение для трейдинга», который объединил информатику с финансами. Используя этот курс в качестве основы, я расширил разработанные там идеи и создал несколько интересных торговых стратегий… одну настроил я, а две настроили с помощью отдельных компьютерных моделей (дерево решений и обучение с подкреплением). Я ограничил себя и модели техническим анализом, игнорируя любую информацию, относящуюся к фундаментальному анализу. Короче говоря, использовались только исторические данные о ценах на акции, а любые вторично созданные индикаторы основаны на исторических ценах на акции (** скорректированная цена закрытия).

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

Symbol = "JPM" (JPMorgan Chase & Co)
Training Period = January 1, 2008 --> December 31, 2009
Testing Period = January 1, 2010 --> December 31, 2011
Starting Portfolio Value = $100,000

Начнем с ручной стратегии, настроенной мной. Цель торговой стратегии состояла в том, чтобы построить модель, которая со временем увеличивает стоимость портфеля. Опять же, я ограничился использованием трех технических индикаторов, чтобы решить, когда покупать, продавать или ничего не делать. Это было много проб и ошибок для этой первой стратегии, настройки порогов, которые решают, как действовать. Логика просматривает значение каждого индикатора и присваивает нулевое, положительное или отрицательное значение на основе значения. Затем все три значения (по одному для каждого показателя) складываются вместе. Если сумма больше или равна двум, то входим в длинную позицию, если сумма меньше или равна двум, то входим в короткую позицию, а если ни один из этих случаев не происходит, то ничего не делаем в этот день. Эта логика требует строгого соответствия показателей без каких-либо серьезных расхождений. Я имею в виду, что по крайней мере два индикатора должны сигнализировать о длинной позиции, а другой индикатор не может сигнализировать о продаже. Это уменьшит общую сумму до 1. Та же логика применима в противоположном направлении для короткой позиции.

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

На приведенном выше рисунке синие кружки — это узлы дерева, а треугольники внизу — конечные узлы, которые можно понимать как решения о том, открывать ли длинную или короткую позицию. Давайте рассмотрим пример с поддельными данными и приведенным выше деревом решений. Скажем, что на сегодняшний день процент полос Боллинджера (bbp) рассчитывается равным 11, индекс относительной силы (rsi) равен 4, а пересечение экспоненциальной скользящей средней (пересечение EMA) равно 7. Мы начинаем с верхнего узла. , который говорит, что bbp будет «решающим индикатором». Поскольку наше текущее значение bbp, равное 11, больше 10, мы переходим к правой стороне дерева. Наше текущее значение rsi, равное 4, меньше 6, поэтому мы движемся влево от поддерева. Наконец, наше текущее значение 11 bbp меньше 15, поэтому мы двигаемся влево. Теперь мы достигли конечного узла, и наше окончательное решение — открыть длинную позицию в этот день. Как упоминалось выше, в модели используется метод упаковки, который в основном означает, что дерево строится несколько раз, а затем все они объединяются в одну единую модель, которая более надежна и менее подвержена переоснащению (надеюсь). Для обучающего дерева решений, которое объединяет классы дерева, модель использует размер пакета 30. Как были сгенерированы данные «Y», представленные конечными узлами в дереве, потому что это не объективная метрика, которую мы можем получить. из йаху? Данные «Y» были найдены путем просмотра цены за пять дней до текущего дня, а затем принятия решения о короткой или длинной позиции на основе установленного порога. Например, если цена акций JP Morgan через пять дней торгуется на двадцать долларов выше, то покупка сегодня будет прибыльной, поэтому нам следует открыть длинную позицию.

Второй используемой стратегией машинного обучения было обучение с подкреплением. Был использован алгоритм Q-обучения, который сообщает среде ее текущее состояние и действие, которое она хочет предпринять. Необходимо определить среду, которая может принимать эти две вещи и возвращать вознаграждение и следующее состояние. Значение показателей составляют «состояние». Все три индикатора были объединены в одно значение от 0 до 1000 (1000 возможных состояний) следующим образом: каждый соответствующий индикатор разбить на десять сегментов; умножить bbp, ema_cross и rsi на сто, десять и единицу соответственно; затем суммируйте вместе. Есть три возможных действия: войти в короткую позицию, в длинную позицию или ничего не делать. Наконец, вознаграждение рассчитывается путем умножения владения предыдущего дня (количество акций) на ежедневную доходность. Учащийся с подкреплением тренируется в течение 200 эпох или до тех пор, пока модель не сойдется (в зависимости от того, что наступит раньше).

На приведенном выше рисунке показаны результаты четырех различных стратегий при использовании обучающих данных (данных, которые модели видели и на которых обучались). Ось Y нормализована, но ее можно интерпретировать в долларах США. Например, все стратегии начинаются со 100 000 долларов, но зеленая линия заканчивается при стоимости портфеля около 350 000 долларов. Стратегия обучения с подкреплением работает лучше всего, за ней следует стратегия дерева решений, а затем ручная стратегия (где я устанавливаю параметры, когда открывать длинную или короткую позицию). Фиолетовая линия — это базовая линия для контекста. Он представляет собой покупку 1000 акций в первый день и их простое удержание. Ниже на следующем рисунке показана производительность на тестовых данных (данные, которые модели не видели при построении).

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

Важным моментом, который еще не обсуждался, является вопрос «воздействия». Воздействие здесь относится к влиянию, которое организация оказывает на цену акций, когда она покупает или продает. Например, вы не можете купить акции стоимостью 2 000 000 долларов с рыночной капитализацией в 100 000 000 долларов по той же цене. Существует разброс предложений и запросов (люди, которые хотят покупать и продавать, и по какой цене), и, скорее всего, не будет случая, чтобы акции стоимостью 2 000 000 долларов можно было купить по одной цене. Если продавцы увидят, что кто-то скупает все больше и больше акций, то они поднимут цену, по которой готовы продать. Короче говоря, если вы покупаете, вы можете подтолкнуть цену вверх, а если вы продаете, вы можете подтолкнуть цену вниз. Я хотел зафиксировать это и посмотреть, как это повлияло на модели машинного обучения, поэтому для простоты влияние — это жестко закодированное число, которое умножается на количество торгуемых акций, а затем вычитается из общей стоимости портфеля. Ниже на рисунке показано количество сделок, совершенных по мере увеличения комиссии за воздействие.

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

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

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

Связанный код можно найти на моем GitHub. Туда были загружены CSV-файлы многих различных акций, а также более подробные описания отдельных файлов. Есть также дополнительные графики и файл .txt со статистикой по отдельным стратегиям, таким как кумулятивная и дневная доходность.