Прогнозирование цен на акции было интересной задачей, не так ли? Наука о данных для торговли находится на подъеме и набирает обороты. За последние 3-4 недели я изучал финансы и пытался расширить свои навыки Data Science в области финансов, чтобы попытаться понять, как торговля автоматизируется и становится прибыльной благодаря большому количеству фирм, занимающихся алгоритмической торговлей.

На днях я наткнулся на то, как можно использовать обучение с подкреплением критиков и критиков, и написал статью о том же, вчера вечером я подумал о том, чтобы сделать что-то более простое и посмотреть, как это работает, поскольку более простые методы, как известно, довольно хорошо работают для Большинство людей, я понял, что изучил достаточно вещей, чтобы запачкать руки и попробовать что-то для создания алгоритма, который, надеюсь, может принести некоторую прибыль. Да, все мы знаем, что RL - это хорошо, потрясающе и еще много чего, но простые методы и технические индикаторы в финансах уже давно работают довольно хорошо для людей, занимающихся трейдингом, так почему бы не объединить их с машинным обучением, чтобы сделать что-то полезное и, надеюсь,? выгодно.

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

Отказ от ответственности - все, что я здесь пишу, и весь код, который вы видите в моем репозитории GitHub, взят из моего собственного исследования. Я не несу ответственности за любые убытки, которые вы можете понести, используя этот код для совершения реальных сделок. Я настоятельно рекомендую вам НЕ использовать это для реальной торговли. Цель этого - поделиться всем, что я узнал за последние несколько недель.

Что это за технические индикаторы?

По данным Investopedia,

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

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

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

Мы используем 1 для обозначения покупки, если прогнозируется рост цены, и 0 для обозначения продажи, если прогнозируется снижение цены.

Мы будем использовать TA-Lib и Pandas для расчета большинства этих технических индикаторов. Итак, приступим. Весь код можно найти в моем репозитории GitHub.

Технические индикаторы, используемые как функции:

  1. Простое скользящее среднее
  • Ежедневные финансовые данные могут быть шумными. Мы можем использовать скользящее среднее, чтобы получить больше сигнала, а не шума из данных. Основная концепция здесь состоит в том, чтобы предоставить окно установленного периода времени, а затем использовать его для расчета вашей совокупной статистики (в данном случае - среднего).
  • В нашем случае мы рассмотрели простую 5-дневную скользящую среднюю и 10-дневную скользящую среднюю в качестве наших характеристик.

2. Подвижное стандартное отклонение

  • Это точно такая же концепция, как и скользящее среднее, совокупная статистика, в конце концов, представляет собой стандартное отклонение вместо среднего, в остальном все остальное полностью то же самое. Опять же, мы рассмотрели как 5-дневное, так и 10-дневное окно для вычисления скользящего стандартного отклонения. Одним из наиболее распространенных его применений являются полосы Боллинджера, которые используются для определения волатильности акций и являются еще одним техническим индикатором для изучения.

3. Экспоненциально взвешенное скользящее среднее

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

(i) Меньшие размеры окна в SMA приводят к большему шуму, чем к сигналу.

(ii) SMA всегда будет отставать на размер окна.

(iii) SMA никогда не достигнет полного пика данных из-за усреднения.

(iv) Экстремальные значения / выбросы могут значительно исказить SMA.

EWMA избавляет от некоторых из этих недостатков SMA и иногда является лучшим выбором.

3. Индекс относительной силы

  • RSI - это индикатор осциллятора с диапазоном от 0 до 100.
  • Математическое уравнение для расчета RSI имеет вид -

  • Как правило, мы используем 14-дневный период для расчета RSI, хотя он может варьироваться в зависимости от конкретных требований.
  • Более низкий период будет генерировать более частые сигналы покупки / продажи, и некоторые из них могут быть неверными.
  • Чем больше количество периодов, тем меньше частота сигналов покупки / продажи с высокой вероятностью исключения некоторых реальных возможностей покупки / продажи.
  • Как правило, значение RSI выше 70 считается перекупленностью, а значение ниже 30 - перепроданностью.
  • Пороги RSI могут быть 80 и 20 для вышеуказанных случаев в случае бычьего и медвежьего рынков соответственно (графики Google Candlesticks, чтобы узнать о них больше).

4. Вильямс% R

  • Это индикатор моментума, а также осциллятор между -100 и 0.
  • Математическое уравнение, которое не требует пояснений для вычисления Williams R, имеет вид -

  • Значение выше -20 обычно считается перекупленным.
  • Значение ниже -80 обычно считается перепроданным.
  • Опять же, приведенные выше значения могут немного отличаться для бычьего и медвежьего рынков.
  • Вкратце, он сообщает трейдеру, где текущая цена относительно самого высокого максимума за последние 14 периодов (или любой другой выбранный период).

5. Parabolic SAR

  • Индикатор Parabolic Stop and Reverse используется для определения направления тренда конкретного актива.
  • Обозначается точками ниже или выше цены актива, в зависимости от направления движения цены.
  • Если есть восходящий тренд, то эти точки находятся ниже свечей, если есть нисходящий тренд, они находятся над графиком свечей.

6. ADX (индекс среднего направления)

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

Отлично, теперь мы знаем о ряде технических индикаторов, которые мы можем использовать для анализа данных о наших запасах Reliance.

Зачем использовать SVM?

  • SVM - один из самых популярных алгоритмов машинного обучения, чрезвычайно популярный в конце 90-х годов и довольно простой, но мощный (в сочетании с соответствующим ядром) подход к решению проблем классификации и регрессии.
  • SVM могут работать очень хорошо, если мы сможем найти правильное ядро, и если мы сможем найти ядро, разработанное для конкретной области, оно сможет превзойти большинство других методов и дать феноменальные результаты. Однако для простоты мы будем придерживаться основных - линейного ядра, полиномиального ядра и ядра RBF, которое поставляется прямо из коробки в sklearn.
  • На гиперплоскость влияют только опорные векторы, поэтому выбросы имеют меньшее влияние.
  • Для новичков, которые являются новичками и хотят узнать больше о том, как работают SVM, вы можете прочитать этот замечательный пост в блоге, и вы быстро узнаете все тонкости SVM.

Недостатки использования SVM?

  • Для обучения SVM требуется очень много времени, и они очень неэффективны в вычислительном отношении для работы с большими наборами данных.
  • Временная сложность линейной SVM составляет примерно O (n²).
  • Тем не менее, мы можем использовать масштабирование функций, чтобы обучать их быстрее и действительно быстрее сводить функцию потерь, поэтому масштабирование функций является важной частью при работе с SVM.
  • Однако сложность выполнения O (k * d) зависит от количества опорных векторов k, и d, размерности наших данных.
  • Поиск подходящего ядра может оказаться настоящей болью и непростой задачей.
  • Настройка гиперпараметров в случае SVM может быть не так упрощена.

Достигнутые результаты?

  • В записной книжке мы видим, что мы достигли следующих результатов по данным о запасах Reliance с 2009 года по текущую дату:

Линейный SVM - точность: 51,43%

SVM на основе полиномиального ядра - точность: 53,15%

SVM на основе RBF-ядра - точность: 52%

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

Как мы можем это улучшить?

  • Используйте анализ настроений и новости о Reliance Stock / Stocks в своем портфеле.
  • Используйте больше технических индикаторов (поскольку SVM хорошо работает с многомерными данными, вы можете легко добавить больше функций, не беспокоясь о проклятии размерности).
  • Примените то же самое к диверсифицированному портфелю акций, а не к отдельной акции.
  • Найдите ядро, зависящее от предметной области, которое может значительно повысить производительность, то есть ядро, которое хорошо работает с данными о финансах / временных рядах, это требует некоторых исследований.
  • Точная настройка существующей архитектуры SVM (используйте RandomSearch вместо GridSearch, чтобы упростить жизнь)
  • Интерпретируйте свою модель с помощью методов, не зависящих от модели (таких как LIME), чтобы понять любую систематическую ошибку (если она существует) и понять, какая функция больше способствует вашему прогнозу.
  • Используйте больше данных (даже данные за более чем 10 лет, но будьте осторожны, не используйте слишком много, потому что использование слишком большого количества данных добавляет больше шума, а не сигнала), чтобы получить гораздо лучшие результаты, что, конечно, достигается за счет большего количества времени, необходимого для обучить SVM.
  • Попробуйте другие классификаторы, такие как KNN, которые могут быть очень похожи на SVM на основе RBF, чтобы увидеть, есть ли какие-либо улучшения в производительности.

Весь код, связанный с этим сообщением в блоге, можно найти в этом репозитории GitHub.

Спасибо за прочтение! Удачного дня!