Asyncio MOEX ISS API
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ asyncio ΡΠ°ΡΡΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ MOEX Informational & Statistical Server.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
https://wlm1ke.github.io/aiomoex/
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ-Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΡΠ³ΡΠ΅ΠΌΡΡ Π°ΠΊΡΠΈΡΡ ΠΈ ΠΈΡ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠ°Ρ , ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΡΡΡΡ Π² 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