barbagrigia / aiomoex

Asyncio client for MOEX ISS

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Asyncio MOEX ISS API

image

image

image

image

Реализация на основе 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

About

Asyncio client for MOEX ISS

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

License:The Unlicense


Languages

Language:Python 100.0%