moex_research
Описание
A simple library for moex-api
Языки
- Jupyter Notebook99,3%
- Python0,7%
README.md
Moex Research
Простая библиотека для работы с данными API MOEX.
Installation
Скачайте данный пакет, и используйте его, в своих ноутбуках.
Если потребуется, установите зависимости (pandas & requests):
pip install -r requirements.txt
Библиотека работает с версией Python >= 3.7
Описание библиотеки.
Общее число эндпроинтов доступных в API MOEX превышает 150 шт.
- Часть из них не работает, устарела, или доступна только при оформлении подписки;
- Множество эндпоинты не имеют описания или внятного описания;
- Для запроса к эндпоинтам нужно знать множество глобальных сущностей, таких как рынки, типы инструментов, площадки, режимы торгов и прочее;
- У каждого эндпоинта множество параметров запроса, со своими ограничениями. Неконтролируемые ошибки в запросе параметров могут прислать некорректный результат;
- Каждый эндпоинт может возвращать множество сущностей, излишнюю информацию, например, метаданные и полный перечень атрибутов, часто не требуемых для анализа;
- Часть эндпоинтов имеют курсоры, а часть возвращает данные без пагинации. Требуется дублировать запросы для получения полного объема информации.
Все перечисленные проблемы решает данная библиотека
С деталями вы можете ознакомиться в приложенных ноутбуках:
Подготовки справочника API:
Ознакомление и примеры использования:
Основное:
- Получение глобальных справочников;
- Получение деталей и описаний глобальных сущностей (рынки, сессии, площадки и т.д.);
- Получение списка всех доступных эндпоинтов (исключены все недоступные пользователю без подписки);
- Получение описаний каждого эндпоинта;
- Валидация переданных параметров;
- Сбор данных с курсоров и пагинацией в один датафрейм;
- Гибкий запрос данных;
- Простой метод запроса данных.
Как работать:
Данная библиотека позволяет работать со всеми доступными данными Мосбиржи, не обращаясь к гуглу и прочим источникам. Прям из ноутбука. Согласитесь, удобно :)
- Смотрите список доступных апи через метод all_api()
- Используете id api, запросив его описание api_description(id_api)
- Запрашиваете данные через request(api_id, **kwargs), где kwargs - все параметры, которые вы увидите в описании api
- Если вам не известен код какого-то параметра, смотрите его в справочнике. Сущности хранятся в 'available_entities'
- Все результаты получаете в виде фрейма панды или словаря, где ключами являются блоки данных, а значениями - фреймы данных.
Пример использования:
Описание:
Для запроса данных используйте метод request!
Список базовых сущностей хранится в переменной 'available_entities'
Виды бумаг хранятся в переменной 'SECTYPE'
Срочность опциона хранится в переменной 'OPTION_SERIES_TYPE'
Все доступные API можно посмотреть вызвав all_api()
Описание API можно посмотреть вызвав api_description
Описание глобальной сущности можно получить вызвав description
Глобальные справочники:
[IN]: MOEX.available_entities
[OUT]: ['boardgroups', 'boards', 'datatypes', 'durations', 'engines', 'indexids', 'markets', 'report_names'...
[IN]: MOEX.engines
[OUT]:
id title
name
stock 1 Фондовый рынок и рынок депозитов
state 2 Рынок ГЦБ (размещение)
currency 3 Валютный рынок
futures 4 Срочный рынок
commodity 5 Товарный рынок
interventions 6 Товарные интервенции
offboard 7 ОТС-система
agro 9 Агро
otc 1012 ОТС с ЦК
quotes 1282 Квоты
[IN]: MOEX.description(entity="board", name="TQBR")
[OUT]: 'Т+: Акции и ДР - безадрес.'
Доступные API (их ID и описание данных):
[IN]: MOEX.all_api()
[OUT]:
5 Список бумаг торгуемых на московской бирже.
13 Получить спецификацию инструмента.
24 Получить сводные обороты по рынкам
26 Получить интервал дат, доступных в истории для рынка по заданному режиму торгов.
28 Получить глобальные справочники ISS.
32 Получить таблицу инструментов по режиму торгов.
33 Получить таблицу инструментов торговой сессии по рынку в целом.
34 Получить все сделки по выбранному режиму торгов.
35 Получить все сделки рынка.
...
877 Опционные серии
879 Объем торгов для опционной серии
881 Доска опционов
883 Открытые позиции по опционной серии
885 Объем торгов для опционной серии
923 Календарь расчетных дней
927 Своп-кривые на рынке СПФИ
933 НКД на конец месяца
[IN]: MOEX.api_description(46)
[OUT]:
46: Получить свечи указанного инструмента по выбранному режиму торгов.
Глобальные сущности запроса: ['engine', 'market', 'board', 'security']
Возвращаемые поинтом данные:
candles: Свечи в формате HLOCV
Параметры запроса:
``start``: Номер строки (отсчет с нуля), с которой следует начать порцию возвращаемых данных (см. рук-во разработчика).
Получение ответа без данных означает, что указанное значение превышает число строк, возвращаемых запросом.. Значение по умолчанию: 0
``till``: Дата, до которой выводить данные.
Формат: ГГГГ-ММ-ДД.. Значение по умолчанию: 2037-12-31
``from``: Дата, начиная с которой необходимо начать выводить данные.
Формат: ГГГГ-ММ-ДД..
``interval``: Интервал графика.. Значение по умолчанию: 10
``iss.reverse``: Изменить порядок сортировки на обратный. Принимает значения true/false.. Значение по умолчанию: false
Эндпоинт возвращает ограниченное количество записей
Запрос к API (описание):
[IN]: help(MOEX.request)
[OUT]:
quest(api_id: int | str, only_market_data: bool = False, blocks: list[str] = None, **kwargs: Any)
-> pd.DataFrame | dict[str, pd.DataFrame]
Запрос данных по API Мосбиржи:
:param api_id: указывается id поинта запроса данных;
:param only_market_data: включать или нет непосредственно рыночные данные. По умолчанию не указываем;
:param blocks: ответ может содержать несколько блоков данных и этот параметр позволяет выбрать только нужные.
:param kwargs:
1. Обязательно указываем значения всех требуемых глобальных сущностей;
2. Указываем значения параметров;
2.1. Если имя параметра совпадает с именем глобальной сущности, то к имени параметра добавляем префикс 'P_',
например, "P_market" для параметра "market";
2.2. Если значений параметров несколько, передаем их в виде списка, например, securities = ["GAZP", "LKOH"]
2.3. Если имя параметра является ключевым атрибутом python, добавьте к имени '_', например: _from.
2.4. Если в имени параметра содержится '.' (точка), замените ее на двойное подчеркивание, например:
iss.reverse -> iss__reverse
3. Если хотим указать атрибутный состав полей для блока, то к имени блока добавляем префикс
'COLUMNS_'. Названия атрибутов перечисляем в списке. Например, COLUMNS_boardgroups = ["slug", "is_default"].
:return: Если запрашивается только одна сущность то вернется фрейм данных. Если много, то в словаре, где
ключом является имя сущности.
Примеры запроса:
[IN]: MOEX.request(13, security="ROSN", blocks=["boards"], COLUMNS_boards=["boardid", "title", "market", "engine", "is_traded"])
[OUT]:
boardid title is_traded
0 TQBR Т+: Акции и ДР - безадрес. 1
1 TQBS Т+: А2-Акции и паи - безадрес. 0
2 TQNL Т+: Б-Акции и паи - безадрес. 0
3 EQNL Основной режим: Б-Акции и паи - безадрес. 0
4 EQLV Основной режим: В-Акции и РДР - безадрес. 0
5 SPEQ Поставка по СК (акции) 1
6 SMAL Т+: Неполные лоты (акции) - безадрес. 0
7 TQDP Крупные пакеты - Акции - безадрес. 0
8 EQDP Крупные пакеты - Акции - безадрес. 0
9 RPMO РЕПО-М - адрес. 1
.......
[IN]: MOEX.request(815, engine="stock", market="shares", board="TQBR", session=3, security="GAZP", _from="2023-04-01", till="2023-05-01")
[OUT]:
BOARDID TRADEDATE SHORTNAME ... TRADINGSESSION CURRENCYID TRENDCLSPR
0 TQBR 2023-04-03 ГАЗПРОМ ао ... 3 SUR 0.32
1 TQBR 2023-04-04 ГАЗПРОМ ао ... 3 SUR 1.27
2 TQBR 2023-04-05 ГАЗПРОМ ао ... 3 SUR 0.76
3 TQBR 2023-04-06 ГАЗПРОМ ао ... 3 SUR -1.30
4 TQBR 2023-04-07 ГАЗПРОМ ао ... 3 SUR 0.87
........