Exemple #1
0
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"
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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"