Версия страницы для печати Версия страницы для печати

Применение искусственного интеллекта в техническом трейдинге

Доменико Д'Эрико (Domenico D’Errico)

   Время чтения: 14 минут

Инструменты искусственного интеллекта могут быть использованы для классификации торговых сессий по паттернам. Для этого можно использовать среду программирования Python. Здесь мы изложим концепцию.

Вы когда-нибудь думали о торговой сессии как о… цветке?”

Когда я впервые предложил такую тему своим менеджерам хедж-фондов, то увидел, как они растерялись. Уверен, что некоторые из них начали бормотать и интересоваться, не курил ли я и не ел ли каких-нибудь необычных цветов! Тем не менее, я был серъезен, и позвольте мне объяснить почему.

Давайте вернемся в 1936 год, когда британский ученый по имени Рональд Фишер разработал “алгоритм” для распознавания видов радужных оболочек по нескольким числовым характеристикам. Набор данных по радужной оболочке глаза – это “Hello world” науки о данных, то есть он широко используется для отработки основных алгоритмов машинного обучения (ML). Он состоит из пяти столбцов: длина лепестка, ширина лепестка, длина чашелистика, ширина чашелистика и тип вида. Исследователи измерили различные характеристики цветков ириса и записали их в цифровом виде. Фишер использовал четыре признака – длину чашелистика, ширину чашелистика, длину и ширину лепестка – для классификации трех видов ирисов (названных setosa, versicolor и virginica).

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

РИСУНОК 1: КЛАССИФИКАЦИЯ ДАННЫХ.
РИСУНОК 1: КЛАССИФИКАЦИЯ ДАННЫХ. Можно ли классифицировать торговые сессии по четырем признакам, подобно тому, как классифицируются виды радужных оболочек?

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

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

РИСУНОК 2: СТРУКТУРИРОВАНИЕ НАБОРА ДАННЫХ И РАСПОЗНАВАНИЕ ОБРАЗОВ.
РИСУНОК 2: СТРУКТУРИРОВАНИЕ НАБОРА ДАННЫХ И РАСПОЗНАВАНИЕ ОБРАЗОВ. Показания индикаторов можно классифицировать аналогично тому, как классифицируются виды радужной оболочки глаза. Таким образом, набор данных не анализируется как временной ряд.

Как работает модель искусственного интеллекта

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

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

Теперь давайте сосредоточимся на рынке. Работая квантовым разработчиком в хедж-фондах, я тесно сотрудничал с сотнями опытных профессиональных трейдеров, создавая для них индивидуальные торговые инструменты. Много раз я слышал фразы вроде: “Когда цена совершает такое-то движение, очень вероятно, что на следующем баре она сделает то-то и то-то”. Что они делают? Они применяют некую личную модель, разработанную ими за годы наблюдений и торговли. Именно так работает модель машинного обучения, которую я представляю.

Таким образом, модель пытается ответить на такие вопросы, как:

  • Могут ли сегодняшние показания стохастического осциллятора помочь предсказать, будет ли завтра более высокий максимум/низкий паттерн?
  • Могут ли сегодняшние показания осциллятора RSI помочь предсказать, будет ли завтра более высокая/низкая модель?
  • Может ли сегодняшняя гистограмма MACD выше нуля помочь предсказать, будет ли завтра более высокая/низкая модель?
    В целом, трейдеры используют текущие показания индикаторов/осцил-ляторов, чтобы получить представление о движении следующего бара. Однако точную взаимосвязь между техническими индикаторами и следующим движением бара рассчитать сложно, поскольку между ними нет четкой линейной функции. Иногда индикатор растет, и цена продолжает расти, а иногда происходит обратное.

Именно здесь на помощь приходит Python. В его библиотеках есть все необходимое для трейдеров. Давайте посмотрим, как действовать дальше.

РИСУНОК 3: МАШИННОЕ ОБУЧЕНИЕ.
РИСУНОК 3: МАШИННОЕ ОБУЧЕНИЕ. Здесь показаны шаги, которые должна пройти торговая модель, основанная на машинном обучении. Цель модели – предсказать, будет ли завтрашняя сессия иметь более высокий максимум/низкий день (цель модели).

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

  1. Загрузка данных (самый простой шаг): В этом примере я загрузил 20 лет дневных баров USDJPY из CSV-файла, экспортированного из TradeStation.
  2. Установка параметров и цели (самый важный шаг для технических трейдеров): Для целей данной статьи я рассмотрел три стандартных технических индикатора:

a. стохастик (14)

b. RSI (14)

c. MACD (12, 26, 9)

Цель модели – предсказать, будет ли на сессии завтрашнего дня более высокий максимум/низкий день (цель модели).

  1. Обучение и тестирование модели: Python использовал свои библиотеки ML для анализа первых 12 лет данных USDJPY (с 2000 по 2012 год), чтобы найти наилучшее соответствие между характеристиками и целью модели. Затем Python применил полученную наилучшую модель к следующим 10 годам вневыборочных данных (с 2013 по 2023 год).
  2. Подсчет баллов: Python сообщает мне, имеют ли все эти усилия смысл, вычисляя оценку точности в диапазоне от 0 до 1 и генерируя матрицу противоречий.
  3. Предсказание: Python выдает мне прогноз на завтра, отвечая на вопрос: Будет ли завтра наблюдаться более высокий/низкий уровень? (да или нет)
  4. Торговля: Заключение сделки на основе прогноза.

Пример использования Jupyter Notebook, интегрированной среды разработки (IDE) для Python и других языков программирования, для доступа и использования инструментов машинного обучения на базе Python для тестирования и обучения модели и получения прогнозов см. на вкладке “Разработка на Python с помощью Jupyter Notebook”:

РАЗРАБОТКА НА PYTHON С ПОМОЩЬЮ JUPYTER NOTEBOOK

Jupyter Notebook – это простая в использовании IDE (интегрированная среда разработки) на языке Python, которая очень рекомендуется для начинающих. Jupyter Notebook (jupyter.org) – это веб-приложение для создания и совместного использования вычислительных документов.

Здесь показан пример использования Jupyter Notebook для доступа и использования инструментов машинного обучения на базе Python для тестирования и обучения вашей модели.

1 from sklearn.linear_model import LogisticRegression
2 my_model = LogisticRegression(max_iter=100)
3 my_model.fit (X_train,y_train)
4 y_pred=my_model.predict(X_test)

Ниже приведено объяснение каждого из этих шагов:

Строка 1: Scikit-learn (Sklearn) – это простая и мощная библиотека Py-thon. Она предоставляет набор эффективных инструментов для статистического моделирования и машинного обучения, таких как классификация, регрессия, кластеризация и уменьшение размерности. В строке 1 мы импортируем модель логистической регрессии Sklearn в наш Jupyter Notebook.

Строка 2: Мы даем имя только что импортированной функции логистической регрессии, например “my_model”.

Строка 3: Мы даем инструкции по обучению (подгонке) my_model на данных выборки: признаки выборки (X_train) будут сопоставлены с целями выборки (y_train) в соответствии с математическими и статистическими функциями, встроенными в библиотеку Sklearn.

Строка 4: Мы используем уже обученную модель my_model для получения прогнозов (y_pred) на вневыборочных данных (X_test).

Технические индикаторы как признаки для модели машинного обучения

Давайте вкратце обсудим выбор признаков. В моделях машинного обучения очень важно, чтобы данные были нормированы, то есть находились в определенном диапазоне, или были бинарными (0/1).

Для построения модели я использовал три очень распространенных технических индикатора. Показания стохастика и RSI я оставил как есть (поскольку они изменяются от 0 до 100 и уже нормализованы), а показания MACD упростил с помощью бинарной функции: MACD-гистограмме > 0 присваивается значение 1, а MACD-гистограмме < 0 – значение 0.

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

Валидация модели

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

На рисунке 4 показана матрица путаницы, построенная на основе данных за 3000 дней в выборке и 3000 дней вне выборки для USDJPY. Всего имеется 3 135 дней вне выборки (с января 2011 года по сентябрь 2023 года). Из них 1 261 день демонстрировал паттерн high/low, и модель правильно предсказала 801 из них (64%). С другой стороны, 1 874 дня не демонстрировали эту закономерность, и модель правильно предсказала 1 517 из них (81 %). Общая точность модели составляет 74%.

РИСУНОК 4: БЭКТЕСТ.
РИСУНОК 4: БЭКТЕСТ. Как часто модель оказывалась верной? Общая точность модели составила 74 %.

Торговый план

Если предположить, что мы доверяем модели, то вот торговый план:

  • Покупать на закрытии, когда прогноз “бычий”, со стоп-лоссом на текущем минимуме.
  • Продавать короткие позиции на закрытии, когда прогноз медвежий, со стоп-лоссом на текущем максимуме.
  • Выход из сделки на закрытии следующего бара.

Бэктесты и анализ в режиме walk-forward

Мы провели бэктестирование USDJPY за период 2008-2023 годов, применяя методологию walk-forward. Анализ “прогулки вперед” (WFA) предполагает разбиение процесса обучения-тестирования на несколько частей (см. Рисунок 5).

РИСУНОК 5: БЭКТЕСТ ПО МЕТОДУ WALK-FORWARD.
РИСУНОК 5: БЭКТЕСТ ПО МЕТОДУ WALK-FORWARD. Был проведен бэктест USDJPY за период 2008-2023 гг. с применением методологии walk-forward. Модель была обучена на 2 000 дней, а затем протестирована на следующих 50 вневыборочных днях.

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

На рисунке 6 вы найдете сводку торгового отчета, а на рисунке 7 – соответствующую линию эквити.

Применение искусственного интеллекта в техническом трейдинге
РИСУНОК 6: СВОДКА РЕЗУЛЬТАТОВ. Хорошие результаты были получены в ходе бэктестирования модели, при этом длинные и короткие сделки были сбалансированы.
Применение искусственного интеллекта в техническом трейдинге
РИСУНОК 7: ЛИНИЯ СОБСТВЕННОГО КАПИТАЛА. Кривая собственного капитала для модели демонстрирует последовательный рост.

Заключение

Итак, можно ли считать торговый день цветком? Я бы сказал, что да, потому что торговые паттерны могут быть представлены бинарной комбинацией, как и виды ирисов. Главное отличие в том, что нам нужно распознать то, что еще не произошло.

Хороша ли эта модель машинного обучения? Мы можем сказать “да”, потому что точность высока, а матрица запутанности имеет смысл.

Можем ли мы использовать эту модель для торговли на реальные деньги? Бэктест показал положительные результаты. Длинные и короткие сделки достаточно сбалансированы, а кривая эквити демонстрирует последовательный рост. Однако нам нужно поработать над увеличением среднего значения сделки, так как оно довольно низкое, если учитывать брокерские спреды и комиссии. Тем не менее, мы довольны нашей первой моделью искусственного интеллекта, примененной к техническому трейдингу, и уверены, что находимся на правильном пути.

Об Авторе:


Доменико Д’Эррико – разработчик-квант для алгоритмических хедж-фондов. Он является специалистом по языку EasyLanguage и двукратным победителем конкурса разработчиков TradeStation 2011 года, где он представлял торговые инструменты для парной торговли. В настоящее время он участвует в исследовательском проекте по применению искусственного интеллекта в техническом трейдинге. Он живет в Матере, Италия, и с ним можно связаться по адресу domderrico@gmail.com.


———————————————
Переведено специально для сайта Finware Technologies, www.finware.ru
Вы можете свободно распространять эту статью любыми способами целиком вместе с этим блоком и действующей гиперссылкой на сайт finware.ru.
———————————————

Оставьте первый комментарий

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*