Skip to main content

Asyncio MOEX ISS API

Project description

Asyncio MOEX ISS API

https://travis-ci.org/WLM1ke/aiomoex.svg?branch=master https://api.codacy.com/project/badge/Coverage/363c10e1d85b404882326cf62b78f25c https://api.codacy.com/project/badge/Grade/363c10e1d85b404882326cf62b78f25c https://badge.fury.io/py/aiomoex.svg

Реализация на основе asyncio части запросов к MOEX Informational & Statistical Server.

Документация

https://wlm1ke.github.io/aiomoex/

Основные возможности

Реализовано несколько функций-запросов информации о торгуемых акциях и их исторических котировках, результаты которых напрямую конвертируются в pandas.DataFrame.

Работа функций базируется на универсальном клиенте, позволяющем осуществлять произвольные запросы к MOEX ISS, поэтому перечень доступных функций-запросов может быть легко расширен. При необходимости добавления функций воспользуйтесь Issues на GitHub с указанием ссылки на описание запроса:

Почему 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 aiomoex
import pandas as pd


async def main():
    async with aiomoex.ISSClientSession():
        data = await aiomoex.get_board_history('SNGSP')
        df = pd.DataFrame(data)
        df.set_index('TRADEDATE', inplace=True)
        print(df.head(), '\n')
        print(df.tail(), '\n')
        df.info()


asyncio.run(main())
            CLOSE    VOLUME
TRADEDATE
2014-06-09  27.48  12674200
2014-06-10  27.55  14035900
2014-06-11  28.15  27208800
2014-06-16  28.27  68059900
2014-06-17  28.20  22101600

             CLOSE    VOLUME
TRADEDATE
2018-11-16  37.860   9660800
2018-11-19  37.315  28765600
2018-11-20  36.790  19853500
2018-11-21  36.930  14583000
2018-11-22  37.480   9656600

<class 'pandas.core.frame.DataFrame'>
Index: 1125 entries, 2014-06-09 to 2018-11-22
Data columns (total 2 columns):
CLOSE     1125 non-null float64
VOLUME    1125 non-null int64
dtypes: float64(1), int64(1)
memory usage: 26.4+ KB

Пример реализации запроса с помощью клиента

Перечень акций, торгующихся в режиме TQBR (описание запроса):

import asyncio

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')}
    iss = aiomoex.ISSClient(request_url, arguments)
    iss.start_session()
    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()
    await iss.close_session()


asyncio.run(main())
       LOTSIZE     REGNUMBER   SHORTNAME
SECID
ABRD        10  1-02-12500-A  АбрауДюрсо
AFKS       100  1-05-01669-A  Система ао
AFLT        10  1-01-00010-A    Аэрофлот
AGRO         1          None    AGRO-гдр
AKRN         1  1-03-00207-A       Акрон

       LOTSIZE     REGNUMBER  SHORTNAME
SECID
YRSBP      100  2-01-50099-A  ТНСэнЯр-п
ZILL         1  1-02-00036-A     ЗИЛ ао
ZMZN        10  1-01-00230-A     ЗМЗ-ао
ZMZNP      100  2-01-00230-A     ЗМЗ-ап
ZVEZ      1000  1-01-00169-D  ЗВЕЗДА ао

<class 'pandas.core.frame.DataFrame'>
Index: 277 entries, ABRD to ZVEZ
Data columns (total 3 columns):
LOTSIZE      277 non-null int64
REGNUMBER    268 non-null object
SHORTNAME    277 non-null object
dtypes: int64(1), object(2)
memory usage: 8.7+ KB

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiomoex-1.2.0.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aiomoex-1.2.0-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file aiomoex-1.2.0.tar.gz.

File metadata

  • Download URL: aiomoex-1.2.0.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for aiomoex-1.2.0.tar.gz
Algorithm Hash digest
SHA256 b2e3264be8386e5cb7eabcaabb852e350ac35ab45d29a38af16fd54653d62c2f
MD5 6478269786f74aa1eb129ad08933bd94
BLAKE2b-256 32e3500394f467e45230a21598d03c8b155404a88e20d9436a6931fc478de37a

See more details on using hashes here.

File details

Details for the file aiomoex-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: aiomoex-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for aiomoex-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 14728d030c01619e71defbb80d9c203b95d8939329735110a036059b59f41ff1
MD5 a9744a055f475bce311a7bd13b86e4ce
BLAKE2b-256 135aeb3d961e77a95f016462897a4b4fc8651ea0492034f328c4d01d89c1a39e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page