Вы ищете способ бесплатно получать большие объемы данных о ценах на акции за 1 минуту в течение дня? Для тестирования ваших торговых алгоритмов и обучения моделей локально? Есть очень приятный способ сделать это, и я покажу вам прямо ниже.

В этой статье я покажу вам, как бесплатно загрузить внутридневные данные с биржи IEX. Обратите внимание, что IEX - это фондовая биржа в США, на которой ежедневно торгуется ›8 тыс. Тикерных символов. Никогда об этом не слышали? Больше информации здесь.

Важно отметить, что эта статья покажет вам, как загружать внутридневные данные OHCL для всех ›8K тикеров с биржи IEX эффективно и регулярно.

Зачем получать данные из IEX?

Есть три причины, по которым вы должны получать свои внутридневные данные из IEX:

  1. Это бесплатно. IEX - единственная платформа, которая позволяет регулярно бесплатно загружать большие объемы внутридневных данных OHCL (открытие, максимум, закрытие, минимум). Обычно внутридневные данные обходятся дорого, если вы хотите получить большие наборы данных.
  2. У IEX отличный API. IEX API хорошо документирован, прост для понимания и, прежде всего, безупречно поддерживает асинхронные запросы.
  3. На Альпаке можно торговать бумагами. Альпака - лучший API для алгоритмической торговли, который я нашел. Они предлагают бесплатную неограниченную торговлю бумагами для тикерных символов IEX. Следовательно, вы можете напрямую применять на практике свои стратегии, разработанные с использованием данных IEX.

Какие есть альтернативные API-сервисы для финансовых данных?

Позвольте мне упомянуть три других сервиса, которые я тестировал и которые вы можете рассматривать в качестве альтернативных источников внутридневных данных OHCL. Все это может быть интересно по определенным причинам.

  1. Данные мировой торговли: если вы хотите собирать данные OHCL в течение дня с других бирж, например NASDAQ, NYSE, а также биржи за пределами США, это очень дешевый вариант. Пример. При тарифном плане за 16 долларов в месяц вы можете получить данные о разрешении за 2 минуты примерно за 2 минуты. Акции 50к. Однако это потребует частых загрузок (1 сеанс в день в течение 2 недель каждые 2 недели), и ваши загрузки будут довольно медленными, поскольку, по моему опыту, World Trading Data не очень поддерживает асинхронные запросы.
  2. Tiingo: если вы хотите собрать исторические 1-минутные внутридневные данные от IEX, начиная с прибл. 2017, Tiingo - самый дешевый вариант. Это будет стоить вам ок. Всего 10 долларов, поскольку у Tiingo очень щедрые ограничения на вызовы API. Примечание. IEX API не позволяет получить доступ к данным за день более чем за 30 календарных дней в прошлом. Таким образом, Tiingo может быть интересен, если вы хотите быстро получить исторические данные за более длительный период времени. В отличие от этого, IEX API отлично подходит для регулярных и совершенно бесплатных загрузок.
  3. Alphavantage: если вы хотите регулярно собирать внутридневные данные OHCL для других бирж, например NASDAQ, NYSE и не требует большого количества тикерных символов, тогда Alphavantage может быть достаточно, чтобы получить эти данные бесплатно. Alphavantage охватывает очень большое количество тикеров. Однако лимиты вызовов API для бесплатного плана довольно ограничены (5 вызовов API в минуту, 500 вызовов в день).

Какова цель сценария?

Представленный ниже сценарий - это то, что я лично использую для сбора 1-минутных внутридневных данных из IEX. Вы можете настроить сценарий для своих целей. Однако, возможно, это именно то, что вы ищете. Я написал сценарий, имея в виду следующие три цели:

  1. Соберите данные для последующей обработки, например тестирование и обучение моделей машинного обучения. (Не: чтобы накормить свои жизненные алгоритмы данными)
  2. Храните данные локально, например на вашем компьютере или, возможно, даже в папке облачного хранилища на вашем компьютере. (Не: поместить данные в базу данных)
  3. Сделайте загрузку простой, например Я хочу иметь возможность запускать скрипт в любое время с python download_IEX.py (нет: необходимость передавать какие-либо параметры или выполнять загрузку в определенные дни)

Как работает скрипт?

Каждый раз, когда вы выполняете сценарий с python download_IEX.py, вы запускаете новый сеанс загрузки (для всех прошлых дат, для которых данные доступны и еще не загружены). Каждый сеанс загрузки работает следующим образом:

  1. Инициализация журнала: сценарий создает новый файл журнала для текущего сеанса (см. init_logging()). Например. если вы проведете сеанс 26 октября, вы найдете соответствующий файл журнала в script/log/20191026.log. По сути, каждый файл журнала содержит распечатки, которые вы могли видеть в терминале при выполнении сценария.
  2. Получение дат: скрипт выбирает все даты, для которых должны быть выполнены загрузки (см. get_dates()). Для этого он проверяет существующие папки в каталоге output и записывает даты, для которых данные уже были загружены. Затем требуемые даты вычисляются как все даты, которые отстают на 30 дней или меньше и еще не находятся в папке output.
  3. Выполнение загрузки. Затем сценарий проводит отдельный сеанс асинхронной загрузки для каждой выбранной даты с шага 2. Для каждой даты подготавливается сеанс асинхронной загрузки (см. asyncio_prep()), например извлекаются все доступные тикеры из IEX API. Затем этот сеанс выполняется с функцией download_tickers_asynchronous(), которая асинхронно выбирает и записывает данные для отдельных тикеров (см. get_csv() и write_csv()).

Как мне настроить скрипт?

Чтобы настроить сценарий, вам необходимо выполнить следующие три шага.

  1. Загрузите репозиторий на свой компьютер

Вы можете найти репозиторий Github здесь. Загрузите репозиторий, перейдя на Clone or download, а затем на Download zip. Затем поместите загруженный файл IEX_historical-prices-master.zip в любую папку на вашем компьютере и извлеките zip-каталог.

Теперь у вас должна быть папка (с выбранным вами именем), содержащая следующие файлы:

2. Получите бесплатный ключ API от IEX.

Зайдите на сайт IEX Cloud и зарегистрируйтесь бесплатно. Затем найдите свой бесплатный токен API в API Tokens на SECRET (см. Красный квадрат на скриншоте ниже).

3. Создайте свой script/config.json файл

Откройте новый файл в любом текстовом редакторе, например Visual Studio Code. Затем введите следующее в первые три строки нового файла и замените YOUR_TOKEN токеном SECRET из предыдущего шага.

{
"TOKEN": "YOUR_TOKEN"
}

Теперь щелкните Save as и сохраните новый файл с именем config.json в каталоге script. Ваша папка должна теперь выглядеть так:

Как начать загрузку?

После настройки сценария, как описано выше, вы можете открыть новый терминал в папке script и выполнить сценарий с помощьюpython download_IEX.py. Если все необходимые пакеты установлены (см. Импорт в начале download_IEX.py), сценарий начнет загрузку внутридневных данных IEX.

В терминале для каждого загруженного файла вы увидите следующее:
метку времени, тикер, индекс тикера (среди всех доступных тикеров IEX) и дату, для которой тикер был загружен:

Как мне прервать загрузку?

Вы можете прервать загрузку, просто прервав выполняемый скрипт. (Если вы выполните сценарий в терминале, control+c сделает то же самое на Mac.) Позже вы можете просто возобновить сценарий, перезапустив его с помощью python download_IEX.py, но вам придется перезапустить загрузку с той даты, для которой в данный момент загружались данные. когда вы прервали сценарий.

Важно отметить, что по умолчанию при запуске скрипта никакие файлы или папки не удаляются. Поэтому вы можете вручную удалить папку для даты с незавершенными загрузками. Таким образом, сценарий выполнит новый запуск в указанную дату, когда вы перезапустите его с помощью python download_IEX.py.

Как часто нужно скачивать?

Если вы хотите использовать этот сценарий для регулярной загрузки данных IEX, вам нужно запускать его не реже одного раза в четыре недели. Причина в том, что согласно документации, API позволяет загружать данные за 30 конечных календарных дней (см. Документацию IEX). Это означает, что если бы вы выполняли только сеанс загрузки, например каждые восемь недель у вас будет не хватать данных в течение нескольких дней.

Однако на самом деле мне удалось получить данные за более чем 30 календарных дней. Вероятно, в документации говорилось «30 конечных календарных недельных дней». В любом случае можно безопасно запускать сценарий каждые четыре недели.

Обратите внимание, что всякий раз, когда вы запускаете скрипт, вам не нужно устанавливать какие-либо параметры, поскольку он автоматически определяет, для каких дат вы уже загрузили данные и для каких дат вы можете загрузить данные из IEX. Следовательно, вы также можете выполнить сценарий, например. каждые две недели или нерегулярные перерывы между сеансами загрузки (иногда две недели, иногда больше).

Как использовать загруженные файлы?

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

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

Важные примечания:

  • Когда сеанс асинхронной загрузки для одного конкретного дня завершается, папка для этого дня автоматически архивируется для экономии места. Следовательно, вы можете захотеть распаковать папки перед обработкой необработанных данных.
  • Каждая папка даты содержит три папки данных DONE, ERROR и NONE. Вы захотите использовать файлы в папке DONE, потому что эти файлы содержат актуальные внутридневные данные для допустимых тикерных символов. Файлы в папке ERROR в основном представляют собой тестовые тикеры от IEX (см. Этот выпуск GitHub), а файлы в папке NONE соответствуют тикерам, по которым в тот день не было сделок (см. Этот выпуск GitHub).

Как будут выглядеть загруженные данные?

В папке DONE с заданной датой вы найдете по одному CSV-файлу для каждого тикера:

И каждый из этих файлов содержит одинаковую информацию о OHCL. Вот пример для Apple (AAPL):

Ссылка

Благодарим за прочтение и ждем ваших отзывов!