МЕТОДИКА · ДАННЫЕ
Методика базы данных: версии среза, источники и покрытие
Как устроена финансовая база лаборатории: откуда берутся цены, выплаты, ставки и курсы, в каких единицах хранятся ряды и как фиксируется версия среза.
Номера выпусков и даты в тексте относятся к редакции методики. Действующие данные — выпуск 0.5.2.20261026, рыночный срез 26.10.2026; правила расчёта описаны ниже.
Редакция методики 0.5.0-rc.2 от 21.10.2026 по времени Тбилиси. Финансовый выпуск 0.5.1, рыночный срез 16.10.2026, расчётный движок 0.5.0-rc.2.
Методика определяет происхождение и устройство базы, допустимое использование рядов, расчёт портфелей, порядок контроля и выпуск следующих версий. Зафиксированные входные SQLite и автономные команды позволяют восстановить текущие 42 рабочие таблицы и повторить расчёты без обращения к размещённому сайту. Успешный контроль подтверждает сохранность и воспроизведение проверяемого среза; полнота неизвестных первичных выплат остаётся отдельной задачей.
Изменения этой редакции
Выпуск 0.5.1 от 21.10.2026 исправляет подтверждённые ошибки реестра выплат 0.5.0. Из реестра удалены 11 несостоявшихся или задублированных выплат: GAZP 2022, MAGN 2022, NLMK 2023, GMKN 2014, три PHOR, MSTT 2019, MSNG 2026, RTKM и RTKMP 2016. Исправлены 4 суммы, добавлены три выплаты MSTT 2014–2016 и дробление PHOR 1:10 от 26.03.2012. Каждое изменение задано в реестре исправлений выпуска с закреплёнными SHA-256 доказательствами и проверено независимой сверкой.
Выпуск 0.5.0
Добавлены девять расчётных рядов, включая SPY и QQQ в рублях. Новая база является расширением финансового слоя 0.4.3; все его прежние предметные строки сохранены. Данные и определения моделей размещены в отдельном неизменяемом SQL пространстве, а прежний готовый срез сохранён.
Справочник содержит 290 записей; текущие 42 финансовые таблицы содержат 1 946 772 строк. В series 777 473 оценок, из них 41 265 относятся к девяти новым рядам. Четыре новые таблицы разделяют первичные входы, происхождение, определения и полную модельную историю. Движок и паспорт дополнены исследовательским допуском synthetic.
Источники сохранены полностью, включая 111 новых артефактов. База воспроизведена офлайн побайтово. Для SPY и QQQ выполнен независимый денежный реестр дивидендов, для валютной корзины — независимый портфельный расчёт. P10 по календарю месячных потоков остаётся закрытым.
Версии и идентичность среза
Версия финансового выпуска, редакция методики, версия расчётного кода и физический хеш файла имеют разный смысл. Их нельзя подменять одним номером.
| Параметр | Значение и смысл |
|---|---|
| Финансовый выпуск | 0.5.1 и data_release 0.5.1-corrections-2026-10-21 |
| Срез рынка | 16.10.2026 |
| Действующий движок | 0.5.0-rc.2 для JS и независимого Python расчёта |
| Политика потоков | confirmed-month-end-v1 |
| Политика допуска | research-pilot-v2 |
| Общая data_version | f04fde3fb10a9fa455a92548be25ec0f3580898db7e6c76180a16913cf132b1f |
| Префикс физических таблиц | rf04fde3f_ |
| SQL manifest_sha256 | e3b149a186765e2e9f6e8863be129ee1626f8e968728af27febcecd562f73551 |
| Исходная portfolio.sqlite SHA-256 | d4a69da49bf4905735407087b78e337b3235fef6fe1a705302664ca60fcee96f |
| Исходная policy_rates.sqlite SHA-256 | 8503520e609df312e89f8ff614fa14575ea8e71b745bf26be3812d983b0d7795 |
| SQL мастер текущих 42 таблиц SHA-256 | fc60eab7a94e14b8954eac5ae93b3ba2ed70c2ce5e9bce1729ef8618f86acaf4 |
Поле metadata.engine_version нового финансового входа равно 0.5.0-rc.2. Неизменяемая базовая portfolio.sqlite выпуска 0.4.3 сохранена отдельно; её прежнее поле engine_version равно 0.4.3. Версии не переписываются в старом снимке ради согласования названий. model_version денежной подбазы остаётся 0.3.0, поскольку формула прежней MM_CBR не меняется.
Внутренняя data_version денежной подбазы ab91056ad0e576b94b90a3de72111b7565e0c0ab383b47cc09dbc76f8abc13b4 является её смысловым идентификатором. Параметр money_version пути API равен физическому SHA-256 всей policy_rates.sqlite, указанному выше. Эти два значения различаются намеренно.
Источники и слои хранения
Первичные ответы и документы сохраняются с исходной ссылкой, временем получения, единицей и контрольной суммой. Нормализация не уничтожает свидетельство. Источник, подтверждённый только структурированным извлечением фактов, не объявляется оригинальным документом.
Текущая portfolio.sqlite содержит 33 основные таблицы, включая четыре таблицы расчётных моделей. Базовая portfolio.sqlite 0.4.3 содержит 29 прежних таблиц. Отдельная policy_rates.sqlite содержит девять таблиц ставок, модели и LQDT. Полный сохранённый мастер PortfolioLab_All_Data_0_4_3.sqlite.gz дополнительно включает архивные слои акций, ЦБ, прежнего выпуска и исходные артефакты. Рабочая проекция сайта не является полной копией всех архивных слоёв этого мастера.
Сайт использует 42 таблицы текущего среза с общим объёмом 1 946 772 строк, пять SQL-представлений и три служебные таблицы. Число 1 946 772 относится только к 42 текущим финансовым таблицам. Прежние 38 таблиц namespace r06b98526_ сохранены отдельно и в этот объём не включены. Строки представлений, журнал загрузки и кеш каталога к нему не прибавляются.
В mm_source_artifact проекция сохраняет все 28 записей метаданных без поля payload_gzip. Оригинальные gzip-байты остаются в денежной SQLite и полном мастере; это единственное исключение полей при переносе текущих таблиц. Оригиналы не удаляются и не заменяются ссылкой без сохранённого файла.
Каталог и ряды строятся из одной data_version. runtime_catalog_cache является производным кешем каталога с привязкой к версии и манифесту. Он не является первичным источником цен и не редактируется вручную. Финансовые запросы пользователей не дописывают таблицу runs; серверное хранение личных портфелей не реализовано.
Покрытие и единицы
В справочнике 290 записей, включая 127 кодов акций и 127 производных ценовых справочников. Число записей справочника не является числом независимых компаний. Доступны исследовательские TRI 83 кодов акций и 123 ценовых справочника. Всего в series 777 473 оценок. Начало общего календаря 22.09.1997, конец 16.10.2026, 7 277 дат; наличие раннего календаря не означает одинаковую глубину всех инструментов.
| Статус допуска API | Записей | Допустимый смысл |
|---|---|---|
| research | 98 | Исследовательские TRI акций и накопительные ряды БПИФ |
| price_only | 123 | Изменение цены с известными поправками без дивидендов |
| reference | 10 | Условные позиции по справочным оценкам или индексам |
| theoretical | 1 | Теоретическая модель MM_CBR |
| synthetic | 9 | Новые расчётные исследовательские ряды |
| cash_model | 1 | Денежный остаток CASH_RUB без процентов |
| blocked | 48 | Нет допущенного ряда или действует блокировка качества |
Полное покрытие каждого кода сохраняется в instrument_coverage.csv: первые и последние исходные цены отдельно от расчётного ряда, количество оценок, неторговые отметки, класс, качество, ISIN и underlying_symbol. Даты и числа выгружаются из SQL, а не вводятся в паспорт вручную.
Даты имеют формат YYYY-MM-DD. Веса JSON задаются долями единицы; в форме и index_members.weight_pct — процентами. Доходность, волатильность и просадка в машинном ответе задаются долями; 0.10 означает 10%. NAV и внешние потоки выражены в RUB, золото ЦБ — RUB за грамм, валютный курс — RUB за одну единицу после деления Value на Nominal. level является безразмерным индексом, а не рыночной ценой. Комиссия задаётся в базисных пунктах, 1 bps равен 0.01%.
NULL означает неизвестное или неприменимое значение. Неизвестная выплата, остановка источника или отсутствие истории не превращаются в ноль. Статус и окно допуска важнее наличия строки в архиве. Отсутствие строк выплат само по себе не доказывает накопительную политику фонда.
SQL таблицы текущего среза
Следующая инвентаризация формируется автоматически из входных SQLite и замороженного runtime-manifest.json. Указаны логические имена без общего префикса. Полные поля, типы, NULL, ключи, связи, индексы и DDL сохраняются в data_dictionary.json и приложении к HTML методике.
| Таблица | Строк | Первичный ключ | Назначение |
|---|---|---|---|
instruments |
290 | symbol |
Идентичность инструментов и производных рядов |
metadata |
33 | key |
Параметры замороженного финансового выпуска |
primary_annual_coverage |
14 | secid, year |
Первичные годовые сверки выплат |
quality_issues |
72 | id |
Замечания по качеству данных |
runs |
0 | run_id |
Журнал исходного Python API который текущий сайт не заполняет |
sources |
14 522 | source_id |
Происхождение наблюдений и контрольные суммы источников |
trading_calendar |
7 277 | date |
Общий календарь оценок на основе IMOEX |
mm_fund_model |
1 | model_id |
Определение теоретической модели MM_CBR |
mm_lqdt_action |
1 | effective_date |
Юридическая дата дробления и дата применения к цене LQDT |
mm_metadata |
14 | key |
Параметры и границы денежной подбазы |
mm_source_artifact |
28 | source_id |
Метаданные первичных артефактов денежной подбазы |
candle_archive |
240 191 | symbol, date |
Отдельно сохранённые ранние дневные свечи |
corporate_actions |
11 | symbol, effective_date, action_type |
Дробления и другие корпоративные действия |
distribution_evidence |
2 112 | evidence_id |
Исходные свидетельства выплат |
distributions |
1 312 | event_id |
Канонические экономические события выплат |
dividend_annual_control |
1 592 | symbol, year |
Годовая сверка канонических дивидендов |
event_exclusions |
12 | decision_id |
Кандидаты исключённые из денежных событий |
fund_policy |
15 | symbol |
Исследовательские правила распределения дохода БПИФ |
index_members |
228 786 | index_code, date, symbol |
Исторические составы и исходные веса IMOEX |
instrument_aliases |
32 | symbol, source_symbol, board |
Исходные коды фондов и интервалы справочника |
model_parameters |
1 | symbol |
Параметры импорта модели денежного рынка |
prices |
487 931 | symbol, date |
Исходные цены OHLC и торговая активность |
reference_observations |
45 804 | symbol, date |
Исходные величины ЦБ с номиналами и датами |
return_coverage |
127 | symbol |
Допустимые исследовательские окна TRI акций |
security_code_changes |
2 | change_id |
Доказанные переходы между историческими кодами |
series |
777 473 | symbol, date |
Уровни расчётных рядов и признаки доступности сделки |
source_revision_reviews |
43 | review_id |
Решения по изменениям закрытых источников |
synthetic_artifacts |
111 | source_id |
Происхождение и хеши сохранённых первичных входов расчётных рядов |
synthetic_inputs |
54 866 | dataset, date, field |
Нормализованные исходные индексы цены выплаты и дробления |
synthetic_models |
9 | symbol |
Версионированные определения девяти расчётных рядов |
mm_lqdt_quote |
1 687 | date |
Фактические положительные котировки LQDT и VTBM |
mm_model_daily |
12 709 | model_id, date |
Полный календарный индекс MM_CBR включая начальную точку |
mm_rate_daily |
17 487 | rate_type, date |
Раздельные календарные значения ключевой ставки и рефинансирования |
mm_rate_event |
205 | rate_type, effective_from |
Датированные события изменений ставок |
mm_rate_observation |
3 281 | rate_type, date |
Исходные опубликованные наблюдения ключевой ставки |
dividend_currency_facts |
19 | fact_id |
Первичная валюта единица выплаты и RUB эквиваленты |
event_aliases |
1 345 | original_event_id |
Связь исходных событий с каноническими |
event_evidence |
2 100 | event_id, evidence_id |
Связь экономического события со свидетельствами |
event_reviews |
56 | decision_id |
Сохранённые решения проверки событий |
event_timing |
1 312 | event_id |
Даты события и подтверждённая историческая доступность |
primary_dividend_facts |
18 | fact_id |
Первичные факты по отдельным выплатам |
synthetic_points |
43 871 | symbol, date |
Полная история моделей с датами входов и действующим курсом |
Представления: canonical_index_members, canonical_price_history, coverage, daily_returns, effective_price_history. Их строки не являются дополнительными первичными наблюдениями.
Служебные таблицы: runtime_releases — состояние выпуска и число ожидаемых строк; runtime_seed_chunks — подтверждённые пакеты загрузки; runtime_catalog_cache — производный каталог. Их данные не входят в финансовый объём.
Девять новых расчётных рядов
К базовому слою 0.4.3 добавлены девять рядов с классом synthetic_model и исследовательским допуском synthetic. Их коды отличаются от биржевых тикеров реальных фондов. MM_CBR сохраняется отдельной прежней моделью; CASH_RUB остаётся денежным остатком.
| Код | История в конструкторе | Полная модель | Оценок в конструкторе |
|---|---|---|---|
CORP_FUND_PROXY |
2018-12-29 — 2026-10-16 | 2018-12-29 — 2026-10-16 | 1958 |
FX_BASKET_RUB |
2006-05-11 — 2026-10-16 | 2006-05-11 — 2026-10-16 | 5128 |
IMOEX_FUND_PROXY |
2004-12-30 — 2026-10-16 | 2004-12-30 — 2026-10-16 | 5456 |
MM_RUONIA |
2010-01-11 — 2026-10-16 | 2010-01-11 — 2026-10-16 | 4216 |
MM_RUSFAR |
2018-01-09 — 2026-10-16 | 2018-01-09 — 2026-10-16 | 2208 |
OFZ_FUND_PROXY |
2002-12-30 — 2026-10-16 | 2002-12-30 — 2026-10-16 | 5960 |
QQQ_TR_RUB |
1999-03-11 — 2026-10-16 | 1999-03-11 — 2026-10-16 | 6912 |
SPY_TR_RUB |
1997-09-22 — 2026-10-16 | 1993-02-01 — 2026-10-16 | 7277 |
USD_MM_RUB |
2018-04-03 — 2026-10-16 | 2018-04-03 — 2026-10-16 | 2150 |
MM_RUONIA использует опубликованный Банком России накопленный индекс RUONIA. MM_RUSFAR использует опубликованный Московской биржей RUSFARIND. IMOEX_FUND_PROXY использует имеющийся MCFTR. OFZ_FUND_PROXY использует RGBITR, CORP_FUND_PROXY — RUCBTRNS. Это индексы совокупного дохода; дивиденды и купоны внутри них повторно не прибавляются. Для IMOEX_FUND_PROXY сохранены точные даты поддержки исходного MCFTR, включая четыре внутренних пропуска; отсутствующие наблюдения не заполняются.
Базовые дополнительные расходы всех девяти моделей равны нулю, налог равен нулю. Параметры закреплены в конфигурации расчётных рядов. Расходы модели не калибруются к историческому результату реального БПИФ. Изменение параметров создаёт новую версию данных. Комиссии портфельных операций задаются отдельно в конструкторе.
Валютная корзина
FX_BASKET_RUB распределяет капитал по одной трети в USD_RUB, EUR_RUB и CNY_RUB. При первоначальном входе приобретаются дробные условные позиции. В начале нового месяца сначала переоцениваются прежние позиции, затем восстанавливаются равные веса. Процентный доход на валюты отсутствует. Комиссии внутренней ребалансировки корзины равны нулю; отдельная комиссия портфеля применяется к покупке или продаже самой модели.
История начинается только на пересечении допущенных валютных рядов с 11.05.2006. Старые архивные CNY с неоднозначными номиналами не расширяют это окно. Простое усреднение исходных рублёвых цен разных валют не используется.
Американские ETF и рублёвая оценка
Для QQQ и SPY сохранены полные ответы Yahoo Finance с дневными ценами, выплатами и событиями дроблений. CLOSE и историческая выплата источника относятся к единице, уже скорректированной на дробления. Событие дробления QQQ 2 к 1 сохраняется как свидетельство и повторно к этим CLOSE не применяется.
USD доходность строится через независимую цепочку реинвестирования на ex-date:
wealth_usd(t) = wealth_usd(t−1) × (close(t) + dividend(t)) / close(t−1)
Выплата реинвестируется по закрытию ex-date, с дробными долями, без налогов. Дата поступления на конкретный брокерский счёт не моделируется. Внутренние расходы ETF уже отражены в цене. Vendor Adjusted Close сохранён только для диагностики: его соглашение о дивидендной корректировке отличается от явного денежного реестра и не подменяет формулу.
Для российской даты d выбирается последняя американская дата t строго меньше d. Затем применяется официальный USD/RUB с действующей датой не позднее d и в пределах сохранённого valid_until. Рублёвый уровень пропорционален wealth_usd(t) × USD_RUB(d) и нормируется к 100 на первой полной модельной оценке. Поэтому закрытие США 16.10.2026 не используется в российской оценке 16.10.2026.
Источники SPY сохранены с 29.01.1993; первая полная рублёвая модельная оценка — 01.02.1993. В конструкторе используется общий календарь с 22.09.1997. Ранние даты full history относятся к модельному календарю рабочих дней и не объявляются торговыми сессиями Мосбиржи. Для QQQ первая рублёвая модельная оценка — 11.03.1999.
Первичная идентичность ETF сверена по страницам эмитентов. Исторические дневные цены и выплаты являются данными поставщика Yahoo Finance; все выплаты за весь период не объявляются независимо сертифицированными по документам эмитентов. Эти ограничения входят в допуск и паспорт результата.
Долларовый денежный рынок
USD_MM_RUB использует накопленный индекс SOFR и ту же консервативную схему предыдущей американской даты и действующего USD/RUB. С 02.04.2018 по 28.02.2020 сохранены официальные indicative значения из Excel архива ФРБ Нью-Йорка; с 02.03.2020 используются регулярные данные API. Ранний участок имеет явный статус official_indicative_prelaunch. Первая рублёвая модельная оценка — 03.04.2018.
Доступность SOFR как официального ориентира не означает возможность разместить деньги инвестора непосредственно по этой ставке. Налоги, доступ к счёту, расходы конвертации и брокерская исполнимость этой теоретической моделью не задаются.
Слои и происхождение
synthetic_artifacts хранит ссылки, время получения, SHA-256 исходных байтов и gzip, тип свидетельства и путь к сохранённому артефакту. synthetic_inputs хранит нормализованные индексы, цены, выплаты и дробления с источником каждой записи. synthetic_models хранит определения, расходы, даты и версию. synthetic_points хранит полный модельный календарь, уровень, дату американского или индексного входа, дату и значение FX и пояснение расчёта.
В prices добавлено 41 265 условных модельных оценок с basis SYNTHETIC_RESEARCH_INDEX. Их CLOSE равен уровню модели; это не рыночная цена пая или ETF в рублях. OPEN, HIGH, LOW, volume и turnover для них не создаются. Исходные фактические цены остаются неизменными. Поле raw_first_date старого общего представления coverage для synthetic_model относится к этим отдельно помеченным оценкам; фактическая глубина первичного источника раскрывается в synthetic_inputs и протоколе ETF.
У model points поле conditional_rebalance и соответствующий series.tradable сохраняют признак обновления исходного наблюдения. Действующий движок для is_reference=1 допускает условную аналитическую ребалансировку и на перенесённой оценке в разрешённом возрасте. Этот режим не подтверждает возможность реальной биржевой сделки. Для американских входов перенос ограничен семью днями; для официальных индексных оценок — 35 днями внутри наблюдаемого периода; FX дополнительно ограничен valid_until и возрастом 14 дней.
Все 111 первичных артефактов сохранены. Выдача GET /api/synthetic-models читает определения из SQL; GET /api/synthetic-history/
Независимая проверка
Для SPY и QQQ отдельный денежный реестр получает дивиденды в деньги и увеличивает число дробных паёв по цене закрытия, затем пересчитывает результат в рубли. Проверены все 16 080 полных модельных оценок этих двух рядов. Максимальная разница с основной цепочкой — менее 0.000000005 индексного пункта.
Валютная корзина независимо выполнена исходным портфельным Python движком на базовой базе 0.4.3; проверены 5 128 дат. База с девятью добавлениями повторно построена офлайн и совпала побайтово. Все прежние строки предметных таблиц базового выпуска сохранены; новые данные не объявляются исправлением первичных выплат российских акций.
Первичные ссылки: https://www.cbr.ru/hd_base/ruonia/sv_ruonia/ ; https://www.moex.com/a8906 ; https://www.moex.com/a5865 ; https://www.moex.com/a7477 ; https://www.newyorkfed.org/markets/reference-rates/sofr-averages-and-index ; https://www.newyorkfed.org/markets/opolicy/operating_policy_200306 ; https://finance.yahoo.com/quote/QQQ/history/ ; https://finance.yahoo.com/quote/SPY/history/ . Точные запросы, пагинация и хеши сохранены в synthetic-source-manifest.json.
Серверный API и порядок расчёта
| Запрос | Назначение |
|---|---|
| POST /api/backtest | Расчёт и сравнение до трёх портфелей по выбранным SQL рядам |
| GET /api/catalog | Справочник календарь и метаданные одного среза |
| GET /api/data/ |
Контрольное чтение расчётного ряда |
| GET /api/money-market-config | Параметры отдельного денежного калькулятора |
| GET /api/money-data/ |
Полный календарный ряд ставок MM_CBR и LQDT |
| GET /api/database/status | Версия состояние и проверенный объём SQL |
| GET /api/readiness | Стадия, лимиты и открытые вопросы |
| GET /api/synthetic-models | Определения и интервалы девяти моделей из SQL |
| GET /api/synthetic-history/ |
Полная история модели с датами входов и FX |
Браузер отправляет workspace, ожидаемые data_version и engine_version. Сервер проверяет формат, версии, состав и объём запроса, читает выбранные ряды и MCFTR из SQL, затем вызывает канонические модули расчёта на JavaScript. Браузер проверяет версии ответа и строит таблицы и графики. Отдельная исследовательская страница денежного рынка сохраняет браузерный калькулятор; это не место исполнения основного портфельного бэктеста.
Независимый Python-движок используется для контроля. Размещённого Python/FastAPI сервера и PostgreSQL в текущем проекте нет. Действующий сервер — Worker с D1; вариант VPS и REG.RU остаётся следующим возможным развёртыванием.
Несовпадение версий запроса даёт 409, неверные параметры — 422, неизвестный ряд или версия при чтении — 404, незавершённый SQL срез — 503. При ошибке SQL переход к статическим JSON не выполняется. Лимиты расчёта: три портфеля, 20 разных инструментов суммарно, 32 768 байт запроса, 180 000 входных строк с учётом бенчмарка. Один активный расчёт допускается в одном isolate; занятому процессу соответствует 429 с Retry-After 2. Это не глобальная очередь и не оценка пропускной способности всего сервиса.
Расчёт капитала денежных потоков и риска
Портфель выражен в RUB, только длинные позиции, без заёмного плеча, с дробными долями. На каждой дате сначала меняется стоимость прежних позиций, затем выполняется месячный внешний поток, затем доступная плановая ребалансировка. Ребалансировка выполняется на первом доступном закрытии нового месячного, квартального или годового периода; отсутствие возможности сделки откладывает её.
Правило confirmed-month-end-v1 определяет последнюю дату месяца по полному календарю выпуска. Дата подтверждена как конец месяца, если следующая дата полного календаря относится к новому месяцу или сама дата является последним календарным днём. Последний день выбранного пользователем окна не создаёт месячный поток. На дате первоначального входа дополнительный поток отсутствует; в неполном последнем месяце он не начисляется. Сокращение до общей истории инструментов не изменяет правило.
При недоступности торговли пополнение остаётся денежным остатком до доступной плановой ребалансировки. Изъятие с необходимой продажей недоступного инструмента отклоняется. Недостаток капитала для изъятия с расходами также приводит к отказу. Внешние взносы и изъятия меняют число условных паёв и не входят в TWR доходность.
Комиссия применяется к абсолютному обороту, включая первоначальную покупку. Перевод CASH_RUB не облагается комиссией сделки. Комиссии портфельных сделок уменьшают стоимость; встроенное реинвестирование дивидендов внутри TRI отдельной брокерской комиссией не облагается. Налоги не моделируются, расходы уже включённые в цену БПИФ повторно не вычитаются.
TWR определяется по стоимости условного пая после расходов. CAGR использует календарную длительность в днях делённую на 365.2425. Волатильность — выборочное стандартное отклонение дневной TWR доходности с множителем sqrt(252). Sharpe использует среднюю дневную доходность и ту же волатильность; безрисковая ставка принята равной нулю. Sortino использует отрицательные дневные отклонения от нулевого порога; при нулевом знаменателе соответствующий коэффициент равен NULL. Максимальная просадка считается по очищенному от потоков индексу капитала. Неполный год в annual_returns помечается эвристикой даты первой и последней оценки, а не сертификацией календарного покрытия.
График MCFTR показывает вложение первоначальной суммы без внешних потоков. Сравнивать его конечную денежную сумму с портфелем со взносами как чистую доходность нельзя. Редкость торгов и перенесённые оценки способны занижать измеренную волатильность; фиксированное число 252 является допущением.
Паспорт результата
JSON паспорт сохраняет полные параметры workspace, фактический общий период и effective_settings, data_version, engine_version, политики потоков и допуска, результаты, предупреждения и run_id. CSV содержит идентификаторы для сопоставления с паспортом. Для повторения результата нужны также код и зафиксированные входные данные.
run_id состоит из первых 24 шестнадцатеричных символов SHA-256 канонически упорядоченного паспорта параметров с версиями. Он служит идентификатором воспроизводимого набора условий, не является электронной подписью и не подтверждает внешние первичные факты. Хеши фактических файлов кода дополнительно фиксируются в verification.json и манифесте контрольного комплекта.