Asyncio MOEX ISS API
Реализация на основе asyncio части запросов к MOEX Informational & Statistical Server.
Документация
Основные возможности
Реализовано несколько функций-запросов информации о торгуемых акциях и их исторических котировках, результаты которых напрямую конвертируются в pandas.DataFrame.
Работа функций базируется на универсальном клиенте, позволяющем осуществлять произвольные запросы к MOEX ISS, поэтому перечень доступных функций-запросов может быть легко расширен. При необходимости добавления функций воспользуйтесь Issues на GitHub с указанием ссылки на описание запроса:
Полный перечень возможных запросов к MOEX ISS
Официальное Руководство разработчика с дополнительной информацией
Почему asyncio?
На многие запросы MOEX ISS выдает данные порциями по 100 элементов, и для получения всей информации требуются дополнительные обращения к серверу для загрузки данных не с начальной позиции. Например, для скачивания котировок всех акций во всех режимах может потребоваться несколько десятков тысяч обращений к серверу.
Результаты маленького тестирования загрузки исторических котировок в режиме TQBR для 35 и 277 (всех торгуемых) акций с помощью синхронных запросов:
Вид запросов |
35 акций |
277 акций |
|---|---|---|
asyncio |
12.6 сек |
40.6 сек |
Синхронные |
210.4 сек |
1436.9 сек |
Ускорение |
16.7 раз |
35.4 раза |
Начало работы
Установка
$ pip install aiomoex
Пример использования реализованных запросов
История котировок SNGSP в режиме TQBR:
import asyncio
import aiohttp
import aiomoex
import pandas as pd
async def main():
async with aiohttp.ClientSession() as session:
data = await aiomoex.get_board_history(session, 'SNGSP')
df = pd.DataFrame(data)
df.set_index('TRADEDATE', inplace=True)
print(df.head(), '\n')
print(df.tail(), '\n')
df.info()
asyncio.run(main())
BOARDID CLOSE VOLUME VALUE
TRADEDATE
2014-06-09 TQBR 27.48 12674200 3.484352e+08
2014-06-10 TQBR 27.55 14035900 3.856417e+08
2014-06-11 TQBR 28.15 27208800 7.602146e+08
2014-06-16 TQBR 28.27 68059900 1.913160e+09
2014-06-17 TQBR 28.20 22101600 6.292844e+08
BOARDID CLOSE VOLUME VALUE
TRADEDATE
2020-09-01 TQBR 37.245 15671200 5.824013e+08
2020-09-02 TQBR 37.535 34659700 1.296441e+09
2020-09-03 TQBR 36.955 28177000 1.049745e+09
2020-09-04 TQBR 36.915 21908000 8.076767e+08
2020-09-07 TQBR 37.200 13334400 4.955280e+08
<class 'pandas.core.frame.DataFrame'>
Index: 1573 entries, 2014-06-09 to 2020-09-07
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 BOARDID 1573 non-null object
1 CLOSE 1573 non-null float64
2 VOLUME 1573 non-null int64
3 VALUE 1573 non-null float64
dtypes: float64(2), int64(1), object(1)
memory usage: 61.4+ KB
Пример реализации запроса с помощью клиента
Перечень акций, торгующихся в режиме TQBR (описание запроса):
import asyncio
import aiohttp
import aiomoex
import pandas as pd
async def main():
request_url = "https://iss.moex.com/iss/engines/stock/" "markets/shares/boards/TQBR/securities.json"
arguments = {"securities.columns": ("SECID," "REGNUMBER," "LOTSIZE," "SHORTNAME")}
async with aiohttp.ClientSession() as session:
iss = aiomoex.ISSClient(session, request_url, arguments)
data = await iss.get()
df = pd.DataFrame(data["securities"])
df.set_index("SECID", inplace=True)
print(df.head(), "\n")
print(df.tail(), "\n")
df.info()
asyncio.run(main())
REGNUMBER LOTSIZE SHORTNAME
SECID
ABRD 1-02-12500-A 10 АбрауДюрсо
AFKS 1-05-01669-A 100 Система ао
AFLT 1-01-00010-A 10 Аэрофлот
AGRO None 1 AGRO-гдр
AKRN 1-03-00207-A 1 Акрон
REGNUMBER LOTSIZE SHORTNAME
SECID
YNDX None 1 Yandex clA
YRSB 1-01-50099-A 10 ТНСэнЯр
YRSBP 2-01-50099-A 10 ТНСэнЯр-п
ZILL 1-02-00036-A 1 ЗИЛ ао
ZVEZ 1-01-00169-D 1000 ЗВЕЗДА ао
<class 'pandas.core.frame.DataFrame'>
Index: 260 entries, ABRD to ZVEZ
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 REGNUMBER 248 non-null object
1 LOTSIZE 260 non-null int64
2 SHORTNAME 260 non-null object
dtypes: int64(1), object(2)
memory usage: 8.1+ KB
Metadata
Release files for aiomoex 2.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aiomoex-2.2.0.tar.gz | 55.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aiomoex-2.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 70.7 kB
Release files / aiomoex-2.2.0.tar.gz
| Download URL | aiomoex-2.2.0.tar.gz |
|---|---|
| Size | 55.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
59d506d044c03f4827f261b538e23f9e83bf699c4960070817cab40cb93f5075
|
|
BLAKE2b-256 checksum How to use checksums |
30147632af05189a311ca8667144bcd5a3935d2146d2a27cb9347143ead1ad67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.8
|
Release files / aiomoex-2.2.0-py3-none-any.whl
| Download URL | aiomoex-2.2.0-py3-none-any.whl |
|---|---|
| Size | 15.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ebf0885bd7d991c254de1a1ea00ad514c4edd2c9b980ec3aa1dac97a2eb1656a
|
|
BLAKE2b-256 checksum How to use checksums |
6e3d2fec1eee22a4a9d0518dab2335fd6c00f0a32207fc8cc533c3d020d4281e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.8
|