Мировая экономика как направленный граф на трёхмерном глобусе: 249 узлов (страны, компании, проливы) · 15 041 ребро (торговля, банковские требования, энергия, чипы, критические поставки) · ~2.2 млн наблюдений с 1999 года · 10 источников данных — всё бесплатное и официальное.
Валютные пары — приложения к глобусу: скоринг всех 45 кроссов G10 с честным бэктестом на 20 лет. Шоки — симулируются и валидируются на естественных экспериментах (Россия-2022, Иран-2012/2018, Венесуэла-2019, COVID).
Дисклеймер. Это исследовательский инструмент, а не инвестиционная рекомендация. Валютная модель не проходила walk-forward на живых данных; edge скромный и может исчезнуть. Ничто здесь не является финансовым советом.
Глобус (http://127.0.0.1:8000 после запуска):
- 7 линз: торговые потоки · реальные ставки · инфляция · дисбалансы · созданная ценность (R&D) · энергия и чипы · финансы (доля USD в банковском фондировании — карта рычага вторичных санкций)
- гравитационная линза: наведи на любую страну — вспыхивают её личные потоки (экспорт/импорт) и панель движения средств
- ◆ стратегические активы: TSMC, ASML, SpaceX, Aramco, Газпром, NVIDIA, Samsung, Foxconn — компании как точки отказа мировой экономики
- ⚓ 28 проливов и каналов с живыми транзитами судов (AIS, лаг ~5 дней): обвал Ормуза виден за месяцы до торговой статистики
- 🛰 288 спутников, движущихся по настоящим орбитам (SGP4 в браузере)
- 📋 аналитическая сводка: rule-based нарратив о происходящем
- 💱 скоринг валютных пар G10 с разложением по факторам
- 💥 режим шока: кликни страну — волна расходится по измеренным рёбрам (итеративный Леонтьев); мульти-шоки типа «Залив −50%» через API
Как считается шок (glory/model/shock.py, ~40 строк): итеративный
Леонтьев по измеренным рёбрам — удар_i = passthrough·Σ_j удар_j·(поток_ji +
поток_ij)·12/ВВП_i, с НЕЛИНЕЙНЫМИ потолками min(удар, внешняя торговля/ВВП,
100%) — без них перевалочные хабы «теряют» сотни процентов ВВП. Это не
плавная диффузия из учебника: потолки насыщают каскад. Для финансовых рёбер —
отдельный движок (fincascade.py): пороговый каскад Furfine (банковская
система держит до буфера, потом падает целиком). Для траекторий с адаптацией
людей — цикл A↔B (loop.py).
Симуляция шоков — два слоя (принцип: экономика — это отношения людей, и люди адаптируются к стимулам, а не к потокам):
- слой A «физика»: распространение по рёбрам, валидирован на России-2022 — экспозиция ранжируется верно; на COVID честно показал границу (короткие шоки спроса определяет товарный состав, не глубина интеграции)
- слой B «адаптация»: классификатор режима принуждения (тарифы/санкции),
каналы страха — финансовая ставка в системе коалиции (урок Ирана-2018)
и торговая зависимость. Экзамены на 4 эпизодах: направление не хуже
baseline, ранжирование Spearman +0.2…+0.5. В прод пока НЕ допущен —
критерии в
scripts/validate_v2_sanctions.py - журнал испытаний: 6 гипотез слоя B проверено, все опровержения зафиксированы (включая «двухрежимные хабы» — проверена и откачена)
Наука под капотом:
- слои уверенности H/P/S: каждое наблюдение несёт confidence и происхождение
- зеркальная статистика для нерепортящих (Тайвань, Россия) — с пониженной уверенностью и явной пометкой
- ALFRED-винтажи для US, лаги публикации для остальных — защита от подглядывания в будущее в бэктестах
- журнал испытаний
model_trialsс дефляцией Sharpe по числу проб — защита от подгонки под историю
Модель v2 (текущая рабочая): реверсия реальной ставки в G10.
Бэктест 2005–2025: hit-rate 53–56%, IC +0.10 (12 мес), Sharpe 0.44
при пороге шума 0.12. История испытаний — в model_trials.
pip install fastapi uvicorn requests
setx GLORY_FRED_KEY "твой_ключ"# fred.stlouisfed.org/docs/api/api_key.html
setx GLORY_COMTRADE_KEY "твой_ключ"# comtradedeveloper.un.org (Free APIs)# первичный сбор данных (несколько часов, всё идемпотентно):
python scripts/expand_globe.py # ядро: 44 страны, полный граф
python scripts/expand_world.py all # весь мир: 212 узлов
python scripts/add_assets.py # компании + Тайвань (зеркала)
python scripts/add_logistics.py # проливы + спутники
python scripts/add_financial.py # банковские требования BIS LBS
python -c "from glory.store import db; from glory.ingest.sources import comtrade, ecb_fx, bis; c=db.get_conn(); comtrade.collect(c); ecb_fx.collect(c); bis.collect_reer(c, ['EU','US','JP','GB','CH','AU','CA','NZ','SE','NO'])"
uvicorn glory.api.main:app # → http://127.0.0.1:8000glory/
catalog.py узлы ядра, индикаторы, ресурсные/ядерные множества
assets.py стратегические активы (кураторские данные + источники)
store/ SQLite: схема + все записи через upsert с confidence
ingest/sources/ ECB, FRED/ALFRED, IMF (IMTS+CPI), BIS, WB, Comtrade,
PortWatch, CelesTrak, ECB FX
model/
features.py признаки валютных зон (z-скоры, лаги публикации)
scoring.py скоринг пар (веса = испытание №2 журнала)
narrative.py rule-based аналитика для сводки
api/main.py FastAPI: snapshot, flows, narrative, fx/scores, satellites
scripts/ сборщики данных + бэктесты (кэш: прогон за секунды)
ui/index.html глобус (globe.gl), весь UI один файл
db/glory.db НЕ в git (~350 МБ, пересобирается скриптами)
БД не распространяется с кодом — не только из-за размера (~350 МБ), но и потому что условия источников не позволяют массовую редистрибуцию сырых данных. Всё пересобирается скриптами выше за один вечер.
| Источник | Что даёт | Ключ |
|---|---|---|
| IMF SDMX (IMTS, CPI) | двусторонняя торговля, инфляция | нет |
| World Bank API | ВВП, население, координаты, индикаторы | нет |
| FRED / ALFRED | макро США с винтажами | бесплатный |
| ECB SDW | курсы, ставки еврозоны | нет |
| BIS Stats (CBPOL, EER, LBS) | ставки ЦБ, REER, банковские требования | нет |
| UN Comtrade | энергия HS27, чипы HS8542 | бесплатный |
| IMF PortWatch | транзиты через проливы (AIS) | нет |
| CelesTrak | спутники (SATCAT, TLE) | нет |
При использовании данных в публикациях цитируй первоисточники — они это требуют, и они это заслужили.
- Лучше дыра, чем ложь (пример: нефть «в Тайвань» оказалась свалкой конфиденциальных направлений ОПЕК — удалена)
- Каждое испытание модели →
model_trials; порог значимости растёт с числом проб (дефлирование Sharpe) - Скоринг линейный, малопараметрический; каждый сигнал объясним
- Зеркальные данные всегда помечены и весят меньше прямых
- S-слой — аномалии, не «объёмы теневых потоков»
- Скор — не сигнал к сделке; edge скромный, размер позиции обязан это уважать