Если человек-инвестор может быть успешным, почему этого не может сделать машина?

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

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

Алгоритмическая торговля произвела революцию на фондовом рынке и окружающей его отрасли. Более 70% всех сделок, происходящих в США прямо сейчас, обрабатываются ботами. Прошли времена переполненной фондовой биржи, когда люди в костюмах размахивали листами бумаги и кричали в телефоны.

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

Зачем нам нужны глубокие нейронные сети для решения этой проблемы?

Финансы очень нелинейны, и иногда данные о курсах акций могут даже показаться совершенно случайными. Традиционные методы временных рядов, такие как модели ARIMA, SARIMA и GARCH, эффективны только тогда, когда ряд является стационарным, что - это ограничивающее предположение, которое требует предварительной обработки ряда путем получения результатов журнала (или других преобразований). Однако основная проблема возникает при реализации этих моделей в реальной торговой системе, поскольку нет гарантии стационарности при добавлении новых данных.

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

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

Повестка дня нашего проекта:

Получение данных

  • Во-первых, мы выполним веб-парсинг на NIFTY 50 вики-страницах для сбора данных. Мы удалим символы тикера для всех компаний, перечисленных в списке NIFTY 50.
  • Затем мы будем использовать Quandl API для получения данных о запасах за последние 7 лет.
  • ПРИМЕЧАНИЕ. Чтобы получить ключ API, создайте учетную запись на веб-сайте Quandl . Получение ключа API позволяет выполнять более 50 вызовов API за день.

Предварительная обработка данных

  • Обозначьте данные обучения как 0 (продажа) и 1 (покупка).
  • Масштабирование данных с помощью библиотеки предварительной обработки sklearn

Построение модели нейронной сети

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

Давайте углубимся в код, чтобы лучше понять его.

Шаг 1:

  • Веб-парсинг вики-страницы NIFTY 50:

На рисунке ниже нам нужно очистить тикерные символы (подчеркнутые в красном ) для всех соответствующих компаний.

  • Теперь мы можем получать символы тикера:

Шаг 2:

  • Чтобы получить цены на акции из Quandl и затем сохранить их в файле CSV, чтобы избежать дублирования вызовов Quandl API.

Шаг 3 :

  • Давайте создадим DataFrame из сгенерированных файлов.
  • Нас интересуют только 2 столбца: Сумма закрытия запасов и Общее количество сделок.

Шаг 4:

Давайте предварительно обработаем данные

  • SERIES_LENGTH: мы собираемся объединить данные в скобках за 30 дней. например. день1-день30, день2-день31, день3-день32 ... и так далее ... используя эти данные, мы будем прогнозировать будущие данные
  • PREDICT_LENGTH: прогноз с сегодняшнего дня через 7 дней.

Что делает приведенный ниже код?

  • df [«nifty_future_price»]: он будет содержать данные df [«NIFTY_50_Close»] через 7 дней.
  • скажем, df [«NIFTY_50_Close»] от day1-day7, тогда df [«nifty_future_price»] будет иметь данные от day8 -day14 и так далее
  • Это делается для генерации последовательных данных, чтобы они зависели от прошлых данных.
  • Таким образом мы получим NaN в конце df [«nifty_future_price»], но мы их удалим.
  • Мы будем использовать продажу = 0 и покупку = 1 в качестве ярлыков
  • if df [«nifty_future_price»]df [« NIFTY_50_Close »] ===› тогда купить (1)
  • if df [«nifty_future_price»]df [« NIFTY_50_Close »] ===› тогда продать (0).
  • Затем мы подсчитаем продажи и покупки, чтобы сбалансировать данные.
    Алгоритм: в зависимости от того, какое количество меньше, мы возьмем данные до этого.
  • Наконец, сгенерируйте данные и метки в виде массивов numpy.

Шаг 5: Построение модели нейронной сети (LSTM)

  • Разделение на тренировку и тест: мы проведем разделение 80:20.

  • Фигуры после разделения:

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

  • Построение прогнозов и набора тестов: я тренировал его для меньшего количества эпох, поэтому результаты не так хороши, но неплохие.
  • Результаты: Точность проверки: 60% и Потеря проверки: 0,78
  • Это, безусловно, может быть улучшено за счет лучшего проектирования архитектуры и запуска для большего количества эпох и лучшей настройки всех гиперпараметров.

ЗАКЛЮЧЕНИЕ :

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

Где найти мой код?

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