-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Состав индекса мосбиржи #12
Comments
В принципе можно с помощью этого запроса к API https://iss.moex.com/iss/reference/147, но специально такая функция не реализована. При желании можно с помощью клиента получить данные:
|
К сожалению это недостоверная информация, возможно тестовые данные. В индексе сейчас 43 бумаги: |
Так и тут 43 - нумерация с нуля идет
|
Странно, я дёрнул https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics/IMOEX.json Там гораздо меньше строк: { |
Данный запрос имеет страничную выдачу - размер страницы 20. Нужно дополнительно запрашивать следующие страницы. Вызов
автоматически определяет наличие и выкачивает все страницы. Если сделать вызов
То будет получена только первая страница, как у вас. |
Спасибо, вы очень помогли |
Предлагаю упаковать в функцию, в файл requests.py. Вариант: def get_index_tickers(
session: requests.Session,
index: str,
date: Optional[str] = None,
columns: Optional[Tuple[str, ...]] = (
"ticker",
"from",
"till",
"tradingsession",
),
market: str = "index",
engine: str = "stock",
):
"""Получить информацию по составу указанного индекса за указанную дату.
Описание запроса - https://iss.moex.com/iss/reference/148
:param session:
Сессия интернет соединения.
:param index:
Название индекса. Например, IMOEX. Список: https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics
:param date:
Дата вида ГГГГ-ММ-ДД. Если указано, то будут показаны только активные инструменты, по которым тогда рассчитывалось значение индекса. Если в указанный день не было торгов, то вернёт пустой список! При отсутствии данные будут загружены с начала истории.
:param columns:
Кортеж столбцов, которые нужно загрузить - по умолчанию режим торгов, дата торгов, цена закрытия и объем в
штуках и стоимости. Если пустой или None, то загружаются все столбцы.
:param market:
Рынок - по умолчанию индексы.
:param engine:
Движок - по умолчанию акции.
:return:
Список словарей, которые напрямую конвертируется в pandas.DataFrame.
"""
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) Ещё добавить в тот же файл: __all__ = [
...
"get_index_tickers",
] def _make_query(
...
date: Optional[str] = None,
...
) :
...
:param date:
Точная дата (используется при получении тикеров в индексе).
...
if date:
query["date"] = date А это в автотесты: def test_get_index_tickers(session):
data = requests.get_market_history(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 |
Без проблем - делайте PR |
Есть ли возможность вытаскивать состав индекса и доли бумаг в нем?
Например imoex?
The text was updated successfully, but these errors were encountered: