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

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

Обоснование

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

Давайте начнем:

Технические индикаторы

Я использую некоторые из наиболее часто используемых технических индикаторов в качестве функций. Вот список:

  1. Скользящие средние
  2. Полосы Боллинджера
  3. Индекс силы
  4. Индекс товарного канала
  5. Легкость передвижения
  6. "Скорость изменения"

Вот код:

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

Изменение масштаба

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

Классовый дисбаланс

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

Преобразовать в задачу классификации

Я формулирую это как проблему классификации. Если цена открытия в (n + 1) -й день больше, чем цена открытия в n-й день, то метка (целевая переменная) для n-го дня будет «1», иначе «0». Другими словами:

Причина, по которой я использую «цену открытия», заключается в том, что я экспериментировал с движениями всех четырех цен (открытия, максимума, минимума, закрытия) и получил наилучшие результаты для «открытия» (просто экспериментальное наблюдение!).

Обучение

XGBClassifier используется для обучения.

Примечание. Здесь я не перетасовываю данные перед разделением, поскольку мы действительно хотим прогнозировать цены в будущем, обучая нашу модель на прошлых данных. Следует соблюдать осторожность при обучении и оценке данных временных рядов, поскольку существует высокая вероятность переобучения (и не используйте перекрестную проверку для оценки).

Полученные результаты

Я использовал 2 акции и 2 индекса, а именно AAPL, GE, DJIA, Nasdaq.

Ниже приведен график важных функций AAPL (наиболее точный):

Таким образом, мы можем получить некоторую производительность с максимальной точностью 74,01%. Поскольку прогнозирование цен на акции довольно сложно, можно начать с рассмотрения проблемы 2-х классной классификации, а затем мы можем пойти более детально, превратив ее в мультиклассовую задачу, определив метку для различных диапазонов движения акций. и если нам это удастся, мы наконец сможем перейти к прогнозированию цен (проблема регрессии).

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

Полный код можно найти на моем гитхабе.

Аплодируйте, комментируйте, делитесь. Всегда приветствуются конструктивная критика и отзывы!