Многие исследовательские работы посвящены прогнозированию финансовых временных рядов, но лишь в небольшом числе из них говорится о применении в реальной торговой стратегии. В большинстве случаев исследование дает только показатели производительности модели (точность, RMSE, …), но не пытается превратить ее в прибыльную стратегию. Когда мы говорим о финансовых временных рядах, мы говорим о стохастических процессах, а это означает, что они имеют дело с большим количеством случайностей. По этой причине нереально ожидать получить точность, подобную той, что достигается во многих других приложениях глубокого обучения. Таким образом, не ожидайте 80-процентной точности при прогнозировании движения рынка вверх или вниз на заданном временном горизонте. Известно, что прогнозирование финансовых временных рядов является одной из самых сложных задач в машинном обучении. Цель состоит в том, чтобы вместо того, чтобы пытаться найти модель, которая может дать вам небольшое преимущество по сравнению с чистой случайной догадкой или чистой стратегией «купи и держи», когда мы говорим о фондовом рынке. Есть также много вещей, о которых нужно позаботиться в отношении обработки данных при применении машинного обучения к финансовым временным рядам. Если вы новичок в этой области исследований или если вы получаете хорошие показатели от своей модели, но плохие результаты реальной торговли, вы можете прочитать нашу статью, посвященную этой теме, «Обработка данных финансовых временных рядов для машинного обучения». идет не так. В течение многих лет и в сотрудничестве с двумя французскими инженерными школами, CentralSupelec и Polytechnique, отдел искусственного интеллекта Lusis работает над прогнозами финансовых временных рядов с точки зрения применимых торговых стратегий. В этой и последующих статьях читатель найдет некоторые методы и результаты, которые могут очень помочь ему в его собственных исследованиях. Но поскольку работающая торговая стратегия на основе ИИ гораздо больше, чем в любой другой области, может быть напрямую преобразована в деньги, поэтому мы, разумеется, никогда не будем раскрывать самые важные вещи, позволяющие воспроизвести наши модели. Если вы найдете воспроизводимую модель с очень хорошими показателями где-либо в статье, позаботьтесь о себе и проведите собственное исследование и тестирование на истории, прежде чем инвестировать в нее.

Прогнозирование внутридневного тренда GBPUSD

В этой статье мы иллюстрируем применение глубокого обучения для построения торговой стратегии. Сначала мы создаем и оцениваем модель, предсказывающую внутридневные тренды на GBPUSD. Затем мы тестируем стратегию исключительно на основе прогнозов модели, прежде чем запускать ее в режиме реального времени. Набор данных: GBPUSD одночасовые данные OHLC за период с 11.04.2011 по 30.01.2018, таким образом, он представляет 41 401 одночасовой бар OHLC, примерно за 7 лет данных. Набор данных для обучения: 2011–2014. Метка 2018 года: цена закрытия вверх/вниз N баров спустя, наш предиктор является классификатором

Обучение — Проверка — Тестовые периоды на 1H GBPUSD После определения метки нам нужно проверить долю классов Up и Down в популяции. Обнаружение несбалансированных меток означает, что нам нужно будет перебалансировать их или использовать другую метрику, кроме точности. Здесь мы нашли 50,3% для класса Up для 49,7% класса Down, поэтому точность является надежной метрикой для оценки нашей модели. Здесь, по соображениям конфиденциальности, мы не будем упоминать следующее: горизонт прогнозирования (N баров) размер временных срезов, используемых в качестве входных данных для признаков модели (необработанных или производных) мы используем фильтры или любую другую предварительную обработку применяемые точные гиперпараметры модели Но мы покажем, что на удивление простая модель может работать хорошо.

Модель

В большинстве случаев, когда мы говорим о прогнозах временных рядов, мы сначала думаем об использовании LSTM или CNN 1D. Здесь мы хотели сначала оценить MLNN для сравнения с двумя другими. Но после исследований мы нашли способ сделать эту модель достаточно точной, чтобы построить с ее помощью торговую стратегию. Следующая диаграмма иллюстрирует MLNN, аналогичную той, которую мы используем:

MLNN Выходной слой модели имеет два модуля: один для класса Up и один для класса Down. Он использует функцию активации softmax. Функция потерь представляет собой категориальную кросс-энтропию. Почему мы используем такой вывод нескольких единиц с softmax вместо одной единицы с сигмовидной активацией? Причина в том, что упрощается создание универсальных функций для тестирования различных моделей с метками, имеющими более двух классов. Самый простой случай — «Вверх/Вниз/Нейтрально», но у нас также может быть больше уровней «Вверх» и «Вниз» (сильный, средний, слабый и т. д.). В общем, мы всегда сначала создаем набор функций производительности, чтобы упростить и ускорить создание и тестирование вариантов моделей. Это значительно ускоряет итерации. Затем мы можем сконцентрировать усилия на самых важных вещах, самой модели и показателях ее производительности. Что касается другого момента, который мы можем раскрыть, функция активации плотных слоев tanh, мы используем оптимизатор Адама и выпадающие слои для регуляризации. Мы обучаем модель на 500 эпохах с размером пакета 64, после чего получаем следующие результаты:

Обучение и проверка Потери и точность Функция потерь не имеет ничего общего с тем, что мы обычно получаем во многих других приложениях глубокого обучения. Имейте в виду, что финансовые рынки — это очень шумный контекст, где мы можем рассчитывать только на небольшое преимущество. Мы можем наблюдать, как потери немного улучшаются до 300 эпох, а затем начинают расти. Это указывает на то, что некоторая переобучение сохраняется. Есть несколько способов борьбы с переоснащением, в том числе: Получение большего количества данных: здесь мы используем только GBPUSD, мы не можем легко применять методы увеличения данных, которые можно найти в классификаторах изображений. Картинка с перевернутым котом — это тоже кот, но для финансовых временных рядов это не так просто. Любая небольшая модификация данных может привести к очень разным ситуациям, мы никогда не можем быть уверены, что метка будет такой же, как у исходной последовательности. Захват более длинной истории или добавление данных из других валютных пар может помочь Упрощение модели: часто это самый эффективный способ борьбы с переоснащением, прежде чем использовать регуляризацию, здесь это уже сделано Регуляризация: здесь мы сохранили отсев только после тестирования регуляризации L1 и L2 Ранняя остановка: мы не используем его на данный момент, так как нам нужно зафиксировать лучшие показатели для данной эпохи (здесь где-то между 250 и 350), а не только для точной эпохи, такой как 300. Поскольку этот метод изначально не существует в Керас, нам нужно реализовать собственный. Итак, здесь мы уже сделали два из этих подходов, и прежде чем экспериментировать с дополнительными данными, мы проверяем точность и видим, что мы делаем лучше, чем случайное предположение с 0,56 на проверочном наборе. Для некоторых эпох модель работала даже лучше с точностью, превышающей 0,6, но прежде чем пытаться получить ее с оптимальной ранней остановкой, мы хотим сначала проверить, как ведет себя торговая стратегия, основанная на этом предсказателе. Итак, мы тестируем это на истории.

Тестирование на истории

Мы тестируем модель на данных за 3 года, которые не использовались для обучения, то есть в период с 2015 по начало 2018 года. Стратегия, построенная на основе модели, очень проста. Мы просто покупаем, когда модель предсказывает восходящий тренд, и продаем, когда модель предсказывает нисходящий тренд. Для оценки чистой работы модели стоп-лосс и тейк-профит не ставим. Мы просто закрываем позицию через N баров после входа, где N — горизонт предсказания. Мы также не устанавливаем спред для первого бэктеста, чтобы получить необработанные метрики. Все приведенные ниже результаты выражены в пипсах. Чтобы получить его, мы используем размер сделки 10 000 фунтов стерлингов, поэтому каждый пункт соответствует 1 доллару США. Мы начинаем со счета в 10 000 долларов США. Прежде чем говорить о кредитном плече, каждое бэктестирование должно начинаться со сделок без кредитного плеча, чтобы оценить риск, на который можно пойти.

Всего одно слово о метрике Quality Ratio. Вы не найдете его в литературе, так как это запатентованная формула. Описание ниже взято из документации Lusis Backtest Engine.

Определение соотношения качества Первые результаты кажутся очень хорошими. Мы также наблюдаем, что средний убыток от сделки выше, чем спред, обычно наблюдаемый на GBPUSD с хорошими брокерами, то есть обычно ниже 0,8 пипса. Самая крупная наблюдаемая убыточная сделка снизилась на 156 пунктов, что составляет 1,56% от начального капитала, а максимальная просадка составляет 4%. Для справки: в торговом сообществе крупные авторы часто рекомендуют не торговать по стратегии с просадкой, превышающей 30%, и никогда не рисковать более 2% за сделку. Здесь наши показатели уже ниже этих двух пределов. На финансовом рынке, а особенно на Форексе, не все рабочие дни равноценны с точки зрения риска и поведения. Итак, давайте проверим P&L по дням недели.

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

Здесь мы сразу видим улучшение прибыли и убытков, среднего убытка по сделкам, а максимальная просадка снизилась до 3%. Кривая Equity также кажется более гладкой. Крупнейшая убыточная сделка, по-видимому, все еще довольно высока — 151 пипс. Самая основная практика ее улучшения заключается в добавлении к стратегии стоп-лосса. Некоторые добавляют еще и тейк-профит, но многие авторы считают это ошибкой. Лучшие стратегии следования за трендом часто получают прибыль всего за несколько крупных движений. Выход из них слишком рано никогда не даст вам шанса получить большую прибыль. Чтобы найти, где разместить стоп-лосс, давайте взглянем на график MAE/MFE, они соответственно обозначают максимальное неблагоприятное отклонение и максимальное благоприятное отклонение. Он показывает прибыль и убыток, достигнутые каждой прибыльной и убыточной сделкой, по сравнению с их максимальным потенциальным убытком или выигрышем с момента их открытия.

Здесь мы видим, что только несколько сделок были небольшими, когда их MAE был ниже примерно 50 пунктов. Таким образом, мы можем сказать, что после достижения потенциального убытка в 50 пипсов у сделки почти нет шансов восстановиться и стать прибыльной. Но мы также видим, что некоторые сделки, упавшие более чем на 50 пунктов, могут частично восстановить свои потери до закрытия. Это означает, что такой стоп-лосс не обязательно улучшит стратегию. Единственный способ убедиться в этом — запустить бэктест.

Стоп-лосс в 50 пипсов на самом деле не улучшает стратегию, он даже снижает некоторые показатели, но у нас также более высокий QR, что означает, что мы можем получить еще более «торгуемую» кривую капитала. Наш Backtest Engine позволяет запускать оптимизатор, чтобы найти наилучшее расстояние стоп-лосса для использования. В любом случае, на данный момент, и поскольку разница не так уж велика, мы предпочитаем сначала оценивать 100% чистый подход к глубокому обучению. Теперь добавляем спред в 0,8 пункта и снова запускаем бэктест без стоп-лосса.

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

Запуск в реальном времени

Вот результаты в пунктах в реальном времени с начала года.

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

Заключение и следующие шаги

В этой статье рассказывается о создании торговой стратегии на основе глубокого обучения и о том, как мы провели полный процесс тестирования на исторических данных, чтобы убедиться, что, помимо показателей производительности, модель может быть прибыльной для торговли в реальном времени. Следующими шагами для нас являются: Добавить больше данных для повышения точности. Применить ту же модель к набору инструментов. материалы Некоторые из этих работ уже ведутся. Спасибо за чтение. Вся работа в этой статье была выполнена в JupyterLab с TensorFlow/Keras. Бэктесты проводились с персональным движком, созданным автором по лицензии MIT, первоначально на Golang, а затем преобразованным в Python, специально для использования с моделями машинного обучения, полученными от TensorFlow, PyTorch или Scikit-Learn. Lusis значительно улучшил это программное обеспечение, добавив функцию автоматической торговли, позволяющую запускать любую стратегию в производственной системе без каких-либо изменений. В настоящее время эта торговля в реальном времени может работать с любым брокером, использующим технологию торговой платформы Lusis.