Прогнозирование цен на акции было интересной задачей, не так ли? Наука о данных для торговли находится на подъеме и набирает обороты. За последние 3-4 недели я изучал финансы и пытался расширить свои навыки Data Science в области финансов, чтобы попытаться понять, как торговля автоматизируется и становится прибыльной благодаря большому количеству фирм, занимающихся алгоритмической торговлей.
На днях я наткнулся на то, как можно использовать обучение с подкреплением критиков и критиков, и написал статью о том же, вчера вечером я подумал о том, чтобы сделать что-то более простое и посмотреть, как это работает, поскольку более простые методы, как известно, довольно хорошо работают для Большинство людей, я понял, что изучил достаточно вещей, чтобы запачкать руки и попробовать что-то для создания алгоритма, который, надеюсь, может принести некоторую прибыль. Да, все мы знаем, что RL - это хорошо, потрясающе и еще много чего, но простые методы и технические индикаторы в финансах уже давно работают довольно хорошо для людей, занимающихся трейдингом, так почему бы не объединить их с машинным обучением, чтобы сделать что-то полезное и, надеюсь,? выгодно.
Это довольно легко выполнить и может дать неплохие результаты, однако прочитайте нижеприведенный отказ от ответственности, прежде чем продолжить эту статью.
Отказ от ответственности - все, что я здесь пишу, и весь код, который вы видите в моем репозитории GitHub, взят из моего собственного исследования. Я не несу ответственности за любые убытки, которые вы можете понести, используя этот код для совершения реальных сделок. Я настоятельно рекомендую вам НЕ использовать это для реальной торговли. Цель этого - поделиться всем, что я узнал за последние несколько недель.
Что это за технические индикаторы?
По данным Investopedia,
Технические индикаторы - это эвристические или математические вычисления, основанные на цене, объеме или открытом интересе ценной бумаги или контракта, используемые трейдерами, которые следят за техническим анализом.
Короче говоря, это набор математических и статистических методов, используемых трейдерами, которые помогают им в выборе своей торговой стратегии. В этой статье мы рассмотрим самые фундаментальные и базовые из них и увидим, что они могут генерировать хорошие функции, которые мы можем передать нашему классификатору SVM, чтобы предсказать, стоит ли нам покупать или продавать.
Да, вы правильно поняли, я пытался думать об этом как о проблеме двоичной классификации, а не о проблеме регрессии, чтобы предсказать фактические цены на акции, чтобы упростить вещи, и SVM имеет тенденцию работать довольно хорошо для сценариев классификации, таких как этот, регрессия / прогнозирование цен может быть лучше достигнута с использованием моделей временных рядов, таких как сеть LSTM.
Мы используем 1 для обозначения покупки, если прогнозируется рост цены, и 0 для обозначения продажи, если прогнозируется снижение цены.
Мы будем использовать TA-Lib и Pandas для расчета большинства этих технических индикаторов. Итак, приступим. Весь код можно найти в моем репозитории GitHub.
Технические индикаторы, используемые как функции:
- Простое скользящее среднее
- Ежедневные финансовые данные могут быть шумными. Мы можем использовать скользящее среднее, чтобы получить больше сигнала, а не шума из данных. Основная концепция здесь состоит в том, чтобы предоставить окно установленного периода времени, а затем использовать его для расчета вашей совокупной статистики (в данном случае - среднего).
- В нашем случае мы рассмотрели простую 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.
Спасибо за прочтение! Удачного дня!