В этом посте я продемонстрирую пример использования платформы EQKit, в частности, я буду использовать функциональность Scanner() для создания исследования перекрестного капитала для выбора акций. Давайте погрузимся в это!

Этот пост не является инвестиционным советом, а представляет собой демонстрацию программного обеспечения.

Знакомство со сканером

Объект Scanne() предназначен для предоставления аналитических функций для анализа акций. Он управляет pandas DataFrame(), на который мы можем легко добавлять точки данных и создавать визуализации. Все это поддерживается основным объектом Equity() EQKit.
Мы добавили специальный сканер Screen(), который легко использовать на Jupyter; он обеспечивает удобный способ взаимодействия с Scanner() в режиме реального времени.

Сканер — это простой объект, он управляет вводом данных, связывая функции библиотеки с потоками данных для легкого доступа к данным и манипулирования ими. В этом примере мы будем использовать Screen() для взаимодействия с Jupyter и примерными данными S&P 500, включенными в библиотеку. Давайте быстро погрузимся в загрузку и просмотр данных с помощью Screen() .

  • Scanner() : Для инициализации сканера требуется только datafeed объект, переданный ему для добавления/распознавания данных.
  • screen.load(frame): этот метод позволяет нам загрузить фрейм данных pandas в объект сканера. Используя pd.read_csv(), мы можем легко импортировать с помощью одной команды.
  • screen.view() : Это позволяет нам быстро печатать данные на Jupyter!

Самостоятельная загрузка данных!

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

  • add_Overview() : Добавляет обзорную информацию, которая включает в себя фондовый рынок, валюту и т. д.
  • add_Quant() : Добавляет данные количественной аналитики, потому что нам нужна точка данных «Максимальная просадка».
  • add_Study(): мы используем это для расчета средней чувствительности процентной ставки (по временной структуре) для каждого актива; мы делаем это, пройдя исследование InterestRateSensitivity, а также его **kwargs .

Гипотеза исследования

Теперь, когда я представил сканер, я могу приступить к обсуждению исследовательской гипотезы, предназначенной для демонстрации. Я считаю, что можно сгруппировать множество акций на основе взаимосвязи между чувствительностью процентной ставки и максимальной просадкой. Давайте лучше рассмотрим наши переменные:

  • Чувствительность к процентной ставке. Это средняя объясненная дисперсия (r-квадрат) временных рядов акций по отношению к каждому пункту на кривой сроков погашения казначейских облигаций США.
  • Максимальная просадка: максимальный возвратный убыток от «максимальной отметки» в течение 1 года.

Взаимосвязь между этими переменными можно частично объяснить составом баланса компаний. Эмпирически мы замечаем, что акции «Роста», как правило, имеют более высокую чувствительность к процентным ставкам, в то время как восприятие основного риска может быть косвенно смоделировано через просадку. Таким образом, мы можем изучить следующий график (сгенерированный одной строкой кода Scanner()):

Таким образом, группировка приведенных выше данных может дать нам группы для более новых компаний «Роста», которые, возможно, еще не испытали глубоких просадок, и более старых компаний с глубокими балансами.

Простые 2-D Kmeans

Как только мы разобрались с нашими данными, мы можем начать анализировать нашу гипотезу. Мы можем легко сгруппировать данные о капитале на приведенных выше диаграммах рассеяния, используя метод Kmeans. Проще говоря, этот метод оценивает группы с помощью геометрического метода равных фигур. В EQKit наш объект Scanner.Indicator позволяет нам легко добавлять функции к данным, поэтому мы можем легко получить группы Kmeans для каждого капитала как такового:

Мы видим, что наша группировка могла быть потенциально успешной при группировании группы ребер (№ 4), которая, как вы могли заметить, имеет высокий коэффициент Шарпа, или так она выглядит. Мы можем исследовать это, просмотрев pivot данных с помощью функции Kmeans — чтобы не загружать matplotlib в нашу записную книжку, мы могли бы просто загрузить сводную таблицу на новый экран и использовать встроенный метод bar_plot.

Приведенный выше анализ показывает, что коэффициент mean() Шарпа отдельных акций в каждой группе Kmeans различается, особенно между группами № 1 и № 4, почти в два раза. Нам было бы полезно получить дополнительную информацию о составе каждой группы. Это можно сделать с помощью метода value_counts() в pandas.

Анализ эффективности группы с помощью портфелей

Мы достигли точки в нашем исследовании, когда, хотя группировка фондового рынка может обеспечить лучшую производительность с поправкой на риск, нам все еще нужно продемонстрировать ее с более надежными результатами. В этом пакете у нас есть объект Portfolio(), который можно использовать для расчета производительности статического веса распределения. Мы можем использовать эту функцию для анализа эффективности инвестиций каждой группы.
Самый простой способ приблизиться к этому — построить фрейм данных с результатами функции quant_summary() для нескольких случайных выборок, равновзвешенныхPortfolio() с тикерами из каждой группы (исключительно). Затем мы можем сравнить их среднюю производительность, чтобы увидеть обоснованность нашей группировки в качестве преимущества.

Из приведенного выше исследования мы видим среднее улучшение коэффициента Шарпа с 0,55 до прибл. 0,82; однако это не должно напрямую приводить к повышению производительности. Чтобы дополнительно проверить гипотезу, я выбрал наиболее эффективный портфель из каждой группы на основе годовой доходности и нанес на график результаты с начала данных группы 3 (которые являются более новыми) для сравнения. Как видно из графика ниже, эффективность портфеля группы 3 превзошла показатели как портфеля группы 0, который, как мы ожидали, будет худшей группой, так и ETF S&P 500 (SPY).

Отказ от ответственности

Этот пост в блоге представляет собой демонстрацию с целью демонстрации варианта использования библиотеки Python EQKit, разработанной Fjall Investment Research, его результаты и выводы никоим образом не являются основанием для принятия мер. У этого исследования есть недостатки — например, тот факт, что мы не учитывали возраст, — и оно в значительной степени основано на фактических показателях, которые никоим образом не отражают будущие доходы. Пожалуйста, используйте этот пост как ссылку на возможные количественные проекты, которые вы могли бы разработать самостоятельно, но не используйте его напрямую для инвестиций.