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 | Provenance | |
|---|---|---|---|---|
| aiomoex-2.2.0.tar.gz | 55.6 kB | Without provenance | 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
|
Security for aiomoex 2.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.