From 9a29152024d66a45fae8e90df5254819842e44c7 Mon Sep 17 00:00:00 2001 From: WLM1ke Date: Thu, 11 Jan 2024 20:15:06 +0300 Subject: [PATCH] feat: ver 1.4.0 --- .gitignore | 103 ++--------- Taskfile.yml | 53 ++++++ apimoex/__init__.py | 37 +++- apimoex/client.py | 44 ++--- apimoex/py.typed | 0 apimoex/requests.py | 160 ++++++++++-------- docs/Makefile | 14 -- docs/build/doctrees/api.doctree | Bin 208021 -> 216318 bytes docs/build/doctrees/change_log.doctree | Bin 7983 -> 9454 bytes docs/build/doctrees/environment.pickle | Bin 344593 -> 361008 bytes docs/build/doctrees/getting_started.doctree | Bin 10564 -> 10620 bytes docs/build/doctrees/index.doctree | Bin 8319 -> 8375 bytes docs/build/html/.buildinfo | 2 +- docs/build/html/_sources/change_log.rst.txt | 7 + docs/build/html/_static/basic.css | 22 +++ .../html/_static/documentation_options.js | 5 +- docs/build/html/_static/pygments.css | 1 + docs/build/html/_static/searchtools.js | 26 ++- docs/build/html/_static/sphinx_highlight.js | 16 +- docs/build/html/_static/translations.js | 3 +- docs/build/html/api.html | 88 +++++----- docs/build/html/change_log.html | 81 +++++---- docs/build/html/genindex.html | 36 ++-- docs/build/html/getting_started.html | 48 +++--- docs/build/html/index.html | 63 +++---- docs/build/html/objects.inv | Bin 561 -> 561 bytes docs/build/html/search.html | 36 ++-- docs/build/html/searchindex.js | 2 +- docs/change_log.rst | 7 + docs/conf.py | 7 +- pyproject.toml | 64 +++++++ requirements-dev.lock | 47 +++++ requirements.lock | 14 ++ requirements.txt | 6 - setup.py | 51 ------ tests/test_client.py | 8 +- tests/test_requests.py | 115 +++++-------- 37 files changed, 634 insertions(+), 532 deletions(-) create mode 100644 Taskfile.yml mode change 100755 => 100644 apimoex/__init__.py mode change 100755 => 100644 apimoex/client.py create mode 100644 apimoex/py.typed mode change 100755 => 100644 apimoex/requests.py delete mode 100755 docs/Makefile create mode 100644 pyproject.toml create mode 100644 requirements-dev.lock create mode 100644 requirements.lock delete mode 100755 requirements.txt delete mode 100755 setup.py diff --git a/.gitignore b/.gitignore index 24c9222..ee6ae76 100644 --- a/.gitignore +++ b/.gitignore @@ -1,106 +1,23 @@ -# Byte-compiled / optimized / DLL files +# python generated files __pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -develop-eggs/ +*.py[oc] +build/ dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ wheels/ -*.egg-info/ -.installed.cfg -*.egg +*.egg-info -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec +# venv +.venv -# Installer logs -pip-log.txt -pip-delete-this-directory.txt +# pyenv +.python-version # Unit test / coverage reports -htmlcov/ -.tox/ .coverage -.coverage.* -.cache -nosetests.xml coverage.xml -*.cover -.hypothesis/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py # dotenv .env -# virtualenv -.venv -venv/ -ENV/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ - -# PyCharm -.idea/ - -# PyTest -**.pytest_cache/ - -# Coverage.py -.coverage +# VSCode +.vscode \ No newline at end of file diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 0000000..dc16646 --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,53 @@ +version: "3" + +vars: + APP: apimoex + TESTS: tests + PYTHON: 3.12 + TOOLS: go-task rye + +tasks: + default: + desc: List available tasks + cmds: + - task -l + + install: + desc: Setup venv, install tools and dependencies + cmds: + - brew install {{.TOOLS}} + - rye pin --relaxed {{.PYTHON}} + - rye sync --update-all --all-features --no-lock --force + + update: + desc: Upgrade tools and dependencies + cmds: + - brew upgrade {{.TOOLS}} + - rye pin --relaxed {{.PYTHON}} + - rye sync --update-all --all-features + + lint: + desc: Format and lint + cmds: + - rye run ruff format {{.APP}} + - rye run ruff format {{.TESTS}} + - rye run ruff {{.APP}} --unsafe-fixes + - rye run pyright {{.APP}} + + test: + desc: Lint and test + deps: [lint] + cmds: + - rye run pytest {{.TESTS}} --cov={{.APP}} + + docs: + desc: Update html docs + cmds: + - rye run sphinx-build -M html docs docs/build + + publish: + desc: Publish to pypi + deps: [lint, docs] + cmds: + - rye build --clean + - rye publish diff --git a/apimoex/__init__.py b/apimoex/__init__.py old mode 100755 new mode 100644 index 6c91ddd..e5d6d5c --- a/apimoex/__init__.py +++ b/apimoex/__init__.py @@ -1,11 +1,40 @@ -"""Реализовано несколько функций-запросов информации о торгуемых акциях и их исторических котировках, результаты которых +"""Реализация части запросов к MOEX ISS. + +Реализовано несколько функций-запросов информации о торгуемых акциях и их исторических котировках, результаты которых напрямую конвертируются в pandas.DataFrame. Работа функций базируется на универсальном клиенте, позволяющем осуществлять произвольные запросы к MOEX ISS, поэтому перечень доступных функций-запросов может быть легко расширен. """ -from .client import ISSClient -from .requests import * +from apimoex.client import ISSClient +from apimoex.requests import ( + find_securities, + find_security_description, + get_board_candle_borders, + get_board_candles, + get_board_dates, + get_board_history, + get_board_securities, + get_index_tickers, + get_market_candle_borders, + get_market_candles, + get_market_history, + get_reference, +) -__version__ = "1.3.0" +__all__ = [ + "get_reference", + "find_securities", + "find_security_description", + "get_market_candle_borders", + "get_board_candle_borders", + "get_market_candles", + "get_board_candles", + "get_board_dates", + "get_board_securities", + "get_market_history", + "get_board_history", + "get_index_tickers", + "ISSClient", +] diff --git a/apimoex/client.py b/apimoex/client.py old mode 100755 new mode 100644 index c6b8ef0..a04b993 --- a/apimoex/client.py +++ b/apimoex/client.py @@ -1,22 +1,23 @@ """Клиент для MOEX ISS.""" from collections import abc -from typing import Dict -from typing import List -from typing import Optional -from typing import Union +from typing import cast import requests -# Стандартные настройки для запроса расширенного представления json без дополнительных метаданных. +Values = str | int | float +TableRow = dict[str, Values] +Table = list[TableRow] +TablesDict = dict[str, Table] +WebQuery = dict[str, str | int] + BASE_QUERY = {"iss.json": "extended", "iss.meta": "off"} class ISSMoexError(Exception): """Базовое исключение.""" - pass -class ISSClient(abc.Iterable): +class ISSClient(abc.Iterable[TablesDict]): """Клиент для MOEX ISS. Для работы клиента необходимо передать requests.Session. @@ -25,7 +26,7 @@ class ISSClient(abc.Iterable): поддерживается протокол итерируемого для отдельных блоков или метод get_all для их автоматического сбора. """ - def __init__(self, session: requests.Session, url: str, query: dict = None): + def __init__(self, session: requests.Session, url: str, query: WebQuery | None = None) -> None: """MOEX ISS является REST сервером. Полный перечень запросов и параметров к ним https://iss.moex.com/iss/reference/ @@ -41,12 +42,13 @@ def __init__(self, session: requests.Session, url: str, query: dict = None): """ self._session = session self._url = url - self._query = query or dict() + self._query = query or {} def __repr__(self) -> str: + """Наименование класса и содержание запроса к ISS Moex.""" return f"{self.__class__.__name__}(url={self._url}, query={self._query})" - def __iter__(self) -> Dict[str, List[Dict[str, Union[str, int, float]]]]: + def __iter__(self) -> abc.Iterator[TablesDict]: """Генератор по ответам состоящим из нескольких блоков. На часть запросов выдается только начальный блок данных (обычно из 100 элементов). Генератор обеспечивает @@ -68,8 +70,8 @@ def __iter__(self) -> Dict[str, List[Dict[str, Union[str, int, float]]]]: ) del data["history.cursor"] yield data - start += cursor["PAGESIZE"] - if start >= cursor["TOTAL"]: + start += cast(int, cursor["PAGESIZE"]) + if start >= cast(int, cursor["TOTAL"]): return else: # Наименование ключа может быть любым @@ -80,9 +82,7 @@ def __iter__(self) -> Dict[str, List[Dict[str, Union[str, int, float]]]]: return start += block_size - def get( - self, start: Optional[int] = None - ) -> Dict[str, List[Dict[str, Union[str, int, float]]]]: + def get(self, start: int | None = None) -> dict[str, list[dict[str, str | int | float]]]: """Загрузка данных. :param start: @@ -97,22 +97,23 @@ def get( with self._session.get(self._url, params=query) as respond: try: respond.raise_for_status() - except requests.HTTPError: - raise ISSMoexError("Неверный url", respond.url) + except requests.HTTPError as err: + raise ISSMoexError("Неверный url", respond.url) from err else: _, data, *wrong_data = respond.json() if len(wrong_data) != 0: raise ISSMoexError("Ответ содержит некорректные данные", respond.url) return data - def _make_query(self, start=None) -> Dict[str, Union[str, int]]: + def _make_query(self, start: int | None = None) -> WebQuery: """К общему набору параметров запроса добавляется требование предоставить ответ в виде расширенного json.""" - query = dict(**BASE_QUERY, **self._query) + query: WebQuery = dict(**BASE_QUERY, **self._query) if start: query["start"] = start + return query - def get_all(self) -> Dict[str, List[Dict[str, Union[str, int, float]]]]: + def get_all(self) -> TablesDict: """Собирает все блоки данных для запросов, ответы на которые выдаются по частям отдельными блоками. :return: @@ -120,9 +121,10 @@ def get_all(self) -> Dict[str, List[Dict[str, Union[str, int, float]]]]: соответствует одной из таблиц с данными. Таблицы являются списками словарей, которые напрямую конвертируются в pandas.DataFrame. """ - all_data = dict() + all_data: TablesDict = {} for data in self: # noinspection PyUnresolvedReferences for key, value in data.items(): all_data.setdefault(key, []).extend(value) + return all_data diff --git a/apimoex/py.typed b/apimoex/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/apimoex/requests.py b/apimoex/requests.py old mode 100755 new mode 100644 index 6339ae5..c7c1e9d --- a/apimoex/requests.py +++ b/apimoex/requests.py @@ -4,15 +4,10 @@ Полный перечень запросов https://iss.moex.com/iss/reference/ Дополнительное описание https://fs.moex.com/files/6523 """ -from typing import Dict -from typing import List -from typing import Optional -from typing import Tuple -from typing import Union import requests -from . import client +from apimoex import client __all__ = [ "get_reference", @@ -32,14 +27,14 @@ def _make_query( *, - q: Optional[str] = None, - interval: Optional[int] = None, - start: Optional[str] = None, - end: Optional[str] = None, - date: Optional[str] = None, - table: Optional[str] = None, - columns: Optional[Tuple[str, ...]] = None, -) -> Dict[str, Union[str, int]]: + q: str | None = None, + interval: int | None = None, + start: str | None = None, + end: str | None = None, + date: str | None = None, + table: str | None = None, + columns: tuple[str, ...] | None = None, +) -> client.WebQuery: """Формирует дополнительные параметры запроса к MOEX ISS. В случае None значений не добавляются в запрос. @@ -62,7 +57,7 @@ def _make_query( :return: Словарь с дополнительными параметрами запроса. """ - query = dict() + query: client.WebQuery = {} if q: query["q"] = q if interval: @@ -77,21 +72,24 @@ def _make_query( query["iss.only"] = f"{table},history.cursor" if columns: query[f"{table}.columns"] = ",".join(columns) + return query -def _get_table(data: dict, table: str) -> list: +def _get_table(data: client.TablesDict, table: str) -> client.Table: """Извлекает конкретную таблицу из данных.""" try: - data = data[table] - except KeyError: - raise client.ISSMoexError(f"Отсутствует таблица {table} в данных") - return data + return data[table] + except KeyError as err: + raise client.ISSMoexError(f"Отсутствует таблица {table} в данных") from err def _get_short_data( - session: requests.Session, url: str, table: str, query: Optional[dict] = None -) -> List[Dict[str, Union[str, int, float]]]: + session: requests.Session, + url: str, + table: str, + query: client.WebQuery | None = None, +) -> client.Table: """Получить данные для запроса с выдачей всей информации за раз. :param session: @@ -108,12 +106,16 @@ def _get_short_data( """ iss = client.ISSClient(session, url, query) data = iss.get() + return _get_table(data, table) def _get_long_data( - session: requests.Session, url, table, query=None -) -> List[Dict[str, Union[str, int, float]]]: + session: requests.Session, + url: str, + table: str, + query: client.WebQuery | None = None, +) -> client.Table: """Получить данные для запроса, в котором информация выдается несколькими блоками. :param session: @@ -130,12 +132,11 @@ def _get_long_data( """ iss = client.ISSClient(session, url, query) data = iss.get_all() + return _get_table(data, table) -def get_reference( - session: requests.Session, placeholder: str = "boards" -) -> List[Dict[str, Union[str, int, float]]]: +def get_reference(session: requests.Session, placeholder: str = "boards") -> list[dict[str, str | int | float]]: """Получить перечень доступных значений плейсхолдера в адресе запроса. Например в описание запроса https://iss.moex.com/iss/reference/32 присутствует следующий адрес @@ -153,14 +154,15 @@ def get_reference( Список словарей, которые напрямую конвертируется в pandas.DataFrame. """ url = "https://iss.moex.com/iss/index.json" + return _get_short_data(session, url, placeholder) def find_securities( session: requests.Session, string: str, - columns: Optional[Tuple[str, ...]] = ("secid", "regnumber"), -) -> List[Dict[str, Union[str, int, float]]]: + columns: tuple[str, ...] | None = ("secid", "regnumber"), +) -> client.Table: """Найти инструменты по части Кода, Названию, ISIN, Идентификатору Эмитента, Номеру гос.регистрации. Один из вариантов использования - по регистрационному номеру узнать предыдущие тикеры эмитента, и с помощью @@ -182,14 +184,15 @@ def find_securities( url = "https://iss.moex.com/iss/securities.json" table = "securities" query = _make_query(q=string, table=table, columns=columns) + return _get_short_data(session, url, table, query) def find_security_description( session: requests.Session, security: str, - columns: Optional[Tuple[str, ...]] = ("name", "title", "value"), -) -> List[Dict[str, Union[str, int, float]]]: + columns: tuple[str, ...] | None = ("name", "title", "value"), +) -> client.Table: """Получить спецификацию инструмента. Один из вариантов использования - по тикеру узнать дату начала торгов. @@ -210,6 +213,7 @@ def find_security_description( url = f"https://iss.moex.com/iss/securities/{security}.json" table = "description" query = _make_query(table=table, columns=columns) + return _get_short_data(session, url, table, query) @@ -218,7 +222,7 @@ def get_market_candle_borders( security: str, market: str = "shares", engine: str = "stock", -) -> List[Dict[str, Union[str, int, float]]]: +) -> client.Table: """Получить таблицу интервалов доступных дат для свечей различного размера на рынке для всех режимов торгов. Описание запроса - https://iss.moex.com/iss/reference/156 @@ -237,6 +241,7 @@ def get_market_candle_borders( """ url = f"https://iss.moex.com/iss/engines/{engine}/markets/{market}/securities/{security}/candleborders.json" table = "borders" + return _get_short_data(session, url, table) @@ -246,7 +251,7 @@ def get_board_candle_borders( board: str = "TQBR", market: str = "shares", engine: str = "stock", -) -> List[Dict[str, Union[str, int, float]]]: +) -> client.Table: """Получить таблицу интервалов доступных дат для свечей различного размера в указанном режиме торгов. Описание запроса - https://iss.moex.com/iss/reference/48 @@ -270,6 +275,7 @@ def get_board_candle_borders( f"boards/{board}/securities/{security}/candleborders.json" ) table = "borders" + return _get_short_data(session, url, table) @@ -277,20 +283,20 @@ def get_market_candles( session: requests.Session, security: str, interval: int = 24, - start: Optional[str] = None, - end: Optional[str] = None, - columns: Optional[Tuple[str, ...]] = ( - "begin", - "open", - "close", - "high", - "low", - "value", - "volume", + start: str | None = None, + end: str | None = None, + columns: tuple[str, ...] | None = ( + "begin", + "open", + "close", + "high", + "low", + "value", + "volume", ), market: str = "shares", engine: str = "stock", -) -> List[Dict[str, Union[str, int, float]]]: +) -> client.Table: """Получить свечи в формате HLOCV указанного инструмента на рынке для основного режима торгов за интервал дат. Если торговля идет в нескольких основных режимах, то на один интервал времени может быть выдано несколько свечек - @@ -325,6 +331,7 @@ def get_market_candles( url = f"https://iss.moex.com/iss/engines/{engine}/markets/{market}/securities/{security}/candles.json" table = "candles" query = _make_query(interval=interval, start=start, end=end, table=table, columns=columns) + return _get_long_data(session, url, table, query) @@ -332,21 +339,21 @@ def get_board_candles( session: requests.Session, security: str, interval: int = 24, - start: Optional[str] = None, - end: Optional[str] = None, - columns: Optional[Tuple[str, ...]] = ( - "begin", - "open", - "close", - "high", - "low", - "value", - "volume", + start: str | None = None, + end: str | None = None, + columns: tuple[str, ...] | None = ( + "begin", + "open", + "close", + "high", + "low", + "value", + "volume", ), board: str = "TQBR", market: str = "shares", engine: str = "stock", -) -> List[Dict[str, Union[str, int, float]]]: +) -> client.Table: """Получить свечи в формате HLOCV указанного инструмента в указанном режиме торгов за интервал дат. Описание запроса - https://iss.moex.com/iss/reference/46 @@ -382,6 +389,7 @@ def get_board_candles( ) table = "candles" query = _make_query(interval=interval, start=start, end=end, table=table, columns=columns) + return _get_long_data(session, url, table, query) @@ -390,7 +398,7 @@ def get_board_dates( board: str = "TQBR", market: str = "shares", engine: str = "stock", -) -> List[Dict[str, Union[str, int, float]]]: +) -> client.Table: """Получить интервал дат, доступных в истории для рынка по заданному режиму торгов. Описание запроса - https://iss.moex.com/iss/reference/26 @@ -409,17 +417,18 @@ def get_board_dates( """ url = f"https://iss.moex.com/iss/history/engines/{engine}/markets/{market}/boards/{board}/dates.json" table = "dates" + return _get_short_data(session, url, table) def get_board_securities( session: requests.Session, table: str = "securities", - columns: Optional[Tuple[str, ...]] = ("SECID", "REGNUMBER", "LOTSIZE", "SHORTNAME"), + columns: tuple[str, ...] | None = ("SECID", "REGNUMBER", "LOTSIZE", "SHORTNAME"), board: str = "TQBR", market: str = "shares", engine: str = "stock", -) -> List[Dict[str, Union[str, int, float]]]: +) -> client.Table: """Получить таблицу инструментов по режиму торгов со вспомогательной информацией. Описание запроса - https://iss.moex.com/iss/reference/32 @@ -444,15 +453,16 @@ def get_board_securities( """ url = f"https://iss.moex.com/iss/engines/{engine}/markets/{market}/boards/{board}/securities.json" query = _make_query(table=table, columns=columns) + return _get_short_data(session, url, table, query) def get_market_history( session: requests.Session, security: str, - start: Optional[str] = None, - end: Optional[str] = None, - columns: Optional[Tuple[str, ...]] = ( + start: str | None = None, + end: str | None = None, + columns: tuple[str, ...] | None = ( "BOARDID", "TRADEDATE", "CLOSE", @@ -461,7 +471,7 @@ def get_market_history( ), market: str = "shares", engine: str = "stock", -) -> List[Dict[str, Union[str, int, float]]]: +) -> client.Table: """Получить историю по одной бумаге на рынке для всех режимов торгов за интервал дат. На одну дату может приходиться несколько значений, если торги шли в нескольких режимах. @@ -490,15 +500,16 @@ def get_market_history( url = f"https://iss.moex.com/iss/history/engines/{engine}/markets/{market}/securities/{security}.json" table = "history" query = _make_query(start=start, end=end, table=table, columns=columns) + return _get_long_data(session, url, table, query) def get_board_history( session: requests.Session, security: str, - start: Optional[str] = None, - end: Optional[str] = None, - columns: Optional[Tuple[str, ...]] = ( + start: str | None = None, + end: str | None = None, + columns: tuple[str, ...] | None = ( "BOARDID", "TRADEDATE", "CLOSE", @@ -508,7 +519,7 @@ def get_board_history( board: str = "TQBR", market: str = "shares", engine: str = "stock", -): +) -> client.Table: """Получить историю торгов для указанной бумаги в указанном режиме торгов за указанный интервал дат. Описание запроса - https://iss.moex.com/iss/reference/65 @@ -540,14 +551,15 @@ def get_board_history( ) table = "history" query = _make_query(start=start, end=end, table=table, columns=columns) + return _get_long_data(session, url, table, query) def get_index_tickers( session: requests.Session, index: str, - date: Optional[str] = None, - columns: Optional[Tuple[str, ...]] = ( + date: str | None = None, + columns: tuple[str, ...] | None = ( "ticker", "from", "till", @@ -555,7 +567,7 @@ def get_index_tickers( ), market: str = "index", engine: str = "stock", -): +) -> client.Table: """Получить информацию по составу указанного индекса за указанную дату. Описание запроса - https://iss.moex.com/iss/reference/148 @@ -567,7 +579,9 @@ def get_index_tickers( :param index: Название индекса. Например, IMOEX. :param date: - Дата вида ГГГГ-ММ-ДД. Если указано, то будут показаны только активные инструменты, по которым тогда рассчитывалось значение индекса. Если в указанный день не было торгов, то вернёт пустой список! При отсутствии данные будут загружены с начала истории. + Дата вида ГГГГ-ММ-ДД. Если указано, то будут показаны только активные инструменты, + по которым тогда рассчитывалось значение индекса. Если в указанный день не было торгов, то вернёт пустой список! + При отсутствии данные будут загружены с начала истории. :param columns: Кортеж столбцов, которые нужно загрузить - по умолчанию режим торгов, дата торгов, цена закрытия и объем в штуках и стоимости. Если пустой или None, то загружаются все столбцы. @@ -579,10 +593,8 @@ def get_index_tickers( :return: Список словарей, которые напрямую конвертируется в pandas.DataFrame. """ - url = ( - f"https://iss.moex.com/iss/statistics/engines/{engine}/markets/{market}/" - f"analytics/{index}/tickers.json" - ) + url = f"https://iss.moex.com/iss/statistics/engines/{engine}/markets/{market}/" f"analytics/{index}/tickers.json" table = "tickers" query = _make_query(date=date, table=table, columns=columns) + return _get_short_data(session, url, table, query) diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100755 index deeea79..0000000 --- a/docs/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SOURCEDIR = . -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -html: - @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: html Makefile diff --git a/docs/build/doctrees/api.doctree b/docs/build/doctrees/api.doctree index 99d8b8ed0dde175c79b27a86b73252edb0042528..363e374129943e6bc64f76c3e531cd96f5a8b69b 100644 GIT binary patch literal 216318 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 Za!zRqDCebvvN%@?sLFtru8_lR^Z=`e1Uvu$ delta 29867 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 delta 1028 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 YhHti2n$5^)v-zg76)U6HWD(5_07gs~Z~y=R diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 4dd289c39962c52a24e1e01ac1b3902c612dabd2..4009372d5056fb013848490635cf6e5571b63995 100644 GIT binary patch delta 126 zcmezGu-%cRfpzMdjVxY_qT2eQ#i>Qb`r$slnc1oOVZqM%DXE(?8GXb}dPGW!67!04 z5=%1k^WqDN^3#h_i;Jh!PSNOLEy*uQ%$efN(8C2&lbQnLmQLO(5zf`amS0*@P+Bs@ YZ!?eNY(~aSn^#EXu`(W*EUu6N0DU4ZY5)KL delta 68 zcmdn)_}_u0fpu!hMiwtdX+!`}fTH}Y)Z~)l&B=^D;*%ds Ygl~3{oXyC%cJl+NJXXftll>Jk07*9(ng9R* diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index 7416fbe..7ebeaa7 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: d6eb988f4492fb7f0df0cd7f5646568b +config: 8ad4c2555c606d3db820346bc72e7407 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_sources/change_log.rst.txt b/docs/build/html/_sources/change_log.rst.txt index 6999f8d..c42baf7 100644 --- a/docs/build/html/_sources/change_log.rst.txt +++ b/docs/build/html/_sources/change_log.rst.txt @@ -1,6 +1,13 @@ Список изменений ================ +1.4.0 (2024-01-11) +------------------ +* Минимальная версия Python 3.10 +* Обновлены зависимости +* Переход на rye, ruff и pyright +* Добавлен volume с запросы свечек + 1.3.0 (2023-04-20) ------------------ * Добавлен запрос для получения состава индекса diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css index 7577acb..30fee9d 100644 --- a/docs/build/html/_static/basic.css +++ b/docs/build/html/_static/basic.css @@ -237,6 +237,10 @@ a.headerlink { visibility: hidden; } +a:visited { + color: #551A8B; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -670,6 +674,16 @@ dd { margin-left: 30px; } +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + dl > dd:last-child, dl > dd:last-child > :last-child { margin-bottom: 0; @@ -738,6 +752,14 @@ abbr, acronym { cursor: help; } +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + /* -- code displays --------------------------------------------------------- */ pre { diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js index 0535e36..449a250 100644 --- a/docs/build/html/_static/documentation_options.js +++ b/docs/build/html/_static/documentation_options.js @@ -1,6 +1,5 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '1.2.0', +const DOCUMENTATION_OPTIONS = { + VERSION: '1.4.0', LANGUAGE: 'ru', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/build/html/_static/pygments.css b/docs/build/html/_static/pygments.css index 47e9945..b12a8f0 100644 --- a/docs/build/html/_static/pygments.css +++ b/docs/build/html/_static/pygments.css @@ -23,6 +23,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: .highlight .cs { color: #808080; font-style: italic; background-color: #424750 } /* Comment.Special */ .highlight .gd { color: #f0f0f0; background-color: #424750 } /* Generic.Deleted */ .highlight .ge { color: #f0f0f0; background-color: #424750 } /* Generic.Emph */ +.highlight .ges { color: #f0f0f0; background-color: #424750 } /* Generic.EmphStrong */ .highlight .gr { color: #f0f0f0; background-color: #424750 } /* Generic.Error */ .highlight .gh { color: #ffffff; font-weight: bold; background-color: #424750 } /* Generic.Heading */ .highlight .gi { color: #f0f0f0; background-color: #424750 } /* Generic.Inserted */ diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js index 97d56a7..7918c3f 100644 --- a/docs/build/html/_static/searchtools.js +++ b/docs/build/html/_static/searchtools.js @@ -57,12 +57,12 @@ const _removeChildren = (element) => { const _escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -const _displayItem = (item, searchTerms) => { +const _displayItem = (item, searchTerms, highlightTerms) => { const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; const [docName, title, anchor, descr, score, _filename] = item; @@ -75,20 +75,24 @@ const _displayItem = (item, searchTerms) => { if (dirname.match(/\/index\/$/)) dirname = dirname.substring(0, dirname.length - 6); else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; + requestUrl = contentRoot + dirname; linkUrl = requestUrl; } else { // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; + requestUrl = contentRoot + docName + docFileSuffix; linkUrl = docName + docLinkSuffix; } let linkEl = listItem.appendChild(document.createElement("a")); linkEl.href = linkUrl + anchor; linkEl.dataset.score = score; linkEl.innerHTML = title; - if (descr) + if (descr) { listItem.appendChild(document.createElement("span")).innerHTML = " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } else if (showSearchSummary) fetch(requestUrl) .then((responseData) => responseData.text()) @@ -97,6 +101,9 @@ const _displayItem = (item, searchTerms) => { listItem.appendChild( Search.makeSearchSummary(data, searchTerms) ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); }); Search.output.appendChild(listItem); }; @@ -115,14 +122,15 @@ const _finishSearch = (resultCount) => { const _displayNextItem = ( results, resultCount, - searchTerms + searchTerms, + highlightTerms, ) => { // results left, load the summary and display it // this is intended to be dynamic (don't sub resultsCount) if (results.length) { - _displayItem(results.pop(), searchTerms); + _displayItem(results.pop(), searchTerms, highlightTerms); setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), 5 ); } @@ -360,7 +368,7 @@ const Search = { // console.info("search results:", Search.lastresults); // print the results - _displayNextItem(results, results.length, searchTerms); + _displayNextItem(results, results.length, searchTerms, highlightTerms); }, /** diff --git a/docs/build/html/_static/sphinx_highlight.js b/docs/build/html/_static/sphinx_highlight.js index aae669d..8a96c69 100644 --- a/docs/build/html/_static/sphinx_highlight.js +++ b/docs/build/html/_static/sphinx_highlight.js @@ -29,14 +29,19 @@ const _highlight = (node, addItems, text, className) => { } span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); parent.insertBefore( span, parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), + rest, node.nextSibling ) ); node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); if (isInSVG) { const rect = document.createElementNS( @@ -140,5 +145,10 @@ const SphinxHighlight = { }, }; -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/build/html/_static/translations.js b/docs/build/html/_static/translations.js index 45fdf69..4bf2ff7 100644 --- a/docs/build/html/_static/translations.js +++ b/docs/build/html/_static/translations.js @@ -2,8 +2,7 @@ Documentation.addTranslations({ "locale": "ru", "messages": { "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", - "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", - "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", + "© %(copyright_prefix)s %(copyright)s.": "", ", in ": ", \u0432", "About these documents": "\u041e\u0431 \u044d\u0442\u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445", "Automatically generated list of changes in version %(version)s": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 %(version)s", diff --git a/docs/build/html/api.html b/docs/build/html/api.html index ae8b96e..5d4fe02 100644 --- a/docs/build/html/api.html +++ b/docs/build/html/api.html @@ -1,18 +1,17 @@ - - + - - - Справочник API — документация apimoex 1.2.0 - - - - - - + + + Справочник API — документация apimoex 1.4.0 + + + + + + @@ -35,16 +34,16 @@
-

Справочник API

+

Справочник API

-

Функции-запросы

+

Функции-запросы

-

Справочная информация

+

Справочная информация

Функции из данного раздела носят вспомогательный характер и нужны для получения данных для построения остальных запросов.

-apimoex.get_reference(session: Session, placeholder: str = 'boards') List[Dict[str, str | int | float]]
+apimoex.get_reference(session: Session, placeholder: str = 'boards') list[dict[str, str | int | float]]

Получить перечень доступных значений плейсхолдера в адресе запроса.

Например в описание запроса https://iss.moex.com/iss/reference/32 присутствует следующий адрес /iss/engines/[engine]/markets/[market]/boards/[board]/securities с плейсхолдерами engines, markets и boards.

@@ -65,7 +64,7 @@

Справочная информация
-apimoex.find_securities(session: Session, string: str, columns: Tuple[str, ...] | None = ('secid', 'regnumber')) List[Dict[str, str | int | float]]
+apimoex.find_securities(session: Session, string: str, columns: tuple[str, ...] | None = ('secid', 'regnumber')) list[dict[str, str | int | float]]

Найти инструменты по части Кода, Названию, ISIN, Идентификатору Эмитента, Номеру гос.регистрации.

Один из вариантов использования - по регистрационному номеру узнать предыдущие тикеры эмитента, и с помощью нескольких запросов об истории котировок собрать длинную историю с использованием всех предыдущих тикеров.

@@ -87,7 +86,7 @@

Справочная информация
-apimoex.find_security_description(session: Session, security: str, columns: Tuple[str, ...] | None = ('name', 'title', 'value')) List[Dict[str, str | int | float]]
+apimoex.find_security_description(session: Session, security: str, columns: tuple[str, ...] | None = ('name', 'title', 'value')) list[dict[str, str | int | float]]

Получить спецификацию инструмента.

Один из вариантов использования - по тикеру узнать дату начала торгов.

Описание запроса - https://iss.moex.com/iss/reference/13

@@ -108,7 +107,7 @@

Справочная информация
-apimoex.get_index_tickers(session: Session, index: str, date: str | None = None, columns: Tuple[str, ...] | None = ('ticker', 'from', 'till', 'tradingsession'), market: str = 'index', engine: str = 'stock')
+apimoex.get_index_tickers(session: Session, index: str, date: str | None = None, columns: tuple[str, ...] | None = ('ticker', 'from', 'till', 'tradingsession'), market: str = 'index', engine: str = 'stock') list[dict[str, str | int | float]]

Получить информацию по составу указанного индекса за указанную дату.

Описание запроса - https://iss.moex.com/iss/reference/148

Список индексов - https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics

@@ -117,7 +116,9 @@

Справочная информация

-

Реализация произвольного запроса

+

Реализация произвольного запроса

Для осуществления запроса необходимо начать сессию соединений с MOEX ISS и передать клиенту корректный url и дополнительные параметры:

    @@ -360,15 +361,15 @@

    Реализация произвольного запроса
    -class apimoex.ISSClient(session: Session, url: str, query: dict | None = None)
    -

    Базовые классы: Iterable

    +class apimoex.ISSClient(session: Session, url: str, query: dict[str, str | int] | None = None) +

    Базовые классы: Iterable[dict[str, list[dict[str, str | int | float]]]]

    Клиент для MOEX ISS.

    Для работы клиента необходимо передать requests.Session.

    Загружает данные для простых ответов с помощью метода get. Для ответов состоящих из нескольких блоков данных поддерживается протокол итерируемого для отдельных блоков или метод get_all для их автоматического сбора.

    -get(start: int | None = None) Dict[str, List[Dict[str, str | int | float]]]
    +get(start: int | None = None) dict[str, list[dict[str, str | int | float]]]

    Загрузка данных.

    Параметры:
    @@ -385,7 +386,7 @@

    Реализация произвольного запроса
    -get_all() Dict[str, List[Dict[str, str | int | float]]]
    +get_all() dict[str, list[dict[str, str | int | float]]]

    Собирает все блоки данных для запросов, ответы на которые выдаются по частям отдельными блоками.

    Результат:
    @@ -469,14 +470,15 @@

    Навигация

  • Список изменений
  • @@ -490,7 +492,7 @@

    Навигация

    ©2019, Mikhail Korotkov aka WLMike. | - Powered by Sphinx 6.1.3 + Powered by Sphinx 7.2.6 | - + - - - Список изменений — документация apimoex 1.2.0 - - - - - - + + + Список изменений — документация apimoex 1.4.0 + + + + + + @@ -34,51 +33,60 @@
    -

    Список изменений

    +

    Список изменений

    -

    1.3.0 (2023-04-20)

    +

    1.4.0 (2024-01-11)

      -
    • Добавлен запрос для получения состава индекса

    • +
    • Минимальная версия Python 3.10

    • +
    • Обновлены зависимости

    • +
    • Переход на rye, ruff и pyright

    • +
    • Добавлен volume с запросы свечек

    -

    1.2.0 (2020-02-03)

    +

    1.3.0 (2023-04-20)

      -
    • Добавлен запрос для получения спецификации инструмента

    • +
    • Добавлен запрос для получения состава индекса

    -

    1.1.2 (2019-09-15)

    +

    1.2.0 (2020-02-03)

      -
    • Корректная обработка запросов с пустыми таблицами

    • +
    • Добавлен запрос для получения спецификации инструмента

    -

    1.1.1 (2019-09-13)

    +

    1.1.2 (2019-09-15)

      -
    • Минорная правка

    • +
    • Корректная обработка запросов с пустыми таблицами

    -

    1.1.0 (2019-09-13)

    +

    1.1.1 (2019-09-13)

      -
    • Добавлена возможность выбора загружаемых столбцов для get_board_candles и get_market_candles

    • +
    • Минорная правка

    -

    1.0.2 (2019-09-12)

    +

    1.1.0 (2019-09-13)

      -
    • Уточнены типы аргументов

    • +
    • Добавлена возможность выбора загружаемых столбцов для get_board_candles и get_market_candles

    -

    1.0.1 (2019-09-11)

    +

    1.0.2 (2019-09-12)

      -
    • Исправления в readme

    • +
    • Уточнены типы аргументов

    -

    1.0.0 (2019-09-11)

    +

    1.0.1 (2019-09-11)

    +
      +
    • Исправления в readme

    • +
    +
    +
    +

    1.0.0 (2019-09-11)

    • Начальная версия

    @@ -153,14 +161,15 @@

    Навигация

  • Список изменений
  • @@ -174,7 +183,7 @@

    Навигация

    ©2019, Mikhail Korotkov aka WLMike. | - Powered by Sphinx 6.1.3 + Powered by Sphinx 7.2.6 | - + - Алфавитный указатель — документация apimoex 1.2.0 - - - - - - + Алфавитный указатель — документация apimoex 1.4.0 + + + + + + @@ -161,14 +160,15 @@

    Навигация

  • Список изменений
  • @@ -182,7 +182,7 @@

    Навигация

    ©2019, Mikhail Korotkov aka WLMike. | - Powered by Sphinx 6.1.3 + Powered by Sphinx 7.2.6
    diff --git a/docs/build/html/getting_started.html b/docs/build/html/getting_started.html index 06c0b70..3297315 100644 --- a/docs/build/html/getting_started.html +++ b/docs/build/html/getting_started.html @@ -1,18 +1,17 @@ - - + - - - Начало работы — документация apimoex 1.2.0 - - - - - - + + + Начало работы — документация apimoex 1.4.0 + + + + + + @@ -35,15 +34,15 @@
    -

    Начало работы

    +

    Начало работы

    -

    Установка

    +

    Установка

    $ pip install apimoex
     
    -

    Пример использования реализованных запросов

    +

    Пример использования реализованных запросов

    История котировок SNGSP в режиме TQBR:

    import requests
     
    @@ -89,7 +88,7 @@ 

    Пример использования реализованных запр

    -

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

    +

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

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

    import requests
     
    @@ -210,14 +209,15 @@ 

    Навигация

  • Список изменений
  • @@ -231,7 +231,7 @@

    Навигация

    ©2019, Mikhail Korotkov aka WLMike. | - Powered by Sphinx 6.1.3 + Powered by Sphinx 7.2.6 | - + - - - MOEX ISS API — документация apimoex 1.2.0 - - - - - - + + + MOEX ISS API — документация apimoex 1.4.0 + + + + + + @@ -34,10 +33,10 @@
    -

    MOEX ISS API

    +

    MOEX ISS API

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

    -

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

    +

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

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

    Работа функций базируется на универсальном клиенте, позволяющем осуществлять произвольные запросы к MOEX ISS, поэтому @@ -49,7 +48,7 @@

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

    -

    Оглавление

    +

    Оглавление

  • Список изменений
  • @@ -176,7 +177,7 @@

    Навигация

    ©2019, Mikhail Korotkov aka WLMike. | - Powered by Sphinx 6.1.3 + Powered by Sphinx 7.2.6 | - + - Поиск — документация apimoex 1.2.0 - - + Поиск — документация apimoex 1.4.0 + + - - - - + + + + @@ -134,14 +133,15 @@

    Навигация

  • Список изменений
  • @@ -155,7 +155,7 @@

    Навигация

    ©2019, Mikhail Korotkov aka WLMike. | - Powered by Sphinx 6.1.3 + Powered by Sphinx 7.2.6
    diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index c53a690..7731416 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api", "change_log", "getting_started", "index"], "filenames": ["api.rst", "change_log.rst", "getting_started.rst", "index.rst"], "titles": ["\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a API", "\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439", "\u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b", "MOEX ISS API"], "terms": {"\u0438\u0437": 0, "\u0440\u0430\u0437\u0434\u0435\u043b": 0, "\u043d\u043e\u0441": 0, "\u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d": 0, "\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440": 0, "\u0438": [0, 1, 3], "\u043d\u0443\u0436\u043d": 0, "\u0434\u043b\u044f": [0, 1], "\u043f\u043e\u043b\u0443\u0447\u0435\u043d": [0, 1], "\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d": 0, "\u043e\u0441\u0442\u0430\u043b\u044c\u043d": 0, "apimoex": [0, 2], "get_reference": 0, "session": [0, 2], "placeholder": 0, "str": 0, "boards": [0, 2], "list": 0, "dict": 0, "int": 0, "float": 0, "\u043f\u043e\u043b\u0443\u0447": 0, "\u043f\u0435\u0440\u0435\u0447\u0435\u043d": [0, 2, 3], "\u0434\u043e\u0441\u0442\u0443\u043f\u043d": [0, 3], "\u0437\u043d\u0430\u0447\u0435\u043d": 0, "\u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440": 0, "\u0432": [0, 1, 2, 3], "\u0430\u0434\u0440\u0435\u0441": 0, "\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440": 0, "\u043e\u043f\u0438\u0441\u0430\u043d": [0, 2, 3], "https": [0, 2], "iss": [0, 2], "moex": [0, 2], "com": [0, 2], "reference": 0, "32": 0, "\u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432": 0, "\u0441\u043b\u0435\u0434": 0, "engines": [0, 2], "engine": 0, "markets": [0, 2], "market": 0, "board": 0, "securities": [0, 2], "\u0441": [0, 1, 3], "28": [0, 2], "\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440": 0, "\u0441\u0435\u0441\u0441": 0, "\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442": 0, "\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d": 0, "\u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d": 0, "boardgroups": 0, "durations": 0, "securitytypes": 0, "securitygroups": 0, "securitycollections": 0, "\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442": [0, 3], "\u0441\u043f\u0438\u0441\u043e\u043a": [0, 3], "\u0441\u043b\u043e\u0432\u0430\u0440": 0, "\u043a\u043e\u0442\u043e\u0440": [0, 3], "\u043d\u0430\u043f\u0440\u044f\u043c": [0, 3], "\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440": [0, 3], "pandas": [0, 2, 3], "dataframe": [0, 2, 3], "find_securities": 0, "string": 0, "columns": [0, 2], "tuple": 0, "none": [0, 2], "secid": [0, 2], "regnumber": [0, 2], "\u043d\u0430\u0439\u0442": 0, "\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442": [0, 1], "\u0447\u0430\u0441\u0442": [0, 3], "\u043a\u043e\u0434": 0, "\u043d\u0430\u0437\u0432\u0430\u043d": 0, "isin": 0, "\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440": 0, "\u044d\u043c\u0438\u0442\u0435\u043d\u0442": 0, "\u043d\u043e\u043c\u0435\u0440": 0, "\u0433\u043e\u0441": 0, "\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446": 0, "\u043e\u0434\u0438\u043d": 0, "\u0432\u0430\u0440\u0438\u0430\u043d\u0442": 0, "\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d": [0, 3], "\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d": 0, "\u0443\u0437\u043d\u0430": 0, "\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449": 0, "\u0442\u0438\u043a\u0435\u0440": 0, "\u043f\u043e\u043c\u043e\u0449": [0, 3], "\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a": [0, 3], "\u043e\u0431": 0, "\u0438\u0441\u0442\u043e\u0440": [0, 2], "\u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a": [0, 2], "\u0441\u043e\u0431\u0440\u0430": 0, "\u0434\u043b\u0438\u043d": 0, "\u0432\u0441\u0435\u0445": 0, "5": 0, "\u043a\u043e\u0440\u0442\u0435\u0436": 0, "\u0441\u0442\u043e\u043b\u0431\u0446": [0, 1], "\u0437\u0430\u0433\u0440\u0443\u0437": 0, "\u0443\u043c\u043e\u043b\u0447\u0430\u043d": 0, "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d": 0, "\u0435\u0441\u043b": 0, "\u043f\u0443\u0441\u0442": [0, 1], "\u0438\u043b": 0, "\u0442\u043e": 0, "\u0437\u0430\u0433\u0440\u0443\u0436\u0430": [0, 1], "\u0432\u0441\u0435": 0, "find_security_description": 0, "security": 0, "name": 0, "title": 0, "value": [0, 2], "\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446": [0, 1], "\u0434\u0430\u0442": 0, "\u043d\u0430\u0447\u0430": [0, 3], "\u0442\u043e\u0440\u0433": [0, 2], "13": [0, 3], "\u0446\u0435\u043d": 0, "\u0431\u0443\u043c\u0430\u0433": 0, "\u043a\u0440\u0430\u0442\u043a": 0, "\u043d\u0430": [0, 3], "\u0440\u0443\u0441\u0441\u043a": 0, "\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b": 0, "\u0444\u043e\u0440\u043c\u0438\u0440": 0, "\u0444\u043e\u0440\u043c\u0430\u0442": 0, "hlocv": 0, "\u043f\u0440\u0438": [0, 3], "\u044d\u0442": 0, "\u0438\u0441\u043f\u043e\u043b\u044c\u0437": 0, "\u0443\u0441\u043b\u043e\u0432\u043d": 0, "\u0447\u0438\u0441\u043b\u043e\u0432": 0, "1": [0, 2, 3], "\u043c\u0438\u043d\u0443\u0442": 0, "10": [0, 2], "60": 0, "\u0447\u0430\u0441": 0, "24": 0, "\u0434\u0435\u043d": 0, "7": [0, 2], "\u043d\u0435\u0434\u0435\u043b": 0, "31": 0, "\u043c\u0435\u0441\u044f\u0446": 0, "4": [0, 2], "\u043a\u0432\u0430\u0440\u0442\u0430": 0, "\u0440\u0430\u0437\u043d": 0, "\u0441\u0432\u0435\u0447\u0435\u043a": 0, "\u0437\u0430": 0, "\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b": 0, "\u0443\u0442\u043e\u0447\u043d": [0, 1], "\u043c\u043e\u0436\u043d": 0, "get_market_candle_borders": 0, "get_board_candle_borders": 0, "\u0430": [0, 2], "get_market_candles": [0, 1], "get_board_candles": [0, 1], "\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443": 0, "\u0440\u0430\u0437\u043c\u0435\u0440": 0, "shares": [0, 2], "stock": [0, 2], "\u0442\u0430\u0431\u043b\u0438\u0446": [0, 1], "\u0441\u0432\u0435\u0447": 0, "\u0440\u0430\u0437\u043b\u0438\u0447\u043d": 0, "\u0440\u044b\u043d\u043a": 0, "\u0440\u0435\u0436\u0438\u043c": [0, 2], "156": 0, "\u0440\u044b\u043d\u043e\u043a": 0, "\u0430\u043a\u0446": [0, 2, 3], "\u0434\u0432\u0438\u0436\u043e\u043a": 0, "tqbr": [0, 2], "\u0443\u043a\u0430\u0437\u0430": 0, "48": [0, 2], "\u0440\u0435\u0436": 0, "\u043e\u0441\u043d\u043e\u0432\u043d": 0, "t": 0, "2": [0, 2, 3], "interval": 0, "start": 0, "end": 0, "begin": 0, "open": 0, "close": [0, 2], "high": 0, "low": 0, "\u0438\u043d\u0442\u0435\u0440\u0432\u0430": 0, "\u0442\u043e\u0440\u0433\u043e\u0432\u043b": 0, "\u0438\u0434\u0435\u0442": 0, "\u0432\u0440\u0435\u043c\u0435\u043d": 0, "\u043c\u043e\u0436\u0435\u0442": [0, 3], "\u0431\u044b\u0442": [0, 3], "\u0432\u044b\u0434\u0430": 0, "\u043a\u0430\u0436\u0434": 0, "\u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d": 0, "\u0442\u0430\u043a": 0, "\u0441\u0438\u0442\u0443\u0430\u0446": 0, "\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442": 0, "\u0434\u043d\u044f": 0, "\u043f\u0435\u0440\u0438\u043e\u0434": 0, "\u043a\u043e\u0433\u0434": 0, "\u043c\u0435\u043d\u044f": 0, "155": 0, "\u0446\u0435\u043b": 0, "\u0447\u0438\u0441\u043b": 0, "\u0432\u0438\u0434": 0, "\u0433\u0433\u0433\u0433": 0, "\u043c\u043c": 0, "\u0434\u0434": 0, "\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432": 0, "\u0431\u0443\u0434\u0443\u0442": 0, "\u0437\u0430\u0433\u0440\u0443\u0436": 0, "\u0434\u043e": 0, "\u043a\u043e\u043d\u0446": 0, "\u0442\u0435\u043a\u0443\u0449": 0, "\u043d\u0435": 0, "\u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d": 0, "\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430": 0, "\u043c\u043e\u043c\u0435\u043d\u0442": 0, "46": 0, "\u043e\u0442\u043b\u0438\u0447": 0, "\u043e\u0442": 0, "\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f": 0, "\u043c\u043d\u043e\u0433": 0, "\u0438\u043c\u0435\u044e\u0442": 0, "\u0431\u043e\u043b": 0, "\u0433\u043b\u0443\u0431\u043e\u043a": 0, "get_board_dates": 0, "\u043f\u043e\u0437\u0432\u043e\u043b\u044f": [0, 3], "\u043f\u0440\u043e\u0432\u0435\u0440": 0, "\u043a\u0430\u043a": 0, "get_board_securities": 0, "\u043e": [0, 3], "\u043b\u043e\u0442": 0, "\u043f\u0440\u043e\u0447": 0, "\u0432\u0441\u0435\u043c": 0, "\u0442\u043e\u0440\u0433\u0443\u0435\u043c": [0, 3], "\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d": 0, "get_market_history": 0, "get_board_history": [0, 2], "\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d": 0, "\u0437\u0430\u0434\u0430": 0, "26": 0, "\u043e\u0434\u043d": 0, "\u044d\u043b\u0435\u043c\u0435\u043d\u0442": 0, "\u043a\u043b\u044e\u0447": 0, "from": 0, "till": 0, "table": 0, "lotsize": [0, 2], "shortname": [0, 2], "\u0441\u043e": 0, "\u0432\u0435\u0440\u043d\u0443\u0442": 0, "marketdata": 0, "boardid": [0, 2], "tradedate": [0, 2], "volume": [0, 2], "\u043f\u0440\u0438\u0445\u043e\u0434": 0, "\u0448\u043b\u0438": 0, "63": 0, "\u0437\u0430\u043a\u0440\u044b\u0442": 0, "\u043e\u0431\u044a": 0, "\u0448\u0442\u0443\u043a": 0, "\u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442": 0, "65": 0, "\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d": 0, "\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c": [0, 3], "\u043f\u0435\u0440\u0435\u0434\u0430": 0, "\u043a\u043b\u0438\u0435\u043d\u0442": [0, 3], "\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d": [0, 1], "url": 0, "\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d": [0, 3], "\u043f\u043e\u043b\u043d": [0, 3], "\u0432\u043e\u0437\u043c\u043e\u0436\u043d": [0, 1], "\u043a": [0, 3], "\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d": [0, 3], "\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432": [0, 3], "\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a": [0, 3], "class": [0, 2], "issclient": [0, 2, 3], "query": 0, "\u0431\u0430\u0437\u043e\u0432": 0, "\u043a\u043b\u0430\u0441\u0441": 0, "iterable": 0, "\u0440\u0430\u0431\u043e\u0442": [0, 3], "requests": [0, 2], "\u043f\u0440\u043e\u0441\u0442": 0, "\u043e\u0442\u0432\u0435\u0442": 0, "\u043c\u0435\u0442\u043e\u0434": 0, "get": [0, 2], "\u0441\u043e\u0441\u0442\u043e\u044f": 0, "\u0431\u043b\u043e\u043a": 0, "\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430": 0, "\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b": 0, "\u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c": 0, "\u043e\u0442\u0434\u0435\u043b\u044c\u043d": 0, "get_all": 0, "\u0438\u0445": [0, 3], "\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a": 0, "\u0441\u0431\u043e\u0440": 0, "\u0437\u0430\u0433\u0440\u0443\u0437\u043a": 0, "\u0434\u043e\u0437\u0430\u0433\u0440\u0443\u0437\u043a": 0, "\u043d\u0430\u0447\u0430\u043b\u044c\u043d": [0, 1], "\u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d": 0, "\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432": 0, "\u044f\u0432\u043b\u044f": 0, "\u0441\u043f\u0438\u0441\u043a": 0, "\u0441\u043e\u0431\u0438\u0440\u0430": 0, "\u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d": 0, "\u0434\u043e\u0431\u0430\u0432\u043b": 1, "\u0437\u0430\u043f\u0440\u043e\u0441": [1, 3], "\u0441\u043e\u0441\u0442\u0430\u0432": [0, 1], "\u0438\u043d\u0434\u0435\u043a\u0441": [0, 1], "\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a": 1, "\u043c\u0438\u043d\u043e\u0440\u043d": 1, "\u043f\u0440\u0430\u0432\u043a": 1, "\u0432\u044b\u0431\u043e\u0440": 1, "\u0442\u0438\u043f": 1, "\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442": 1, "\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d": 1, "readme": 1, "\u0432\u0435\u0440\u0441": 1, "pip": 2, "install": 2, "sngsp": 2, "import": 2, "as": 2, "pd": 2, "with": 2, "data": 2, "df": 2, "set_index": 2, "inplace": 2, "true": 2, "print": 2, "head": 2, "n": 2, "tail": 2, "info": 2, "2014": 2, "06": 2, "09": [2, 3], "27": 2, "12674200": 2, "3": [2, 3], "484352e": 2, "08": 2, "55": 2, "14035900": 2, "856417e": 2, "11": [2, 3], "15": [2, 3], "27208800": 2, "602146e": 2, "16": 2, "68059900": 2, "913160e": 2, "17": 2, "20": [2, 3], "22101600": 2, "6": 2, "292844e": 2, "2019": [2, 3], "04": [2, 3], "38": 2, "060": 2, "243010500": 2, "9": 2, "348435e": 2, "05": 2, "36": 2, "140": 2, "129366600": 2, "704949e": 2, "35": 2, "475": 2, "62389000": 2, "201887e": 2, "34": 2, "570": 2, "54331300": 2, "905837e": 2, "250": 2, "45966000": 2, "605849e": 2, "core": 2, "frame": 2, "index": [0, 2], "1326": 2, "entries": 2, "to": 2, "total": 2, "non": 2, "null": 2, "object": 2, "float64": 2, "int64": 2, "dtypes": 2, "memory": 2, "usage": 2, "51": 2, "8": 2, "kb": 2, "request_url": 2, "json": 2, "arguments": 2, "abrd": 2, "02": [2, 3], "12500": 2, "a": 2, "\u0430\u0431\u0440\u0430\u0443\u0434\u044e\u0440\u0441": 2, "afks": 2, "01669": 2, "100": 2, "\u0441\u0438\u0441\u0442\u0435\u043c": 2, "aflt": 2, "01": 2, "00010": 2, "\u0430\u044d\u0440\u043e\u0444\u043b\u043e\u0442": 2, "agro": 2, "\u0433\u0434\u0440": 2, "akrn": 2, "03": [2, 3], "00207": 2, "\u0430\u043a\u0440\u043e\u043d": 2, "yndx": 2, "yandex": 2, "cla": 2, "yrsb": 2, "50099": 2, "\u0442\u043d\u0441\u044d\u043d\u044f\u0440": 2, "yrsbp": 2, "\u043f": 2, "zill": 2, "00036": 2, "\u0437\u0438\u043b": 2, "zvez": 2, "00169": 2, "d": 2, "1000": 2, "\u0437\u0432\u0435\u0437\u0434": 2, "264": 2, "255": 2, "\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446": 3, "informational": 3, "statistical": 3, "server": 3, "\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430": 3, "\u0444\u0443\u043d\u043a\u0446": 3, "\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446": 3, "\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a": 3, "\u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a": 3, "\u0431\u0430\u0437\u0438\u0440": 3, "\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d": 3, "\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f": 3, "\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d": 3, "\u043f\u043e\u044d\u0442": 3, "\u043b\u0435\u0433\u043a": 3, "\u0440\u0430\u0441\u0448\u0438\u0440": 3, "\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d": 3, "\u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437": 3, "issues": 3, "github": 3, "\u0443\u043a\u0430\u0437\u0430\u043d": 3, "\u0441\u0441\u044b\u043b\u043a": 3, "\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a": 3, "\u043f\u0440\u0438\u043c\u0435\u0440": 3, "\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a": 3, "\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d": 3, "\u0434\u0430\u043d": 3, "\u043f\u043e": 3, "\u0441\u0432\u0435\u0447\u043a": 3, "\u0434\u043d\u0435\u0432\u043d": 3, "\u0438\u0437\u043c\u0435\u043d\u0435\u043d": 3, "0": 3, "2023": 3, "2020": 3, "12": 3, "get_index_tickers": 0, "date": 0, "ticker": 0, "tradingsession": 0, "148": 0, "imoex": 0, "statistics": 0, "analytics": 0, "\u043f\u043e\u043a\u0430\u0437\u0430": 0, "\u0442\u043e\u043b\u044c\u043a": 0, "\u0430\u043a\u0442\u0438\u0432\u043d": 0, "\u0442\u043e\u0433\u0434": 0, "\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430": 0, "\u0431\u044b\u043b": 0, "\u0432\u0435\u0440\u043d\u0435\u0442": 0}, "objects": {"apimoex": [[0, 0, 1, "", "ISSClient"], [0, 2, 1, "", "find_securities"], [0, 2, 1, "", "find_security_description"], [0, 2, 1, "", "get_board_candle_borders"], [0, 2, 1, "", "get_board_candles"], [0, 2, 1, "", "get_board_dates"], [0, 2, 1, "", "get_board_history"], [0, 2, 1, "", "get_board_securities"], [0, 2, 1, "", "get_index_tickers"], [0, 2, 1, "", "get_market_candle_borders"], [0, 2, 1, "", "get_market_candles"], [0, 2, 1, "", "get_market_history"], [0, 2, 1, "", "get_reference"]], "apimoex.ISSClient": [[0, 1, 1, "", "get"], [0, 1, 1, "", "get_all"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:function"}, "objnames": {"0": ["py", "class", "Python \u043a\u043b\u0430\u0441\u0441"], "1": ["py", "method", "Python \u043c\u0435\u0442\u043e\u0434"], "2": ["py", "function", "Python \u0444\u0443\u043d\u043a\u0446\u0438\u044f"]}, "titleterms": {"\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a": 0, "api": [0, 3], "\u0444\u0443\u043d\u043a\u0446": 0, "\u0437\u0430\u043f\u0440\u043e\u0441": [0, 2], "\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d": 0, "\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446": 0, "\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a": 0, "\u0434\u0430\u043d": 0, "\u043f\u043e": 0, "\u0441\u0432\u0435\u0447\u043a": 0, "\u0434\u043d\u0435\u0432\u043d": 0, "\u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a": 0, "\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446": [0, 2], "\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d": 0, "\u0441\u043f\u0438\u0441\u043e\u043a": 1, "\u0438\u0437\u043c\u0435\u043d\u0435\u043d": 1, "1": 1, "3": 1, "0": 1, "2023": 1, "04": 1, "20": 1, "2": 1, "2020": 1, "02": 1, "03": 1, "2019": 1, "09": 1, "15": 1, "13": 1, "12": 1, "11": 1, "\u043d\u0430\u0447\u0430": 2, "\u0440\u0430\u0431\u043e\u0442": 2, "\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a": 2, "\u043f\u0440\u0438\u043c\u0435\u0440": 2, "\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d": 2, "\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430": 2, "\u0441": 2, "\u043f\u043e\u043c\u043e\u0449": 2, "\u043a\u043b\u0438\u0435\u043d\u0442": 2, "moex": 3, "iss": 3, "\u043e\u0441\u043d\u043e\u0432\u043d": 3, "\u0432\u043e\u0437\u043c\u043e\u0436\u043d": 3, "\u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d": 3}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439": [[1, "id1"]], "1.3.0 (2023-04-20)": [[1, "id2"]], "1.2.0 (2020-02-03)": [[1, "id3"]], "1.1.2 (2019-09-15)": [[1, "id4"]], "1.1.1 (2019-09-13)": [[1, "id5"]], "1.1.0 (2019-09-13)": [[1, "id6"]], "1.0.2 (2019-09-12)": [[1, "id7"]], "1.0.1 (2019-09-11)": [[1, "id8"]], "1.0.0 (2019-09-11)": [[1, "id9"]], "\u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b": [[2, "id1"]], "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430": [[2, "id2"]], "\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432": [[2, "id3"]], "\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0438\u0435\u043d\u0442\u0430": [[2, "id4"]], "MOEX ISS API": [[3, "moex-iss-api"]], "\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438": [[3, "id1"]], "\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435": [[3, "id4"]], "\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a API": [[0, "api"]], "\u0424\u0443\u043d\u043a\u0446\u0438\u0438-\u0437\u0430\u043f\u0440\u043e\u0441\u044b": [[0, "id1"]], "\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f": [[0, "id2"]], "\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0432\u0435\u0447\u043a\u0430\u043c": [[0, "id3"]], "\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0434\u043d\u0435\u0432\u043d\u044b\u043c \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0430\u043c": [[0, "id4"]], "\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430": [[0, "id5"]]}, "indexentries": {"issclient (\u043a\u043b\u0430\u0441\u0441 \u0432 apimoex)": [[0, "apimoex.ISSClient"]], "find_securities() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.find_securities"]], "find_security_description() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.find_security_description"]], "get() (\u043c\u0435\u0442\u043e\u0434 apimoex.issclient)": [[0, "apimoex.ISSClient.get"]], "get_all() (\u043c\u0435\u0442\u043e\u0434 apimoex.issclient)": [[0, "apimoex.ISSClient.get_all"]], "get_board_candle_borders() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_board_candle_borders"]], "get_board_candles() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_board_candles"]], "get_board_dates() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_board_dates"]], "get_board_history() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_board_history"]], "get_board_securities() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_board_securities"]], "get_index_tickers() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_index_tickers"]], "get_market_candle_borders() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_market_candle_borders"]], "get_market_candles() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_market_candles"]], "get_market_history() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_market_history"]], "get_reference() (\u0432 \u043c\u043e\u0434\u0443\u043b\u0435 apimoex)": [[0, "apimoex.get_reference"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["api", "change_log", "getting_started", "index"], "filenames": ["api.rst", "change_log.rst", "getting_started.rst", "index.rst"], "titles": ["\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a API", "\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439", "\u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b", "MOEX ISS API"], "terms": {"\u0438\u0437": 0, "\u0440\u0430\u0437\u0434\u0435\u043b": 0, "\u043d\u043e\u0441": 0, "\u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d": 0, "\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440": 0, "\u0438": [0, 1, 3], "\u043d\u0443\u0436\u043d": 0, "\u0434\u043b\u044f": [0, 1], "\u043f\u043e\u043b\u0443\u0447\u0435\u043d": [0, 1], "\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d": 0, "\u043e\u0441\u0442\u0430\u043b\u044c\u043d": 0, "apimoex": [0, 2], "get_reference": 0, "session": [0, 2], "placeholder": 0, "str": 0, "boards": [0, 2], "list": 0, "dict": 0, "int": 0, "float": 0, "\u043f\u043e\u043b\u0443\u0447": 0, "\u043f\u0435\u0440\u0435\u0447\u0435\u043d": [0, 2, 3], "\u0434\u043e\u0441\u0442\u0443\u043f\u043d": [0, 3], "\u0437\u043d\u0430\u0447\u0435\u043d": 0, "\u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440": 0, "\u0432": [0, 1, 2, 3], "\u0430\u0434\u0440\u0435\u0441": 0, "\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440": 0, "\u043e\u043f\u0438\u0441\u0430\u043d": [0, 2, 3], "https": [0, 2], "iss": [0, 2], "moex": [0, 2], "com": [0, 2], "reference": 0, "32": 0, "\u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432": 0, "\u0441\u043b\u0435\u0434": 0, "engines": [0, 2], "engine": 0, "markets": [0, 2], "market": 0, "board": 0, "securities": [0, 2], "\u0441": [0, 1, 3], "28": [0, 2], "\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440": 0, "\u0441\u0435\u0441\u0441": 0, "\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442": 0, "\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d": 0, "\u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d": 0, "boardgroups": 0, "durations": 0, "securitytypes": 0, "securitygroups": 0, "securitycollections": 0, "\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442": [0, 3], "\u0441\u043f\u0438\u0441\u043e\u043a": [0, 3], "\u0441\u043b\u043e\u0432\u0430\u0440": 0, "\u043a\u043e\u0442\u043e\u0440": [0, 3], "\u043d\u0430\u043f\u0440\u044f\u043c": [0, 3], "\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440": [0, 3], "pandas": [0, 2, 3], "dataframe": [0, 2, 3], "find_securities": 0, "string": 0, "columns": [0, 2], "tuple": 0, "none": [0, 2], "secid": [0, 2], "regnumber": [0, 2], "\u043d\u0430\u0439\u0442": 0, "\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442": [0, 1], "\u0447\u0430\u0441\u0442": [0, 3], "\u043a\u043e\u0434": 0, "\u043d\u0430\u0437\u0432\u0430\u043d": 0, "isin": 0, "\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440": 0, "\u044d\u043c\u0438\u0442\u0435\u043d\u0442": 0, "\u043d\u043e\u043c\u0435\u0440": 0, "\u0433\u043e\u0441": 0, "\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446": 0, "\u043e\u0434\u0438\u043d": 0, "\u0432\u0430\u0440\u0438\u0430\u043d\u0442": 0, "\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d": [0, 3], "\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d": 0, "\u0443\u0437\u043d\u0430": 0, "\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449": 0, "\u0442\u0438\u043a\u0435\u0440": 0, "\u043f\u043e\u043c\u043e\u0449": [0, 3], "\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a": [0, 3], "\u043e\u0431": 0, "\u0438\u0441\u0442\u043e\u0440": [0, 2], "\u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a": [0, 2], "\u0441\u043e\u0431\u0440\u0430": 0, "\u0434\u043b\u0438\u043d": 0, "\u0432\u0441\u0435\u0445": 0, "5": 0, "\u043a\u043e\u0440\u0442\u0435\u0436": 0, "\u0441\u0442\u043e\u043b\u0431\u0446": [0, 1], "\u0437\u0430\u0433\u0440\u0443\u0437": 0, "\u0443\u043c\u043e\u043b\u0447\u0430\u043d": 0, "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d": 0, "\u0435\u0441\u043b": 0, "\u043f\u0443\u0441\u0442": [0, 1], "\u0438\u043b": 0, "\u0442\u043e": 0, "\u0437\u0430\u0433\u0440\u0443\u0436\u0430": [0, 1], "\u0432\u0441\u0435": 0, "find_security_description": 0, "security": 0, "name": 0, "title": 0, "value": [0, 2], "\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446": [0, 1], "\u0434\u0430\u0442": 0, "\u043d\u0430\u0447\u0430": [0, 3], "\u0442\u043e\u0440\u0433": [0, 2], "13": [0, 3], "\u0446\u0435\u043d": 0, "\u0431\u0443\u043c\u0430\u0433": 0, "\u043a\u0440\u0430\u0442\u043a": 0, "\u043d\u0430": [0, 1, 3], "\u0440\u0443\u0441\u0441\u043a": 0, "\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b": 0, "get_index_tickers": 0, "index": [0, 2], "date": 0, "ticker": 0, "from": 0, "till": 0, "tradingsession": 0, "stock": [0, 2], "\u0441\u043e\u0441\u0442\u0430\u0432": [0, 1], "\u0443\u043a\u0430\u0437\u0430": 0, "\u0438\u043d\u0434\u0435\u043a\u0441": [0, 1], "\u0437\u0430": 0, "148": 0, "statistics": 0, "analytics": 0, "imoex": 0, "\u0432\u0438\u0434": 0, "\u0433\u0433\u0433\u0433": 0, "\u043c\u043c": 0, "\u0434\u0434": 0, "\u0431\u0443\u0434\u0443\u0442": 0, "\u043f\u043e\u043a\u0430\u0437\u0430": 0, "\u0442\u043e\u043b\u044c\u043a": 0, "\u0430\u043a\u0442\u0438\u0432\u043d": 0, "\u0442\u043e\u0433\u0434": 0, "\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430": 0, "\u0434\u0435\u043d": 0, "\u043d\u0435": 0, "\u0431\u044b\u043b": 0, "\u0432\u0435\u0440\u043d\u0435\u0442": 0, "\u043f\u0440\u0438": [0, 3], "\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432": 0, "\u0437\u0430\u0433\u0440\u0443\u0436": 0, "\u0440\u0435\u0436": 0, "\u0437\u0430\u043a\u0440\u044b\u0442": 0, "\u043e\u0431\u044a": 0, "\u0448\u0442\u0443\u043a": 0, "\u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442": 0, "\u0440\u044b\u043d\u043e\u043a": 0, "\u0434\u0432\u0438\u0436\u043e\u043a": 0, "\u0430\u043a\u0446": [0, 2, 3], "\u0444\u043e\u0440\u043c\u0438\u0440": 0, "\u0444\u043e\u0440\u043c\u0430\u0442": 0, "hlocv": 0, "\u044d\u0442": 0, "\u0438\u0441\u043f\u043e\u043b\u044c\u0437": 0, "\u0443\u0441\u043b\u043e\u0432\u043d": 0, "\u0447\u0438\u0441\u043b\u043e\u0432": 0, "1": [0, 2, 3], "\u043c\u0438\u043d\u0443\u0442": 0, "10": [0, 1, 2], "60": 0, "\u0447\u0430\u0441": 0, "24": 0, "7": [0, 2], "\u043d\u0435\u0434\u0435\u043b": 0, "31": 0, "\u043c\u0435\u0441\u044f\u0446": 0, "4": [0, 2, 3], "\u043a\u0432\u0430\u0440\u0442\u0430": 0, "\u0440\u0430\u0437\u043d": 0, "\u0441\u0432\u0435\u0447\u0435\u043a": [0, 1], "\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b": 0, "\u0443\u0442\u043e\u0447\u043d": [0, 1], "\u043c\u043e\u0436\u043d": 0, "get_market_candle_borders": 0, "get_board_candle_borders": 0, "\u0430": [0, 2], "get_market_candles": [0, 1], "get_board_candles": [0, 1], "\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443": 0, "\u0440\u0430\u0437\u043c\u0435\u0440": 0, "shares": [0, 2], "\u0442\u0430\u0431\u043b\u0438\u0446": [0, 1], "\u0441\u0432\u0435\u0447": 0, "\u0440\u0430\u0437\u043b\u0438\u0447\u043d": 0, "\u0440\u044b\u043d\u043a": 0, "\u0440\u0435\u0436\u0438\u043c": [0, 2], "156": 0, "tqbr": [0, 2], "48": [0, 2], "\u043e\u0441\u043d\u043e\u0432\u043d": 0, "t": 0, "2": [0, 2, 3], "interval": 0, "start": 0, "end": 0, "begin": 0, "open": 0, "close": [0, 2], "high": 0, "low": 0, "volume": [0, 1, 2], "\u0438\u043d\u0442\u0435\u0440\u0432\u0430": 0, "\u0442\u043e\u0440\u0433\u043e\u0432\u043b": 0, "\u0438\u0434\u0435\u0442": 0, "\u0432\u0440\u0435\u043c\u0435\u043d": 0, "\u043c\u043e\u0436\u0435\u0442": [0, 3], "\u0431\u044b\u0442": [0, 3], "\u0432\u044b\u0434\u0430": 0, "\u043a\u0430\u0436\u0434": 0, "\u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d": 0, "\u0442\u0430\u043a": 0, "\u0441\u0438\u0442\u0443\u0430\u0446": 0, "\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442": 0, "\u0434\u043d\u044f": 0, "\u043f\u0435\u0440\u0438\u043e\u0434": 0, "\u043a\u043e\u0433\u0434": 0, "\u043c\u0435\u043d\u044f": 0, "155": 0, "\u0446\u0435\u043b": 0, "\u0447\u0438\u0441\u043b": 0, "\u0434\u043e": 0, "\u043a\u043e\u043d\u0446": 0, "\u0442\u0435\u043a\u0443\u0449": 0, "\u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d": 0, "\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430": 0, "\u043c\u043e\u043c\u0435\u043d\u0442": 0, "46": 0, "\u043e\u0442\u043b\u0438\u0447": 0, "\u043e\u0442": 0, "\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f": 0, "\u043c\u043d\u043e\u0433": 0, "\u0438\u043c\u0435\u044e\u0442": 0, "\u0431\u043e\u043b": 0, "\u0433\u043b\u0443\u0431\u043e\u043a": 0, "get_board_dates": 0, "\u043f\u043e\u0437\u0432\u043e\u043b\u044f": [0, 3], "\u043f\u0440\u043e\u0432\u0435\u0440": 0, "\u043a\u0430\u043a": 0, "get_board_securities": 0, "\u043e": [0, 3], "\u043b\u043e\u0442": 0, "\u043f\u0440\u043e\u0447": 0, "\u0432\u0441\u0435\u043c": 0, "\u0442\u043e\u0440\u0433\u0443\u0435\u043c": [0, 3], "\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d": 0, "get_market_history": 0, "get_board_history": [0, 2], "\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d": 0, "\u0437\u0430\u0434\u0430": 0, "26": 0, "\u043e\u0434\u043d": 0, "\u044d\u043b\u0435\u043c\u0435\u043d\u0442": 0, "\u043a\u043b\u044e\u0447": 0, "table": 0, "lotsize": [0, 2], "shortname": [0, 2], "\u0441\u043e": 0, "\u0432\u0435\u0440\u043d\u0443\u0442": 0, "marketdata": 0, "boardid": [0, 2], "tradedate": [0, 2], "\u043f\u0440\u0438\u0445\u043e\u0434": 0, "\u0448\u043b\u0438": 0, "63": 0, "65": 0, "\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d": 0, "\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c": [0, 3], "\u043f\u0435\u0440\u0435\u0434\u0430": 0, "\u043a\u043b\u0438\u0435\u043d\u0442": [0, 3], "\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d": [0, 1], "url": 0, "\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d": [0, 3], "\u043f\u043e\u043b\u043d": [0, 3], "\u0432\u043e\u0437\u043c\u043e\u0436\u043d": [0, 1], "\u043a": [0, 3], "\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d": [0, 3], "\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432": [0, 3], "\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a": [0, 3], "\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d": 1, "\u0432\u0435\u0440\u0441": 1, "python": 1, "\u043e\u0431\u043d\u043e\u0432\u043b": 1, "\u0437\u0430\u0432\u0438\u0441\u0438\u043c": 1, "\u043f\u0435\u0440\u0435\u0445\u043e\u0434": 1, "rye": 1, "ruff": 1, "pyright": 1, "\u0434\u043e\u0431\u0430\u0432\u043b": 1, "\u0437\u0430\u043f\u0440\u043e\u0441": [1, 3], "\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a": 1, "\u043c\u0438\u043d\u043e\u0440\u043d": 1, "\u043f\u0440\u0430\u0432\u043a": 1, "\u0432\u044b\u0431\u043e\u0440": 1, "\u0442\u0438\u043f": 1, "\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442": 1, "\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d": 1, "readme": 1, "\u043d\u0430\u0447\u0430\u043b\u044c\u043d": [0, 1], "pip": 2, "install": 2, "sngsp": 2, "import": 2, "requests": [0, 2], "as": 2, "pd": 2, "with": 2, "data": 2, "df": 2, "set_index": 2, "inplace": 2, "true": 2, "print": 2, "head": 2, "n": 2, "tail": 2, "info": 2, "2014": 2, "06": 2, "09": [2, 3], "27": 2, "12674200": 2, "3": [2, 3], "484352e": 2, "08": 2, "55": 2, "14035900": 2, "856417e": 2, "11": [2, 3], "15": [2, 3], "27208800": 2, "602146e": 2, "16": 2, "68059900": 2, "913160e": 2, "17": 2, "20": [2, 3], "22101600": 2, "6": 2, "292844e": 2, "2019": [2, 3], "04": [2, 3], "38": 2, "060": 2, "243010500": 2, "9": 2, "348435e": 2, "05": 2, "36": 2, "140": 2, "129366600": 2, "704949e": 2, "35": 2, "475": 2, "62389000": 2, "201887e": 2, "34": 2, "570": 2, "54331300": 2, "905837e": 2, "250": 2, "45966000": 2, "605849e": 2, "class": [0, 2], "core": 2, "frame": 2, "1326": 2, "entries": 2, "to": 2, "total": 2, "non": 2, "null": 2, "object": 2, "float64": 2, "int64": 2, "dtypes": 2, "memory": 2, "usage": 2, "51": 2, "8": 2, "kb": 2, "request_url": 2, "json": 2, "arguments": 2, "issclient": [0, 2, 3], "get": [0, 2], "abrd": 2, "02": [2, 3], "12500": 2, "a": 2, "\u0430\u0431\u0440\u0430\u0443\u0434\u044e\u0440\u0441": 2, "afks": 2, "01669": 2, "100": 2, "\u0441\u0438\u0441\u0442\u0435\u043c": 2, "aflt": 2, "01": [2, 3], "00010": 2, "\u0430\u044d\u0440\u043e\u0444\u043b\u043e\u0442": 2, "agro": 2, "\u0433\u0434\u0440": 2, "akrn": 2, "03": [2, 3], "00207": 2, "\u0430\u043a\u0440\u043e\u043d": 2, "yndx": 2, "yandex": 2, "cla": 2, "yrsb": 2, "50099": 2, "\u0442\u043d\u0441\u044d\u043d\u044f\u0440": 2, "yrsbp": 2, "\u043f": 2, "zill": 2, "00036": 2, "\u0437\u0438\u043b": 2, "zvez": 2, "00169": 2, "d": 2, "1000": 2, "\u0437\u0432\u0435\u0437\u0434": 2, "264": 2, "255": 2, "\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446": 3, "informational": 3, "statistical": 3, "server": 3, "\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430": 3, "\u0444\u0443\u043d\u043a\u0446": 3, "\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446": 3, "\u0438\u0445": [0, 3], "\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a": 3, "\u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a": 3, "\u0440\u0430\u0431\u043e\u0442": [0, 3], "\u0431\u0430\u0437\u0438\u0440": 3, "\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d": 3, "\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f": 3, "\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d": 3, "\u043f\u043e\u044d\u0442": 3, "\u043b\u0435\u0433\u043a": 3, "\u0440\u0430\u0441\u0448\u0438\u0440": 3, "\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d": 3, "\u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437": 3, "issues": 3, "github": 3, "\u0443\u043a\u0430\u0437\u0430\u043d": 3, "\u0441\u0441\u044b\u043b\u043a": 3, "\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a": 3, "\u043f\u0440\u0438\u043c\u0435\u0440": 3, "\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a": 3, "\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d": 3, "\u0434\u0430\u043d": 3, "\u043f\u043e": 3, "\u0441\u0432\u0435\u0447\u043a": 3, "\u0434\u043d\u0435\u0432\u043d": 3, "\u0438\u0437\u043c\u0435\u043d\u0435\u043d": 3, "0": 3, "2024": 3, "2023": 3, "2020": 3, "12": 3, "query": 0, "\u0431\u0430\u0437\u043e\u0432": 0, "\u043a\u043b\u0430\u0441\u0441": 0, "iterable": 0, "\u043f\u0440\u043e\u0441\u0442": 0, "\u043e\u0442\u0432\u0435\u0442": 0, "\u043c\u0435\u0442\u043e\u0434": 0, "\u0441\u043e\u0441\u0442\u043e\u044f": 0, "\u0431\u043b\u043e\u043a": 0, "\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430": 0, "\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b": 0, "\u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c": 0, "\u043e\u0442\u0434\u0435\u043b\u044c\u043d": 0, "get_all": 0, "\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a": 0, "\u0441\u0431\u043e\u0440": 0, "\u0437\u0430\u0433\u0440\u0443\u0437\u043a": 0, "\u0434\u043e\u0437\u0430\u0433\u0440\u0443\u0437\u043a": 0, "\u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d": 0, "\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432": 0, "\u044f\u0432\u043b\u044f": 0, "\u0441\u043f\u0438\u0441\u043a": 0, "\u0441\u043e\u0431\u0438\u0440\u0430": 0, "\u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d": 0}, "objects": {"apimoex": [[0, 0, 1, "", "ISSClient"], [0, 2, 1, "", "find_securities"], [0, 2, 1, "", "find_security_description"], [0, 2, 1, "", "get_board_candle_borders"], [0, 2, 1, "", "get_board_candles"], [0, 2, 1, "", "get_board_dates"], [0, 2, 1, "", "get_board_history"], [0, 2, 1, "", "get_board_securities"], [0, 2, 1, "", "get_index_tickers"], [0, 2, 1, "", "get_market_candle_borders"], [0, 2, 1, "", "get_market_candles"], [0, 2, 1, "", "get_market_history"], [0, 2, 1, "", "get_reference"]], "apimoex.ISSClient": [[0, 1, 1, "", "get"], [0, 1, 1, "", "get_all"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:function"}, "objnames": {"0": ["py", "class", "Python \u043a\u043b\u0430\u0441\u0441"], "1": ["py", "method", "Python \u043c\u0435\u0442\u043e\u0434"], "2": ["py", "function", "Python \u0444\u0443\u043d\u043a\u0446\u0438\u044f"]}, "titleterms": {"\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a": 0, "api": [0, 3], "\u0444\u0443\u043d\u043a\u0446": 0, "\u0437\u0430\u043f\u0440\u043e\u0441": [0, 2], "\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d": 0, "\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446": 0, "\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a": 0, "\u0434\u0430\u043d": 0, "\u043f\u043e": 0, "\u0441\u0432\u0435\u0447\u043a": 0, "\u0434\u043d\u0435\u0432\u043d": 0, "\u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a": 0, "\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446": [0, 2], "\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d": 0, "\u0441\u043f\u0438\u0441\u043e\u043a": 1, "\u0438\u0437\u043c\u0435\u043d\u0435\u043d": 1, "1": 1, "4": 1, "0": 1, "2024": 1, "01": 1, "3": 1, "2023": 1, "04": 1, "20": 1, "2": 1, "2020": 1, "02": 1, "03": 1, "2019": 1, "09": 1, "15": 1, "13": 1, "12": 1, "11": 1, "\u043d\u0430\u0447\u0430": 2, "\u0440\u0430\u0431\u043e\u0442": 2, "\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a": 2, "\u043f\u0440\u0438\u043c\u0435\u0440": 2, "\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d": 2, "\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430": 2, "\u0441": 2, "\u043f\u043e\u043c\u043e\u0449": 2, "\u043a\u043b\u0438\u0435\u043d\u0442": 2, "moex": 3, "iss": 3, "\u043e\u0441\u043d\u043e\u0432\u043d": 3, "\u0432\u043e\u0437\u043c\u043e\u0436\u043d": 3, "\u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d": 3}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"\u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b": [[2, "id1"]], "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430": [[2, "id2"]], "\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432": [[2, "id3"]], "\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0438\u0435\u043d\u0442\u0430": [[2, "id4"]], "MOEX ISS API": [[3, "moex-iss-api"]], "\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438": [[3, "id1"]], "\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435": [[3, "id4"]], "\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a API": [[0, "api"]], "\u0424\u0443\u043d\u043a\u0446\u0438\u0438-\u0437\u0430\u043f\u0440\u043e\u0441\u044b": [[0, "id1"]], "\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f": [[0, "id2"]], "\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0432\u0435\u0447\u043a\u0430\u043c": [[0, "id3"]], "\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0434\u043d\u0435\u0432\u043d\u044b\u043c \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0430\u043c": [[0, "id4"]], "\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430": [[0, "id5"]], "\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439": [[1, "id1"]], "1.4.0 (2024-01-11)": [[1, "id2"]], "1.3.0 (2023-04-20)": [[1, "id3"]], "1.2.0 (2020-02-03)": [[1, "id4"]], "1.1.2 (2019-09-15)": [[1, "id5"]], "1.1.1 (2019-09-13)": [[1, "id6"]], "1.1.0 (2019-09-13)": [[1, "id7"]], "1.0.2 (2019-09-12)": [[1, "id8"]], "1.0.1 (2019-09-11)": [[1, "id9"]], "1.0.0 (2019-09-11)": [[1, "id10"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/docs/change_log.rst b/docs/change_log.rst index 6999f8d..c42baf7 100755 --- a/docs/change_log.rst +++ b/docs/change_log.rst @@ -1,6 +1,13 @@ Список изменений ================ +1.4.0 (2024-01-11) +------------------ +* Минимальная версия Python 3.10 +* Обновлены зависимости +* Переход на rye, ruff и pyright +* Добавлен volume с запросы свечек + 1.3.0 (2023-04-20) ------------------ * Добавлен запрос для получения состава индекса diff --git a/docs/conf.py b/docs/conf.py index 7cc0334..088e99e 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -6,14 +6,11 @@ _route_path = os.path.abspath("../") sys.path.insert(0, _route_path) -_version_path = os.path.abspath(os.path.join(_route_path, _package_name, "__init__.py")) +_version_path = os.path.abspath(os.path.join(_route_path, "pyproject.toml")) with open(_version_path) as file: try: _version_info = re.search( - r"^__version__ = \"" - r"(?P\d+)" - r"\.(?P\d+)" - r"\.(?P\d+)\"$", + r"^version = \"" r"(?P\d+)" r"\.(?P\d+)" r"\.(?P\d+)\"$", file.read(), re.M, ).groupdict() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8ebb88c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,64 @@ +[project] +name = "apimoex" +version = "1.4.0" +description = "MOEX ISS API" +authors = [ + { name = "Mikhail Korotkov aka WLMike", email = "wlmike@gmail.com" } +] +dependencies = [ + "requests>=2.31.0", +] +readme = "README.rst" +requires-python = ">=3.10" +license = { text = "http://unlicense.org" } + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.rye] +managed = true +dev-dependencies = [ + "pandas>=2.1.4", + "pyright>=1.1.345", + "pytest>=7.4.4", + "pytest-cov>=4.1.0", + "ruff>=0.1.11", + "sphinx>=7.2.6", + "aiohttp_theme>=0.1.6", +] + +[tool.hatch.metadata] +allow-direct-references = true + +[tool.pyright] +verboseOutput = true +pythonVersion = "3.10" +typeCheckingMode = "strict" + +[tool.pytest.ini_options] +addopts = "--cov-report=term-missing --setup-show --verbose" + +[tool.coverage.run] +branch = true + +[tool.ruff] +line-length = 120 +select = ["ALL"] +fixable = ["ALL"] +fix = true + +ignore = [ + "ANN101", # Missing-type-self + "COM812", # Missing-trailing-comma - ruff format recommendations + "D203", # One-blank-line-before-class (D203) and no-blank-line-before-class (D211) are incompatible + "D213", # Multi-line-summary-first-line (D212) and multi-line-summary-second-line (D213) are incompatible + "EM101", # Exception must not use a string literal, assign to variable first - don't like many exceptions + "EM102", # Exception must not use an f-string literal, assign to variable first - don't like many exceptions + "ISC001", # Single-line-implicit-string-concatenation - ruff format recommendations + "PLR0913", # Too many arguments in function definition - required in this library + "RUF001", # Ambiguous-unicode-character-string - russian + "RUF002", # Ambiguous-unicode-character-docstring - russian + "RUF003", # Ambiguous-unicode-character-comment - russian + "TRY003", # Avoid specifying long messages outside the exception class - don't like many exceptions +] diff --git a/requirements-dev.lock b/requirements-dev.lock new file mode 100644 index 0000000..89c3a31 --- /dev/null +++ b/requirements-dev.lock @@ -0,0 +1,47 @@ +# generated by rye +# use `rye lock` or `rye sync` to update this lockfile +# +# last locked with the following flags: +# pre: false +# features: [] +# all-features: true + +-e file:. +aiohttp-theme==0.1.6 +alabaster==0.7.16 +babel==2.14.0 +certifi==2023.11.17 +charset-normalizer==3.3.2 +coverage==7.4.0 +docutils==0.20.1 +idna==3.6 +imagesize==1.4.1 +iniconfig==2.0.0 +jinja2==3.1.3 +markupsafe==2.1.3 +nodeenv==1.8.0 +numpy==1.26.3 +packaging==23.2 +pandas==2.1.4 +pluggy==1.3.0 +pygments==2.17.2 +pyright==1.1.345 +pytest==7.4.4 +pytest-cov==4.1.0 +python-dateutil==2.8.2 +pytz==2023.3.post1 +requests==2.31.0 +ruff==0.1.11 +six==1.16.0 +snowballstemmer==2.2.0 +sphinx==7.2.6 +sphinxcontrib-applehelp==1.0.7 +sphinxcontrib-devhelp==1.0.5 +sphinxcontrib-htmlhelp==2.0.4 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.6 +sphinxcontrib-serializinghtml==1.1.9 +tzdata==2023.4 +urllib3==2.1.0 +# The following packages are considered to be unsafe in a requirements file: +setuptools==69.0.3 diff --git a/requirements.lock b/requirements.lock new file mode 100644 index 0000000..d1fef82 --- /dev/null +++ b/requirements.lock @@ -0,0 +1,14 @@ +# generated by rye +# use `rye lock` or `rye sync` to update this lockfile +# +# last locked with the following flags: +# pre: false +# features: [] +# all-features: true + +-e file:. +certifi==2023.11.17 +charset-normalizer==3.3.2 +idna==3.6 +requests==2.31.0 +urllib3==2.1.0 diff --git a/requirements.txt b/requirements.txt deleted file mode 100755 index 8a5d274..0000000 --- a/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -requests -pytest -pytest-cov -sphinx -aiohttp_theme -pandas diff --git a/setup.py b/setup.py deleted file mode 100755 index ac8217a..0000000 --- a/setup.py +++ /dev/null @@ -1,51 +0,0 @@ -import pathlib -import re -import sys - -import setuptools - -name = "apimoex" -python_minimal = "3.6" - -if sys.version_info < tuple(int(i) for i in python_minimal.split(".")): - raise RuntimeError(f"{name} requires Python {python_minimal}+") - -with open(pathlib.Path(__file__).parent / "apimoex" / "__init__.py") as file: - try: - version = re.search(r"^__version__ = \"(.+)\"$", file.read(), re.M)[1] - except IndexError: - raise RuntimeError("Unable to determine version.") - -with open("README.rst") as file: - long_description = file.read() - -setuptools.setup( - name=name, - version=version, - description="MOEX ISS API", - long_description=long_description, - long_description_content_type="text/x-rst", - url="https://wlm1ke.github.io/apimoex/", - author="Mikhail Korotkov aka WLMike", - author_email="wlmike@gmail.com", - license="http://unlicense.org", - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Environment :: Other Environment", - "Intended Audience :: Developers", - "License :: Public Domain", - "Natural Language :: Russian", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: Implementation :: CPython", - "Topic :: Utilities", - ], - keywords="moex iss api", - project_urls={"Source": "https://github.com/WLM1ke/apimoex"}, - packages=setuptools.find_packages(exclude=["tests"]), - install_requires=["requests"], - python_requires=f">={python_minimal}", -) diff --git a/tests/test_client.py b/tests/test_client.py index d83d218..7b7cc85 100755 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -143,9 +143,7 @@ def test_wrong_cursor_size(monkeypatch, session): monkeypatch.setattr(iss, "get", lambda x: fake_cursor) with pytest.raises(client.ISSMoexError) as error: iss.get_all() - assert f"Некорректные данные history.cursor [0, 1] для начальной позиции 0" in str( - error.value - ) + assert f"Некорректные данные history.cursor [0, 1] для начальной позиции 0" in str(error.value) def test_wrong_cursor_index(monkeypatch, session): @@ -155,6 +153,4 @@ def test_wrong_cursor_index(monkeypatch, session): monkeypatch.setattr(iss, "get", lambda x: fake_cursor) with pytest.raises(client.ISSMoexError) as error: iss.get_all() - assert "Некорректные данные history.cursor [{'INDEX': 1}] для начальной позиции 0" in str( - error.value - ) + assert "Некорректные данные history.cursor [{'INDEX': 1}] для начальной позиции 0" in str(error.value) diff --git a/tests/test_requests.py b/tests/test_requests.py index 3868b2d..d9bbf52 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -3,8 +3,7 @@ import pytest from requests import Session -from apimoex import client -from apimoex import requests +from apimoex import client, requests @pytest.fixture(scope="module", name="session") @@ -36,42 +35,28 @@ def test_make_query_full(): assert query["interval"] == 60 assert query["from"] == "2019-10-09" assert query["till"] == "2019-11-12" - assert query["iss.only"] == f"new_table,history.cursor" + assert query["iss.only"] == "new_table,history.cursor" assert query["new_table.columns"] == "4,a" def test_get_table(): # noinspection PyProtectedMember - query = requests._get_table( - dict(a="b"), "a" - ) + query = requests._get_table(dict(a="b"), "a") assert query == "b" def test_get_table_notable(): with pytest.raises(client.ISSMoexError) as error: # noinspection PyProtectedMember - requests._get_table( - dict(a="b"), "b" - ) + requests._get_table(dict(a="b"), "b") assert "Отсутствует таблица b в данных" in str(error.value) def test_get_reference(session): data = requests.get_reference(session, "engines") assert isinstance(data, list) - assert len(data) == 9 - assert data == [ - {"id": 1, "name": "stock", "title": "Фондовый рынок и рынок депозитов"}, - {"id": 2, "name": "state", "title": "Рынок ГЦБ (размещение)"}, - {"id": 3, "name": "currency", "title": "Валютный рынок"}, - {"id": 4, "name": "futures", "title": "Срочный рынок"}, - {"id": 5, "name": "commodity", "title": "Товарный рынок"}, - {"id": 6, "name": "interventions", "title": "Товарные интервенции"}, - {"id": 7, "name": "offboard", "title": "ОТС-система"}, - {'id': 9, 'name': 'agro', 'title': 'Агро'}, - {'id': 1012, 'name': 'otc', 'title': 'ОТС с ЦК'} - ] + assert len(data) == 10 + assert data[0] == {"id": 1, "name": "stock", "title": "Фондовый рынок и рынок депозитов"} check_points = [ @@ -96,24 +81,24 @@ def test_find_security_description(session): assert len(data) == 19 assert data[8] == dict(name="ISSUEDATE", title="Дата начала торгов", value="2009-12-01") # data = [ - # {'name': 'SECID', 'title': 'Код ценной бумаги', 'value': 'IRAO'}, - # {'name': 'NAME', 'title': 'Полное наименование', 'value': '"Интер РАО" ПАО ао'}, - # {'name': 'SHORTNAME', 'title': 'Краткое наименование', 'value': 'ИнтерРАОао'}, - # {'name': 'ISIN', 'title': 'ISIN код', 'value': 'RU000A0JPNM1'}, - # {'name': 'REGNUMBER', 'title': 'Номер государственной регистрации', 'value': '1-04-33498-E'}, - # {'name': 'ISSUESIZE', 'title': 'Объем выпуска', 'value': '104400000000'}, - # {'name': 'FACEVALUE', 'title': 'Номинальная стоимость', 'value': '2.80977'}, - # {'name': 'FACEUNIT', 'title': 'Валюта номинала', 'value': 'SUR'}, - # {'name': 'ISSUEDATE', 'title': 'Дата начала торгов', 'value': '2009-12-01'}, - # {'name': 'LATNAME', 'title': 'Английское наименование', 'value': 'Inter RAO ao'}, - # {'name': 'LISTLEVEL', 'title': 'Уровень листинга', 'value': '1'}, - # {'name': 'ISQUALIFIEDINVESTORS', 'title': 'Бумаги для квалифицированных инвесторов', 'value': '0'}, - # {'name': 'MORNINGSESSION', 'title': 'Допуск к утренней дополнительной торговой сессии', 'value': '1'}, - # {'name': 'EVENINGSESSION', 'title': 'Допуск к вечерней дополнительной торговой сессии', 'value': '1'}, - # {'name': 'TYPENAME', 'title': 'Вид/категория ценной бумаги', 'value': 'Акция обыкновенная'}, - # {'name': 'GROUP', 'title': 'Код типа инструмента', 'value': 'stock_shares'}, - # {'name': 'TYPE', 'title': 'Тип бумаги', 'value': 'common_share'}, - # {'name': 'GROUPNAME', 'title': 'Типа инструмента', 'value': 'Акции'}, + # {'name': 'SECID', 'title': 'Код ценной бумаги', 'value': 'IRAO'}, + # {'name': 'NAME', 'title': 'Полное наименование', 'value': '"Интер РАО" ПАО ао'}, + # {'name': 'SHORTNAME', 'title': 'Краткое наименование', 'value': 'ИнтерРАОао'}, + # {'name': 'ISIN', 'title': 'ISIN код', 'value': 'RU000A0JPNM1'}, + # {'name': 'REGNUMBER', 'title': 'Номер государственной регистрации', 'value': '1-04-33498-E'}, + # {'name': 'ISSUESIZE', 'title': 'Объем выпуска', 'value': '104400000000'}, + # {'name': 'FACEVALUE', 'title': 'Номинальная стоимость', 'value': '2.80977'}, + # {'name': 'FACEUNIT', 'title': 'Валюта номинала', 'value': 'SUR'}, + # {'name': 'ISSUEDATE', 'title': 'Дата начала торгов', 'value': '2009-12-01'}, + # {'name': 'LATNAME', 'title': 'Английское наименование', 'value': 'Inter RAO ao'}, + # {'name': 'LISTLEVEL', 'title': 'Уровень листинга', 'value': '1'}, + # {'name': 'ISQUALIFIEDINVESTORS', 'title': 'Бумаги для квалифицированных инвесторов', 'value': '0'}, + # {'name': 'MORNINGSESSION', 'title': 'Допуск к утренней дополнительной торговой сессии', 'value': '1'}, + # {'name': 'EVENINGSESSION', 'title': 'Допуск к вечерней дополнительной торговой сессии', 'value': '1'}, + # {'name': 'TYPENAME', 'title': 'Вид/категория ценной бумаги', 'value': 'Акция обыкновенная'}, + # {'name': 'GROUP', 'title': 'Код типа инструмента', 'value': 'stock_shares'}, + # {'name': 'TYPE', 'title': 'Тип бумаги', 'value': 'common_share'}, + # {'name': 'GROUPNAME', 'title': 'Типа инструмента', 'value': 'Акции'}, # {'name': 'EMITTER_ID', 'title': 'Код эмитента', 'value': '2140'} # ] @@ -157,7 +142,7 @@ def test_get_market_candles_from_beginning(session): assert isinstance(data, list) assert len(data) > 500 df = pd.DataFrame(data) - assert df.columns.size == 6 + assert df.columns.size == 7 assert df.loc[0, "open"] == pytest.approx(141.55) assert df.loc[1, "close"] == pytest.approx(141.59) assert df.loc[2, "high"] == pytest.approx(142.4) @@ -167,17 +152,16 @@ def test_get_market_candles_from_beginning(session): def test_get_market_candles_to_end(session): - data = requests.get_market_candles(session, "LSRG", interval=4, start="2008-01-01") + data = requests.get_market_candles(session, "LSRG", interval=24, start="2020-08-20") assert isinstance(data, list) - assert len(data) > 47 - df = pd.DataFrame(data) - assert df.columns.size == 6 - assert df.loc[0, "open"] == pytest.approx(1130) - assert df.loc[1, "close"] == pytest.approx(970) - assert df.loc[2, "high"] == pytest.approx(1045) - assert df.loc[3, "low"] == pytest.approx(429.9) - assert df.loc[4, "value"] == pytest.approx(1109833660.9) - assert df.loc[6, "begin"] == "2012-07-01 00:00:00" + assert len(data) > 13 + assert len(data[0]) == 7 + assert data[0]["open"] == pytest.approx(775.4) + assert data[1]["close"] == pytest.approx(771.8) + assert data[2]["high"] == pytest.approx(779.8) + assert data[3]["low"] == pytest.approx(770.2) + assert data[4]["value"] == pytest.approx(59495740.6) + assert data[6]["begin"] == "2020-08-28 00:00:00" def test_get_market_candles_empty_history(session): @@ -191,7 +175,7 @@ def test_get_board_candles_from_beginning(session): assert isinstance(data, list) assert len(data) > 500 df = pd.DataFrame(data) - assert df.columns.size == 6 + assert df.columns.size == 7 assert df.loc[0, "open"] == pytest.approx(202.7) assert df.loc[1, "close"] == pytest.approx(204.12) assert df.loc[2, "high"] == pytest.approx(205) @@ -205,7 +189,7 @@ def test_get_board_candles_to_end(session): assert isinstance(data, list) assert len(data) > 52 df = pd.DataFrame(data) - assert df.columns.size == 6 + assert df.columns.size == 7 assert df.loc[0, "open"] == pytest.approx(0.152) assert df.loc[1, "close"] == pytest.approx(0.15689) assert df.loc[2, "high"] == pytest.approx(0.15998) @@ -218,10 +202,10 @@ def test_get_board_dates(session): data = requests.get_board_dates(session) assert isinstance(data, list) assert len(data) == 1 - assert isinstance(data[0]['from'], str) - assert isinstance(data[0]['till'], str) - assert len(data[0]['from']) == 10 - assert len(data[0]['till']) == 10 + assert isinstance(data[0]["from"], str) + assert isinstance(data[0]["till"], str) + assert len(data[0]["from"]) == 10 + assert len(data[0]["till"]) == 10 def test_get_board_securities(session): @@ -229,21 +213,13 @@ def test_get_board_securities(session): assert isinstance(data, list) assert len(data) > 200 df = pd.DataFrame(data) - df.set_index("SECID", inplace=True) + df = df.set_index("SECID") assert df.loc["AKRN", "SHORTNAME"] == "Акрон" assert df.loc["GAZP", "REGNUMBER"] == "1-02-00028-A" assert df.loc["TTLK", "LOTSIZE"] == 1000 assert df.loc["MRSB", "SHORTNAME"] == "МордЭнСб" assert df.loc["MRSB", "REGNUMBER"] == "1-01-55055-E" assert df.loc["MRSB", "LOTSIZE"] == 10000 - assert df.index[0] == "ABRD" - assert df["SHORTNAME"].iat[0] == "АбрауДюрсо" - assert df["REGNUMBER"].iat[0] == "1-02-12500-A" - assert df["LOTSIZE"].iat[0] == 10 - assert df["SHORTNAME"].iat[-1] == "ЗВЕЗДА ао" - assert df["REGNUMBER"].iat[-1] == "1-01-00169-D" - assert df["LOTSIZE"].iat[-1] == 1000 - assert df.index[-1] == "ZVEZ" def test_get_market_history_from_beginning(session): @@ -288,9 +264,10 @@ def test_get_board_history_to_end(session): assert df.at["2018-09-06", "CLOSE"] == pytest.approx(660) assert df.at["2018-08-28", "VOLUME"] == 47428 + def test_get_index_tickers(session): - data = requests.get_index_tickers(session, index='IMOEX', date='2023-03-03') + data = requests.get_index_tickers(session, index="IMOEX", date="2023-03-03") assert len(data) == 40 - assert data[15]['ticker'] == 'MAGN' - assert data[25]['till'] == '2023-03-03' - assert data[35]['tradingsession'] == 3 + assert data[15]["ticker"] == "MAGN" + assert data[25]["till"] == "2023-03-03" + assert data[35]["tradingsession"] == 3