Если человек-инвестор может быть успешным, почему этого не может сделать машина?
Машинное обучение и глубокое обучение стали новыми и эффективными стратегиями, которые обычно используются количественными хедж-фондами для максимизации своей прибыли.
Эта статья будет введением о том, как использовать нейронные сети для прогнозирования состояния фондового рынка, в частности, о том, нужно ли покупать или продавать ваши акции и делать правильные инвестиции.
Алгоритмическая торговля произвела революцию на фондовом рынке и окружающей его отрасли. Более 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 недостаточно хороша для использования в реальной торговле, основы, заложенные в результате разработки такой модели, могут помочь нам построить более совершенные модели, которые однажды могут быть использованы в нашей торговой системе.
- Нейронные сети очень хорошо умеют прогнозировать данные временных рядов и в сочетании с данными настроений действительно могут составить практическую модель. Хотя результаты здесь были впечатляющими, я все еще нахожу способы улучшить его и, возможно, действительно разработаю на его основе полную торговую стратегию.
Где найти мой код?
- Ссылка на Github: https://github.com/SubhamIO/Stock-Market-Prediction-using-LSTM
Использованная литература :
- AppliedAiCourse
- Руководство по Sentdex - › https://www.youtube.com/watch?time_continue=535&v=yWkpRdpOiPY
- Учебник Сираджа Равала - › https://www.youtube.com/watch?v=ftMq5ps503w&vl=en
- ML в финансах: https://medium.com/@kangeugine/time-series-arima-model-11140bc08c6