Как считается результат
История — это данные, а не сценарий. Мы нигде не написали «в 2008 году кризис, отнять 30%»: мы храним реальные исторические ряды — индексы акций, курсы валют, ставки, цены на сырьё, законы — и считаем, что произошло именно с вашим портфелем. Поэтому два игрока в одном и том же году получают совершенно разные результаты.
Ниже — расчёт года целиком. У каждой величины подписано, откуда она взялась: взята из опубликованного источника напрямую или получена нашей моделью из нескольких исторических рядов. Это разделение — не оговорка мелким шрифтом, а главное, что нужно понимать про цифры в этой игре.
Любое изменение формулы обязано менять эту версию. Уже рассчитанные годы навсегда сохраняют ту версию, под которой они считались.
Пять типов чисел
Каждая цифра в отчёте о годе принадлежит ровно одному из пяти типов, и тип виден прямо рядом с числом — и здесь, и в разборе любой строки ledger. Два первых типа важнее всех остальных: первый — это то, что действительно опубликовано, второй и третий — то, что посчитали мы.
Это прямые исторические данные: значение взято из опубликованного ряда именно для этой величины, без пересчётов и допущений.
Например: Ставка по депозиту от Всемирного банка, долларовая цена биткойна.
Это модель: взята реальная доходность рынка страны, к ней добавлена отраслевая поправка по мировому отраслевому индексу. Прямого индекса этой отрасли в этой стране не существует.
Например: Отраслевая поправка к доходности бизнеса.
Это расчёт из нескольких реальных исторических рядов — например, курс на начало и на конец года, превращённые в годовую доходность.
Например: Доходность рынка страны в долларах, доходность валюты, стоимость жизни.
Это игровое допущение, а не исторический факт. Значение выбрано нами, задокументировано и одинаково для всех игроков.
Например: Коэффициент λ, верхняя и нижняя границы доходности позиции, множитель стоимости жизни.
Это правовое правило, выписанное вручную из законодательства соответствующего года.
Например: Ставка налога на прирост капитала, стоимость смены налогового резидентства, срок для получения гражданства.
Первые три типа опираются на источники: разница между ними в том, сколько рядов пришлось соединить, чтобы получить нужную величину.
Последние два источником не подтверждаются вовсе. Игровое допущение — наш выбранный коэффициент; правовое правило — упрощение реального законодательства до одного числа.
Порядок расчёта года
Год считается ровно в этом порядке, и результат зависит только от трёх вещей: капитала на начало года, ваших решений и исторических данных этого года. Ни случайности, ни скрытых модификаторов в расчёте нет — один и тот же ввод всегда даёт один и тот же результат.
капитал на начало года ↓ делится между позициями по вашим долям бизнес-позиция начало × (1 + r_позиции) сбережения начало × (1 + ставка) × (1 + r_валюты) = валовая стоимость портфеля − налоги − стоимость жизни − переезд − гражданство ± явные эффекты исторических событий = капитал на конец года
Каждая позиция считается независимо от остальных. Бонуса за диверсификацию не существует: если несколько позиций сгладили вам просадку, это сделала история, а не начисление за количество строк.
Бизнес-позиция
Основная формула игры. Доходность бизнеса — это доходность рынка страны плюс часть того, насколько выбранная отрасль в этом году обогнала эталонный рынок.
r_позиции = r_страны + λ × r_отрасли r_позиции = ограничивается нижней и верхней границей конец = начало × (1 + r_позиции)
| Величина | Тип числа | Что это и откуда |
|---|---|---|
| r_страны | ВЫВЕДЕНО ИЗ ИСТОРИЧЕСКИХ РЯДОВ | Годовая доходность широкого рынка акций страны, пересчитанная в доллары. Собирается из двух рядов: индекс акций декабрь к декабрю и курс валюты за те же два декабря. Пересчёт по курсу выполняется ровно один раз — иначе мы показали бы рост, которого долларовый инвестор не получил, или обвал, которого не было. |
| r_отрасли | МОДЕЛЬ: РЫНОК СТРАНЫ + ОТРАСЛЕВОЙ ПРОКСИ | Насколько отрасль обогнала эталонный рынок: (1 + доходность отрасли) / (1 + доходность эталонного рынка) − 1. Отраслевой ряд — мировой отраслевой портфель или мировая цена товара, один и тот же для всех стран. Уровень доверия у этой величины никогда не бывает высоким. |
| λ | ИГРОВОЕ ДОПУЩЕНИЕ | Какая доля отраслевого отклонения доходит до вашего бизнеса. Наш коэффициент, не историческая величина: частный бизнес в стране заведомо менее чувствителен к мировому отраслевому индексу, чем сам индекс. |
| границы | ИГРОВОЕ ДОПУЩЕНИЕ | Нижняя и верхняя граница годовой доходности позиции. Защита от повреждённого значения в источнике; срабатывание всегда попадает в ledger. |
Самое важное ограничение всей модели
Отраслевой фактор — это глобальный, по сути американский, отраслевой цикл или мировая цена товара. Он НЕ говорит, как отработала эта отрасль в выбранной вами стране: надёжного такого набора данных по десяткам стран за четверть века просто не существует, и выдумывать его мы не станем. Именно поэтому фактор применяется частично, через λ, и именно поэтому такая цифра всегда помечена как результат модели, а не как исторические данные.
Один λ на всё не работает — поэтому их два
Сырьевой фактор — это изменение цены товара, а биржевой отраслевой фактор — доходность акций. Их колебания несопоставимы по величине: нефть может подорожать вдвое за год, отраслевой индекс — почти никогда. Пока коэффициент был один, сырьевые отрасли упирались в ограничитель каждый год. А ограничитель, который срабатывает каждый год, — это уже не защита от испорченных данных, а игровая константа вместо истории. Поэтому у каждого семейства свой λ и свои границы.
| Семейство | λ | Нижняя граница | Верхняя граница |
|---|---|---|---|
| Биржевые отрасли Отраслевые портфели: технологии, финансы, здравоохранение, промышленность и так далее. Сюда же попадает отрасль, для которой в датасете не записан способ расчёта фактора. | 0.70 | −95% | +500% |
| Сырьевые отрасли Нефть и газ, металлы, золото, продовольственное сырьё, майнинг криптовалюты — всё, что считается по мировым ценам товаров. | 0.35 | −95% | +800% |
| Активы с мировой ценой Криптовалюта. Считается по собственной цене актива — см. следующий раздел. | не применяется | не применяется | не применяется |
Границы — это защита от повреждённого значения в источнике, а не игровая механика. Если ограничитель сработал, вы увидите это прямо в ledger, а обе строки — «рынок страны» и «отраслевая поправка» — уменьшатся пропорционально: так ни одна из них не поменяет знак из-за поправки на качество данных.
Актив с мировой ценой
Задокументированное отступление от общей формулы
Криптовалюта — не бизнес в стране. Биткойн, купленный «в Катаре», — тот же самый биткойн, что и в Германии, и катарский фондовый индекс не имеет никакого отношения к тому, что произошло с его ценой. Общая формула ошибалась здесь в обе стороны сразу: обвалы почти не доходили до игрока, потому что их разбавлял рынок страны, а в 2025 году рынок страны просто перевесил актив, и год падения читался как год прибыли. Поэтому такая позиция приносит собственную доходность актива.
r_позиции = r_актива конец = начало × (1 + r_актива)
| Величина | Тип числа | Что это и откуда |
|---|---|---|
| r_актива | ПРЯМЫЕ ИСТОРИЧЕСКИЕ ДАННЫЕ | Собственная долларовая доходность актива за год, посчитанная по его же цене. Здесь нет ни прокси, ни подстановки: это ровно то, что вы купили. |
Ни доходности страны, ни λ, ни ограничителя. Наблюдаемая цена — это не смоделированная комбинация, и обрезать её значило бы заменить факт игровой константой. Страна при этом продолжает решать всё, что она действительно решает: налоги, резидентство, стоимость жизни. В ledger такая позиция даёт одну строку, а не две: строки «рынок страны» и «отраслевая поправка» называют две половины формулы, которой здесь нет.
Майнинг криптовалюты сюда не относится. Это компания в стране — с местным электричеством, местным регулированием и местным листингом, — и она считается по общей формуле без изменений, хотя читает тот же самый ряд цен.
Сбережения
Курс в игре — это количество национальной валюты за один доллар, поэтому ослабление валюты означает отрицательную доходность позиции в долларовом выражении.
наличные конец = начало × (1 + r_валюты) депозит конец = начало × (1 + ставка) × (1 + r_валюты) r_валюты = курс(прошлый год) / курс(этот год) − 1
| Величина | Тип числа | Что это и откуда |
|---|---|---|
| ставка | ПРЯМЫЕ ИСТОРИЧЕСКИЕ ДАННЫЕ | Ставка по депозитам для страны и валюты. Основной источник — Всемирный банк; где его нет, берётся официальная альтернатива, а для нескольких стран — трёхмесячная межбанковская ставка, и это уже заменитель, помеченный низким доверием. Там, где не нашлось ни одного официального ряда, значение становится оценкой по сопоставимым странам — и помечается уже не как прямые данные, а как расчёт из исторических рядов. |
| r_валюты | ВЫВЕДЕНО ИЗ ИСТОРИЧЕСКИХ РЯДОВ | Доходность владения валютой в долларах, посчитанная из двух среднегодовых курсов. Это приближение «среднегодовой курс к среднегодовому»: направление и масштаб оно передаёт верно, но не совпадёт с покупкой 1 января и продажей 31 декабря. |
В ledger депозит даёт две отдельные строки: проценты и валютное движение. Депозит в евро под 4% годовых при ослаблении евро на 9% даёт в долларах не −5%, а 1,04 × 0,91 − 1 = −5,36%, потому что курс действует и на начисленные проценты тоже. Этот перекрёстный эффект отнесён к валютной строке — это движение курса, а не проценты.
Доллар — базовая валюта учёта. Его доходность к самому себе равна ровно нулю: это определение, а не оценка. Наличные процентов не приносят вовсе, а если ставки по депозиту для пары «страна + валюта» в датасете нет, депозит просто недоступен — наличные в той же валюте при этом остаются.
Налоги
Мы не реализуем налоговые кодексы мира. Ставка в игре — это упрощённая эффективная ставка, выписанная вручную из законодательства нужного года: реальная система со ступенями, вычетами и исключениями сведена к одному числу. Поэтому она помечена как правовое правило, а не как исторический ряд. Считается, что в конце каждого года портфель ребалансируется, поэтому прибыль признаётся реализованной.
прибыль по бизнесу = Σ стоимость на конец − Σ стоимость на начало база = max(0, прибыль по бизнесу) налог = (база − порог) × ставка если база > порога процентная база = Σ процентов по депозитам за год
| Величина | Тип числа | Что это и откуда |
|---|---|---|
| ставка и порог | КУРИРУЕМОЕ ПРАВОВОЕ ПРАВИЛО | Упрощённая эффективная ставка и годовой вычет, выписанные вручную из законодательства страны и года, с датой проверки. |
В MVP применяются только два типа налога: Налог на прирост капитала, Налог на проценты. Остальные типы хранятся в данных, но не начисляются.
- Убыток налогом не облагается и не возвращается.
- Прибыль и убыток разных позиций внутри года суммируются: убыток по одной позиции уменьшает налогооблагаемую прибыль по другой.
- Порог — это годовой вычет, а не порог отсечения: облагается только та часть базы, которая выше него.
- Валютные движения по сбережениям не облагаются: ни один тип налога в нашей модели их не покрывает, а выдумывать новый мы не станем.
- Перенос убытков на будущие годы в первой версии не реализован.
- Налог считается по правилам страны вашего налогового резидентства. Если для страны и года правила нет, налог не начисляется, и это видно в отчёте о покрытии данных.
Стоимость жизни
Это не инфляция и не процент от капитала, а абсолютная сумма в долларах, которая списывается каждый год. Источник — конечное потребление домашних хозяйств на душу населения: среднее по всей экономике страны. Человек с инвестиционным капиталом почти наверняка живёт дороже этого среднего, поэтому цифру честно называть прокси, а не вашим бюджетом.
расходы за год = расходы на человека (USD)
× размер домохозяйства
× игровой множитель| Величина | Тип числа | Что это и откуда |
|---|---|---|
| расходы на человека | ВЫВЕДЕНО ИЗ ИСТОРИЧЕСКИХ РЯДОВ | Конечное потребление домашних хозяйств на душу населения, в постоянных долларах 2015 года. Среднее по экономике, а не ваш личный бюджет. |
| игровой множитель | ИГРОВОЕ ДОПУЩЕНИЕ | Наш множитель к источнику. Любое значение, кроме единицы, было бы нашей выдумкой поверх данных. |
Расходы списываются по стране, где вы живёте, а не где вы налоговый резидент: в игре это два разных решения. Показатель выражен в постоянных долларах 2015 года — он растёт только за счёт реального роста потребления, но не за счёт инфляции, тогда как ваш капитал номинальный.
Переезд и гражданство
Стоимость смены налогового резидентства и стоимость маршрута гражданства — курируемые правовые данные, собранные вручную из официальных источников. Игровой множитель к переезду позволяет настраивать трение миграции, не редактируя сами правовые данные.
стоимость переезда = курируемая стоимость × игровой множитель
| Величина | Тип числа | Что это и откуда |
|---|---|---|
| курируемая стоимость | КУРИРУЕМОЕ ПРАВОВОЕ ПРАВИЛО | Стоимость смены налогового резидентства между конкретной парой стран в конкретном году, собранная вручную из официальных источников. |
| стоимость маршрута | КУРИРУЕМОЕ ПРАВОВОЕ ПРАВИЛО | Стоимость маршрута получения гражданства и требуемый стаж резидентства — тоже курируемые правовые данные. |
| игровой множитель | ИГРОВОЕ ДОПУЩЕНИЕ | Наш множитель к правовой стоимости переезда. Существует для того, чтобы настраивать трение миграции, не редактируя сами правовые данные. |
Стоимость гражданства списывается в тот год, когда маршрут завершён, а не когда начат: начатый и брошенный маршрут не стоит ничего. Право на маршрут пересчитывается каждый год по накопленному стажу резидентства, и игра всегда говорит, чего именно не хватает.
События и ограничения
Историческое событие в первую очередь объясняет год. Повлиять на ваши деньги оно может только через явное проверенное правило и только в том, чего нет в рыночных и валютных рядах: взять реальную доходность рынка −37% и добавить сверху «модификатор кризиса» — это двойной счёт одного и того же события.
доля позиции в этом году ≥ сила ограничения × её доля на конец прошлого года
Валютный контроль — это замок, а не убыток. Он не забирает деньги: он запрещает вывести долю позиции. Настоящая цена приходит через курс — вы заперты в слабеющей валюте, и это уже посчитано в валютном ряду. Замок держит юрисдикцию, а не название позиции: доля считается только по тому, что осталось в стране и валюте ограничения, поэтому сменить позиции страну — это и есть вывод средств, и он отклоняется.
Итог года и ledger
Ledger — не описание результата, а сам результат. Капитал на конец года не «примерно сходится» с построчным отчётом: он ему равен, и это равенство проверяется при каждом расчёте в бою, а не только в тестах. Если оно не сошлось, год не сохраняется вообще.
капитал на конец = капитал на начало + Σ изменений всех строк ledger
Если расходы года превысили весь капитал, год всё равно считается полностью — вы видите каждую строку и понимаете, что именно вас разорило. Затем непокрытый остаток списывается отдельной строкой, а капитал становится ровно нулём. Отрицательный капитал оставить нельзя: умножение отрицательной суммы на (1 + доходность) переворачивает знак, и игрок начал бы зарабатывать на обвалах рынка.
Внутри расчёта округления не происходит — все промежуточные значения точные, а округляется только то, что показано на экране. И мы не показываем ложной точности: вы увидите +12,8%, а не +12,8473921%.
Когда данных нет
Мы никогда не подставляем ноль вместо отсутствующего значения. Ноль — это утверждение «показатель не изменился», и почти всегда это неправда. Значение ищется по лестнице, сверху вниз:
прямой исторический ряд ↓ альтернативный официальный источник ↓ региональный прокси ↓ глобальный прокси ↓ значение недоступно → позиция для этой страны, отрасли или валюты в этом году недоступна
Любое значение, полученное не напрямую, помечено: уровень приближения, источник, методика и флаг «оценочное значение». Если обосновать приближение нельзя, игра откажет в позиции и скажет, почему. Это правильное поведение, а не сбой.
Отдельно про правовые данные. У налогового или иммиграционного правила уровень приближения всегда «прямой» — мы читаем закон, а не подбираем ему замену. Но правило почти всегда является упрощением, поэтому смотрите на пометку «курируемое правовое правило», а не на уровень приближения.
Игровые допущения
Всё перечисленное ниже — наши решения, а не исторические факты. Ни одно из этих чисел не взято из источника. Все они лежат в одном файле конфигурации, задокументированы и версионируются: изменение любого из них обязано менять версию методологии, иначе уже сыгранные партии изменились бы незаметно.
| Параметр | Значение | Обоснование |
|---|---|---|
| sectorLambda | 0.70 | Доля отраслевого избыточного результата, которая переносится на бизнес игрока, для биржевых отраслевых прокси. Отраслевой фактор — это глобальный/американский прокси-цикл, а не доходность конкретной отрасли конкретной страны, поэтому он применяется частично. |
| sectorLambdaCommodity | 0.35 | То же для сырьевых отраслей. Значение ниже, потому что сырьевой фактор — это изменение цены товара, а не доходность акций: у добывающего или перерабатывающего бизнеса есть постоянные затраты, хеджирование, законтрактованные объёмы и запасы, поэтому его экономика движется слабее спотовой цены. |
| marketReturnFloor | −95% | Нижняя граница годовой доходности позиции. Защита от повреждённых значений источника. Любое срабатывание записывается в ledger. |
| marketReturnCap | +500% | Верхняя граница годовой доходности позиции. Защита от повреждённых значений источника. Любое срабатывание записывается в ledger. |
| marketReturnFloorCommodity | −95% | Нижняя граница годовой доходности позиции в сырьевой отрасли. Отдельная от биржевой, потому что цены на сырьё колеблются заметно сильнее. |
| marketReturnCapCommodity | +800% | Верхняя граница годовой доходности позиции в сырьевой отрасли. Шире биржевой, чтобы реальный сырьевой скачок не превращался молча в игровую константу. |
| livingCostMultiplier | 1.00 | Множитель к прокси стоимости жизни (household final consumption expenditure на человека). Значение 1.00 означает, что игровая стоимость жизни равна источнику без искусственной надбавки. |
| relocationRiskScale | 1.00 | Множитель к курируемой стоимости смены налогового резидентства. Позволяет настраивать трение переезда, не редактируя правовые справочные данные. |
| fallbackPenalty | 0 | Штраф к доходности, рассчитанной по глобальному прокси. В MVP равен нулю: искусственное занижение создало бы цифру, не подтверждённую ни одним источником. |
| maxBusinessPositions | 5 | Максимум одновременных бизнес-позиций в MVP UI. |
| maxSavingPositions | 5 | Максимум одновременных сберегательных позиций в MVP UI. |
| methodologyVersion | 3.1.0 | Версия расчётной методологии движка. Изменение любой формулы обязано менять эту версию, иначе исторические партии изменятся незаметно. |
Значения в этой таблице прочитаны прямо из конфигурации движка — той же самой, по которой считается ваш год. Страница не может показать здесь одно число, а посчитать другим.
Чего в игре нет намеренно
Не потому что не успели, а потому что каждый из этих пунктов сделал бы цифру необъяснимой.
- Бонуса за диверсификацию. Функция, считающая позицию, физически не видит, сколько у вас всего позиций.
- Случайных модификаторов. Один и тот же ввод всегда даёт один и тот же результат.
- Прибавки роста ВВП к доходности. Рост экономики уже отражён в котировках рынка; прибавить его ещё раз — двойной счёт.
- Модификатора вида «кризис, минус 30%». Событие может повлиять на вас только через явное проверенное правило и только в том, чего нет в базовых рядах.
- Валютного контроля как убытка. Контроль запрещает вывести долю позиции, но не забирает деньги: его реальная цена приходит через курс, и она уже есть в курсовом ряду.
- Языковых моделей где-либо в игровом процессе. Отрасли распознаёт детерминированный алгоритм, описания событий собраны по шаблонам.
- Обращений к внешним источникам во время партии. Весь датасет собран заранее, оффлайн.
- Нуля вместо отсутствующего значения.