Архив и таймлапс Индекса МосБиржи

Версия экспортера: 1. Формат: portfolio-lab-index-history, версия 1. Данные: архив PortfolioLab MOEX Monthly 1.0.0 от 18 октября 2026 года.

Назначение и фактическое покрытие

Раздел показывает наблюдаемый состав индекса в прошлом, а не переносит современный список акций на прежние даты. Каждая точка — первое календарное число месяца. Доступны 309 срезов с 01.02.2001 по 01.10.2026: 10 946 наблюдений участников, 137 идентификаторов выпусков и 154 исторических кода. Состав до февраля 2001 года в сохранённом архиве отсутствует. Общая месячная база начинается в апреле 1997 года; её первые 46 месяцев не являются доказанной историей состава индекса и в таймлапс не добавляются.

Основание — оригинальные ответы официального MOEX ISS: https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics/IMOEX.json. Каждый использованный ответ сохраняет URL, дату загрузки и SHA-256. История выгружается из готового выпуска, без сетевых запросов и пересмотра источника. Веб-сайт загружает небольшой статический JSON по запросу пользователя; исходная SQLite в публикацию не входит.

Даты, веса и идентичность

Метаданные источника прямо устанавливают статус RETROSPECTIVE_ASOF: исторические наблюдения восстановлены ретроспективно; доступность каждого числа в первоначальный момент публикации и отсутствие позднейших исправлений не сертифицированы. Архив подходит для исследования исторического состава с этой оговоркой; он не является сертифицированной базой без ошибок заглядывания вперёд.

Входы, выходы и уровни индексов

entered и exited — разность наборов issue_id между соседними месячными срезами. Всего 292 наблюдаемых события. Они означают изменение между двумя срезами, а не установленную точную дату ребалансировки или юридического делистинга. Первый срез — начальное наблюдение; его акции не считаются вновь включёнными. Техническая смена кода при сохранении выпуска не создаёт ложного входа или выхода.

index_level — официальный ценовой IMOEX; total_return_level — отдельный официальный MCFTR полной доходности из замороженного финансового выпуска 0.5.0. Берётся только точная отметка на market_cutoff_date исходной месячной базы, строго до первого числа месяца. У каждого уровня сохранена собственная дата. IMOEX доступен во всех 309 срезах, MCFTR — в 262; до начала его истории значение остаётся null. Значения не интерполируются, не экстраполируются и не заменяются друг другом. Разные базы индексов не следует сравнивать как доходность по абсолютной высоте: для сравнения графиков нужна общая начальная дата и нормирование к ней.

Архив состава расширяет информационный раздел сайта. Он не изменяет финансовый календарь, цены, ставки, синтетические ряды или расчётный движок портфелей.

Файлы и контракт

ФайлСодержание
public/index-history/timelapse.jsonВсе 309 срезов, участники, даты, уровни, месячные изменения и источники
public/index-history/composition.csvПолная таблица состава, включая ключи и ссылки на источники идентичности и весов
public/index-history/changes.csvМесячные входы/выходы с предыдущей датой сравнения
public/index-history/provenance.jsonПокрытие, хеши исходного архива, базы, финансовых рядов, URL источников
public/index-history/methodology.htmlАвтономная читаемая методика с пояснениями ограничений
public/index-history/validation.jsonРезультаты проверок и конкретные пропуски весов

JSON содержит format, version, data_version, provenance, coverage, sources и snapshots. В каждом срезе сохранены date, membership_date, weight_date, два *_source_id, members, entered, exited, member_count, known_weights, weight_sum_pct и значения/даты двух индексов. Участник содержит symbol, source_symbol, issue_id, name, isin, weight_pct, instrument_type, identity_basis. Показатели known_weights и weight_sum_pct относятся только к известным весам. data_version — SHA-256 канонического JSON до добавления самого поля хеша.

Воспроизведение и контроль

Исходный файл: PortfolioLab_MOEX_Monthly_1997_2026_v1_0_0_2026-10-18.zip. SHA-256: cb4503d0854c9357c8123d8380ba36d6e960ab5551cc67eb6c16f79127d41f05. Архив является внешним версионируемым исследовательским входом, а не частью деплоя. Python 3, стандартная библиотека, сеть не требуется:

python3 scripts/export_index_history.py --archive /absolute/path/PortfolioLab_MOEX_Monthly_1997_2026_v1_0_0_2026-10-18.zip
python3 tests/index-history.py --archive /absolute/path/PortfolioLab_MOEX_Monthly_1997_2026_v1_0_0_2026-10-18.zip

Экспортер извлекает SQLite только в игнорируемый work/index-history-input. Перед использованием проверяются закреплённый SHA-256 архива, размер и CRC SQLite, quick_check, внешние ключи, SHA-256 распакованных оригинальных ответов ISS, полнота страниц и точное совпадение кодов/весов с исходными ответами. 492 файла состава (17 385 строк) и 27 справочных файлов проверены по хешам. Все 10 946 месячных участников сверяются с официальным архивным составом и существующим представлением monthly_index_members.

Независимый тест повторно выбирает даты из полного дневного архива и сверяет каждый опубликованный состав, ключ, вес и уровень с входной SQLite и финансовыми рядами. Он проверяет месячные события, пропуски, ненормализованные веса, сохранение исторических кодов, полную согласованность CSV/JSON и побайтово одинаковое повторное построение всех шести файлов в отдельном каталоге.

Для нового выпуска необходимы новый сохранённый вход, отдельная проверка изменений и обновление закреплённого хеша. Изменение даты в интерфейсе не продлевает источник. Контроль должен сохранять неизвестные значения и запрещать незаметную подмену исторического состава сегодняшними участниками.