Прогнозирование фондового рынка всегда привлекало большое внимание как из-за возможного воздействия, так и из-за огромных трудностей, с которыми оно связано. С появлением машинного обучения было предложено несколько подходов к прогнозированию цен на акции.
В этой статье мы собираемся подойти к прогнозированию акций как к проблеме классификации, где мы попытаемся предсказать, пойдет ли цена на следующий день вверх или вниз, используя исторические данные о запасах. Мы будем использовать технические индикаторы для решения нашей задачи.
Обоснование
Технические индикаторы считаются сильными предсказателями цен на акции и широко используются в прогнозировании. Стоит попробовать использовать эти индикаторы в качестве функций в алгоритме машинного обучения. В какой-то момент они рассчитываются с использованием цен на текущий и предыдущий дни.
Давайте начнем:
Технические индикаторы
Я использую некоторые из наиболее часто используемых технических индикаторов в качестве функций. Вот список:
- Скользящие средние
- Полосы Боллинджера
- Индекс силы
- Индекс товарного канала
- Легкость передвижения
- "Скорость изменения"
Вот код:
Предварительная обработка данных
Изменение масштаба
Этот шаг включает изменение масштаба данных. Мы будем использовать стандартизацию как нашу технику масштабирования. Он включает в себя преобразование распределения значений так, чтобы среднее наблюдаемых значений было 0, а стандартное отклонение - 1 для каждой функции.
Классовый дисбаланс
Дисбаланс в классе может мешать тренировке, а также давать ложное ощущение высокой точности. Мы будем использовать подвыборку, чтобы сбалансировать классы.
Преобразовать в задачу классификации
Я формулирую это как проблему классификации. Если цена открытия в (n + 1) -й день больше, чем цена открытия в n-й день, то метка (целевая переменная) для n-го дня будет «1», иначе «0». Другими словами:
Причина, по которой я использую «цену открытия», заключается в том, что я экспериментировал с движениями всех четырех цен (открытия, максимума, минимума, закрытия) и получил наилучшие результаты для «открытия» (просто экспериментальное наблюдение!).
Обучение
XGBClassifier используется для обучения.
Примечание. Здесь я не перетасовываю данные перед разделением, поскольку мы действительно хотим прогнозировать цены в будущем, обучая нашу модель на прошлых данных. Следует соблюдать осторожность при обучении и оценке данных временных рядов, поскольку существует высокая вероятность переобучения (и не используйте перекрестную проверку для оценки).
Полученные результаты
Я использовал 2 акции и 2 индекса, а именно AAPL, GE, DJIA, Nasdaq.
Ниже приведен график важных функций AAPL (наиболее точный):
Таким образом, мы можем получить некоторую производительность с максимальной точностью 74,01%. Поскольку прогнозирование цен на акции довольно сложно, можно начать с рассмотрения проблемы 2-х классной классификации, а затем мы можем пойти более детально, превратив ее в мультиклассовую задачу, определив метку для различных диапазонов движения акций. и если нам это удастся, мы наконец сможем перейти к прогнозированию цен (проблема регрессии).
Технические индикаторы являются хорошими предикторами цен на акции и, следовательно, служат хорошим представителем функций параметрической модели (поскольку XGBoost и другие подобные алгоритмы не фиксируют временную зависимость функций), хотя есть и более эффективные методы, которые можно попробовать. . Тем не менее, этот подход служит хорошим началом для прогнозирования акций.
Полный код можно найти на моем гитхабе.
Аплодируйте, комментируйте, делитесь. Всегда приветствуются конструктивная критика и отзывы!