Наличие необработанных данных НЕ достаточно для эффективной работы над факторным инвестированием, и нам нужен вспомогательный инструмент (API), который понимает финансовые языки.

API данных финансовой аналитики необходим, прежде чем мы начнем работать над фактическим анализом.

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

Мысли в финансовом ключе! НЕ в виде базы данных!

Чтобы наверстать упущенное в предыдущем сеансе:



API 1.0

Дата файлы

На последнем занятии (Факторное инвестирование с данными Python № 1) мы загрузили финансовые данные США, отраслевые данные и данные о ценах. К настоящему времени у нас должны быть следующие файлы. Вы также можете скачать их с моего гугл диска (Ссылка).

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

Исследуйте данные

Я буду использовать Jupyter Lab (я установил Anaconda локально), но вы можете использовать любую удобную платформу.

Чтобы начать проект, я создал папку «Factor Investing» и создал под ней подпапку, названную «данные», куда я поместил все загруженные файлы данных. Наконец, я создал блокнот «api_dev.ipynb».

Давайте посмотрим, что у нас есть в этих файлах. Для этого мы будем использовать Pandas (который устанавливается по умолчанию вместе с Anaconda).

Таким образом, первые два описательных файла дадут нам информацию о компаниях и отраслях. Связью между двумя файлами является столбец «IndustryId». Следует отметить, что отрасль НЕ относится к моменту времени, т. е. с данными НЕТ дат, связанных с датой, поэтому нам приходится идти на компромисс. Люди в финансовой индустрии обычно покупают исторические отраслевые данные, если они серьезно относятся к тестированию на исторических данных.

Затем у нас есть данные о ценах, а связью между файлом компании и файлом цен является столбец «Тикер». Поскольку файл предназначен только для компаний США, валюта здесь — доллары США.

Наконец, у нас есть набор файлов финансовых отчетов, которые дают нам основы. Связующим звеном между файлом компании и финансовыми файлами по-прежнему является столбец «Тикер».

Финансовые файлы имеют столбец «Валюта». Обычно компании отчитываются в валютах, отличных от торговой валюты. Здесь мы проверили валюты, чтобы увидеть, есть ли какая-либо компания, НЕ отчитывающаяся в долларах США, и, к счастью, у нас есть только доллары США, поэтому нам не нужно беспокоиться о проблемах конвертации валюты при расчете некоторых коэффициентов цен, таких как PE. На самом деле, когда нам нужно проанализировать мировой рынок, нам также понадобится файл истории FX.

Обратите внимание, что у нас есть два столбца: Дата отчета и Дата публикации. Это то, что нам нужно для данных на определенный момент времени. Кроме того, обратите внимание, что дата отчета не обязательно совпадает с датами финансового периода.

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

Упражнение для ума — таблицы не годятся

Теперь с таблицами мы должны получить нужные нам данные. Давайте посмотрим на один пример.

Получите средний показатель PE за 1 год для всех компаний энергетического сектора по состоянию на конец декабря 2018 года.

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

Вот концептуальные шаги:

  1. Отфильтруйте таблицу отраслей, чтобы найти список идентификаторов IndustryId для сектора энергетики.
  2. Используйте IndustryIds, чтобы отфильтровать историю компании и найти список тикеров компании.
  3. Используйте данные таблицы цен, чтобы убедиться, что компания была указана в списке до того времени.
  4. Используйте тикеры, чтобы найти годовую цену в период с конца декабря 2017 года до конца декабря 2018 года.
  5. Используйте тикеры, текущую дату и дату публикации, чтобы найти последние 12 месяцев акций, находящихся в обращении, и прибыль за все даты между концом 2017 года и концом 2018 года.
  6. Делать математику!

Простой запрос, но долгий процесс.

НАМ НУЖЕН API!

API для обучения

Я создал один простой API (Нажмите, чтобы загрузить) только для целей обучения. Давайте посмотрим, как API может работать и помочь нам.

Чтобы настроить его, загрузите его с GitHub по ссылке выше, затем создайте новую папку и назовите ее «данные». Наконец, поместите в него все файлы данных, которые мы скачали. Вот моя структура папок.

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

После импорта пакета API мы можем запустить API, который загрузит файлы данных.

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

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

Теперь вернемся к нашему вопросу о получении среднего PE для компаний энергетического сектора за 1 год. Давайте попробуем сначала привлечь все компании энергетического сектора.

Хороший! Простая строка кода у нас есть компании в энергетическом секторе на конец 2018 года.

Далее давайте воспользуемся тикерами компании, чтобы получить все данные, необходимые для возврата PE за 1 год к концу 2018 года.

Наконец, займемся математикой.

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

Когда у нас есть прибыль на акцию, нам нужно сделать еще одну корректировку для расчета коэффициента PE, то есть убедиться, что у нас есть положительный EPS, если это не так, то нет смысла вычислять коэффициент PE. Для этого мы импортировали Numpy и использовали лямбду, чтобы применить простую функцию, говорящую, что если какое-либо значение меньше нуля, мы делаем его NaN.

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

Отлично! мы получаем то, что хотим!

Самое главное, что мы использовали финансовый язык только тогда, когда извлекали данные.

Что еще?

Что делать, если я не знаю, какие поля можно использовать? Перечислите все поля:

Что делать, если я хочу увидеть подмножество полей по категориям? Список полей по категориям полей:

Что делать, если я не знаю, какие параметры использовать с полем? Получите информацию о полях, выполнив поиск по ключевым словам:

Информация о полях поступает из файла метаданных.

Метаданные также сообщают методу «get_data», какой внутренний метод использовать для получения данных и какие параметры ожидать.

Пристальный взгляд

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

Метод принимает два основных параметра:

бегущие строки: список бегущих строк.

поле: длинное или короткое имя поля.

Затем метод будет принимать необязательные параметры для конкретных полей. Например, если мы хотим получить цену закрытия. Проверим, какие параметры примет цена закрытия.

Вот несколько вещей, которые нам нужно передать:

начало: это ввод даты, и мы используем его для определения даты начала

конец: еще один ввод даты для определения даты окончания

adj: это строка, которая принимает y или n, что означает, хотим ли мы получить скорректированную цену

fill_prev: либо y, либо n, чтобы указать, хотим ли мы заполнить NA предыдущим значением.

Затем мы можем использовать эти параметры для получения цены закрытия.

Фундаментальные данные имеют больше параметров. Например, мы можем взглянуть на поле «Чистый доход», используя метод «display_field_info». Он должен прийти со следующими параметрами:

pt: краткое название типа периода, которое может быть «q» для квартала, «a» для года и «ttm» для последних 12 месяцев.

смещение: начальное и конечное смещение дают нам возможность выбрать диапазон относительных периодов для выбранного типа периода.

y, q: начало и конец y или q означают начало и конец года или квартала. В случае, если нам нужен конкретный год и квартал, мы можем это сделать.

as_of_date: начало и конец по дате дают нам возможность выбрать диапазон дат по состоянию на дату.

Следующий

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