async def find_securities( session: aiohttp.ClientSession, string: str, columns: Optional[Iterable[str]] = ("secid", "regnumber"), ) -> client.Table: """Найти инструменты по части Кода, Названию, ISIN, Идентификатору Эмитента, Номеру гос.регистрации. Один из вариантов использования - по регистрационному номеру узнать предыдущие тикеры эмитента, и с помощью нескольких запросов об истории котировок собрать длинную историю с использованием всех предыдущих тикеров. Описание запроса - https://iss.moex.com/iss/reference/5 :param session: Сессия http соединения. :param string: Часть Кода, Названия, ISIN, Идентификатора Эмитента, Номера гос.регистрации. :param columns: Кортеж столбцов, которые нужно загрузить - по умолчанию тикер и номер государственно регистрации. Если пустой или None, то загружаются все столбцы. :return: Список словарей, которые напрямую конвертируется в pandas.DataFrame. """ url = request_helpers.make_url(ending=SECURITIES) table = SECURITIES query = request_helpers.make_query(question=string, table=table, columns=columns) return await request_helpers.get_short_data(session, url, table, query)
def test_make_query_full(): query = request_helpers.make_query(start=1, end=2, table=3, columns=("4", )) assert isinstance(query, dict) assert len(query) == 4 assert query["from"] == 1 assert query["till"] == 2 assert query["iss.only"] == f"3,history.cursor" assert query[f"{3}.columns"] == "4"
async def get_board_history( session: aiohttp.ClientSession, security: str, start: Optional[str] = None, end: Optional[str] = None, columns: Optional[Iterable[str]] = ("BOARDID", "TRADEDATE", "CLOSE", "VOLUME", "VALUE"), board: str = DEFAULT_BOARD, market: str = DEFAULT_MARKET, engine: str = DEFAULT_ENGINE, ) -> client.Table: """Получить историю торгов для указанной бумаги в указанном режиме торгов за указанный интервал дат. Описание запроса - https://iss.moex.com/iss/reference/65 :param session: Сессия http соединения. :param security: Тикер ценной бумаги. :param start: Дата вида ГГГГ-ММ-ДД. При отсутствии данные будут загружены с начала истории. :param end: Дата вида ГГГГ-ММ-ДД. При отсутствии данные будут загружены до конца истории. :param columns: Кортеж столбцов, которые нужно загрузить - по умолчанию режим торгов, дата торгов, цена закрытия и объем в штуках и стоимости. Если пустой или None, то загружаются все столбцы. :param board: Режим торгов - по умолчанию основной режим торгов T+2. :param market: Рынок - по умолчанию акции. :param engine: Движок - по умолчанию акции. :return: Список словарей, которые напрямую конвертируется в pandas.DataFrame. """ url = request_helpers.make_url( history=True, engine=engine, market=market, board=board, security=security, ) table = "history" query = request_helpers.make_query(start=start, end=end, table=table, columns=columns) return await request_helpers.get_long_data(session, url, table, query)
async def get_board_candles( session: aiohttp.ClientSession, security: str, interval: int = 24, start: Optional[str] = None, end: Optional[str] = None, board: str = DEFAULT_BOARD, market: str = DEFAULT_MARKET, engine: str = DEFAULT_ENGINE, ) -> client.Table: """Получить свечи в формате HLOCV указанного инструмента в указанном режиме торгов за интервал дат. Описание запроса - https://iss.moex.com/iss/reference/46 :param session: Сессия http соединения. :param security: Тикер ценной бумаги. :param interval: Размер свечки - целое число 1 (1 минута), 10 (10 минут), 60 (1 час), 24 (1 день), 7 (1 неделя), 31 (1 месяц) или 4 (1 квартал). По умолчанию дневные данные. :param start: Дата вида ГГГГ-ММ-ДД. При отсутствии данные будут загружены с начала истории. :param end: Дата вида ГГГГ-ММ-ДД. При отсутствии данные будут загружены до конца истории. :param board: Режим торгов - по умолчанию основной режим торгов T+2. :param market: Рынок - по умолчанию акции. :param engine: Движок - по умолчанию акции. :return: Список словарей, которые напрямую конвертируется в pandas.DataFrame. """ url = request_helpers.make_url( engine=engine, market=market, board=board, security=security, ending=CANDLES, ) table = CANDLES query = request_helpers.make_query(interval=interval, start=start, end=end) return await request_helpers.get_long_data(session, url, table, query)
async def get_market_candles( session: aiohttp.ClientSession, security: str, interval: int = 24, start: Optional[str] = None, end: Optional[str] = None, market: str = DEFAULT_MARKET, engine: str = DEFAULT_ENGINE, ) -> client.Table: """Получить свечи в формате HLOCV указанного инструмента на рынке для основного режима торгов. Если торговля идет в нескольких основных режимах, то на один интервал времени может быть выдано несколько свечек - по свечке на каждый режим. Предположительно такая ситуация может произойти для свечек длиннее 1 дня. Описание запроса - https://iss.moex.com/iss/reference/155 :param session: Сессия http соединения. :param security: Тикер ценной бумаги. :param interval: Размер свечки - целое число 1 (1 минута), 10 (10 минут), 60 (1 час), 24 (1 день), 7 (1 неделя), 31 (1 месяц) или 4 (1 квартал). По умолчанию дневные данные. :param start: Дата вида ГГГГ-ММ-ДД. При отсутствии данные будут загружены с начала истории. :param end: Дата вида ГГГГ-ММ-ДД. При отсутствии данные будут загружены до конца истории. :param market: Рынок - по умолчанию акции. :param engine: Движок - по умолчанию акции. :return: Список словарей, которые напрямую конвертируется в pandas.DataFrame. """ url = request_helpers.make_url(engine=engine, market=market, security=security, ending=CANDLES) table = CANDLES query = request_helpers.make_query(interval=interval, start=start, end=end) return await request_helpers.get_long_data(session, url, table, query)
async def get_board_securities( session: aiohttp.ClientSession, table: str = SECURITIES, columns: Optional[Iterable[str]] = ("SECID", "REGNUMBER", "LOTSIZE", "SHORTNAME"), board: str = DEFAULT_BOARD, market: str = DEFAULT_MARKET, engine: str = DEFAULT_ENGINE, ) -> client.Table: """Получить таблицу инструментов по режиму торгов со вспомогательной информацией. Описание запроса - https://iss.moex.com/iss/reference/32 :param session: Сессия http соединения. :param table: Таблица с данными, которую нужно вернуть: securities - справочник торгуемых ценных бумаг, marketdata - данные с результатами торгов текущего дня. :param columns: Кортеж столбцов, которые нужно загрузить - по умолчанию тикер, номер государственно регистрации, размер лота и краткое название. Если пустой или None, то загружаются все столбцы. :param board: Режим торгов - по умолчанию основной режим торгов T+2. :param market: Рынок - по умолчанию акции. :param engine: Движок - по умолчанию акции. :return: Список словарей, которые напрямую конвертируется в pandas.DataFrame """ url = request_helpers.make_url(engine=engine, market=market, board=board, ending=SECURITIES) query = request_helpers.make_query(table=table, columns=columns) return await request_helpers.get_short_data(session, url, table, query)
def test_make_query_empty(): query = request_helpers.make_query() assert query == {}
def test_make_query_many_columns(): query = request_helpers.make_query(table=1, columns=("2", "3")) assert isinstance(query, dict) assert len(query) == 2 assert query["iss.only"] == f"1,history.cursor" assert query[f"{1}.columns"] == "2,3"