📊 Quant Risk Hub — Trading Strategy Risk Assessment Framework v2.3
Практичный фреймворк для оценки рисков торговых стратегий в стиле prop-трейдинговых фирм (Jane Street / Citadel).
Принципы
- Slavishly follow the models — строгое следование правилам без эмоций
- Моделируем состояние рынка, а не предсказываем
- Максимальная защита от overfitting
- Математика и rigor > красивые графики
- Диверсификация, потому что неизвестно, какой рынок будет работать лучше
Модули
| Модуль | Описание |
|---|---|
| Data Module | Загрузка данных через yfinance (OHLCV, last close) |
| Core Metrics | Sharpe, Sortino, Calmar, Max DD, Profit Factor, Win Rate |
| Monte Carlo | Permutation Test (≤ 2000 перестановок) |
| Walk-Forward | Анализ стабильности по фолдам |
| Risk Metrics | VaR / CVaR (95%, 99%), Drawdown Distribution |
| Stress Tests | GFC 2008, COVID 2020, Rate Hike 2022, SVB 2023 |
| Overfitting | Permutation test + OOS degradation |
| Portfolio | Корреляции, slippage impact, capacity estimation |
Запуск
pip install -r requirements.txt
streamlit run app.py
Cloud precompute snapshots
The scheduled Free Batch Snapshot workflow precomputes configured Phoenix
baskets in GitHub Actions and uploads independent ready-result snapshots plus
a manifest as a short-lived artifact. Run it manually with a semicolon-
separated basket list:
python scripts/precompute_baskets.py \
--baskets "AAPL,MSFT,GOOGL,AMZN,NVDA;AAPL,MSFT,NVDA"
This is research-only cache generation. It does not change production weights, verdict logic, or trades.
Для предварительного расчёта готового snapshot (например, через cron):
python -m src.scheduler --snapshot --tickers AAPL,DELL,GOOG
В Streamlit после первого запуска snapshot также поддерживается фоновым обновлением, пока процесс приложения активен.
Self-hosted ClickHouse
Для локального режима без ClickHouse Cloud billing:
docker compose --env-file .env -f docker-compose.clickhouse.yml up -d
CLICKHOUSE_HOST=localhost CLICKHOUSE_USER=default \
CLICKHOUSE_SECURE=false python -m src.scheduler --snapshot --tickers AAPL,DELL,GOOG
Задайте CLICKHOUSE_PASSWORD в локальном .env; секреты не коммитятся.
Аналитические таблицы создаются автоматически при первом старте контейнера.
Self-hosted контейнер доступен только там, где запущен
Docker; для Streamlit Cloud нужен отдельно доступный сервер.
Загрузка наблюдаемой исторической OHLCV-истории в ClickHouse:
python scripts/ingest_ohlcv.py AAPL MSFT NVDA --period 3y
Скрипт использует рабочий Phoenix DataManager/yfinance provider,
пропускает уже загруженные даты и не загружает Monte Carlo или synthetic data.
Бесплатные локальные Redis и object storage
Для локального режима без Cloudflare R2 или Redis billing:
docker compose -f docker-compose.local-services.yml up -d
export REDIS_URL=redis://127.0.0.1:6379
export R2_ENDPOINT=http://127.0.0.1:9100
export R2_ACCESS_KEY=phoenix-local
export R2_SECRET_KEY=phoenix-local-secret
export R2_BUCKET=fly-data
Redis используется для cache/queue/rate limiting, а MinIO предоставляет
S3-совместимый локальный bucket fly-data. Это self-hosted fallback, не
Cloudflare R2; для Streamlit Cloud нужен отдельно доступный сервер.
Batch-расчёты без billing
GitHub Actions запускает бесплатный daily batch snapshot без cloud
credentials и сохраняет результат как artifact на 7 дней. Запустить его
вручную можно через Actions → Free Batch Snapshot → Run workflow, указав
корзину через AAPL,MSFT,GOOGL,AMZN,NVDA. Это batch/research output, а не
постоянный backend и не подтверждение реальной сделки.
Математическая проверка структурных продуктов запускается так:
python scripts/evaluate_structured_products.py
Она считает Brier score, log-loss, ECE на SETTLED_NOTES и проверяет
структурное свойство: при прочих равных более высокий barrier не должен
уменьшать модельную вероятность knock-in.
Для сравнения с прозрачными baseline-моделями:
python scripts/benchmark_structured_models.py
Отчёт явно помечает оценку на SETTLED_NOTES как in-sample research,
потому что текущая модель обучается на этом наборе. Это не заменяет OOS
сравнение с независимыми поставщиками или дилерскими котировками.
Evidence-gated calibration agent запускается так:
python scripts/run_calibration_agent.py
Агент использует только realized notes, разделяет train/OOS, сравнивает кандидата с baseline и сохраняет audit proposal. Production weights не меняются автоматически: успешный кандидат только предлагает PR для review.
Macro features используют бесплатный FRED fallback: VIX, 2Y/10Y ставки,
Fed funds, yield-curve slope, credit spread, dollar index и oil. Stress suite
содержит восемь deterministic-seed сценариев, но каждый результат помечен
source="simulated" и не может использоваться как realized/OOS label.
Проверка расхождения бесплатных OHLCV-источников:
python scripts/check_market_sources.py AAPL MSFT NVDA
Команда сравнивает основной источник с Stooq и только выдаёт quality report; она не подменяет observed data автоматически и не меняет веса модели.
Автоматический planner целей улучшения:
python scripts/plan_improvements.py
Он ранжирует targets по Brier-vs-baseline, probability gap, ECE, OOS sample size и data coverage. Planner создаёт только proposal; production weights и verdict не изменяются.
Безопасный continuous cycle:
python scripts/plan_improvement_cycle.py
Цикл предлагает следующий PR, но останавливается после достижения targets или трёх последовательных циклов без измеримого улучшения.
Пятничный 24-month anchor benchmark запускается вручную или по расписанию:
python scripts/multi_horizon_benchmark.py --baskets 100 --period 5y
Он проверяет стандартный 24-месячный Phoenix-продукт на maturity anchors
6, 12, 18 и 24 месяца назад, считает score и сравнивает outcome с
empirical baseline. Production promotion разрешается только если один кандидат
проходит все четыре anchor-теста;
иначе workflow сохраняет отчёт, но не меняет production.
После benchmark workflow запускает provider-agnostic AI judge panel и сохраняет
ai_judge_panel.json. Базовый режим поддерживает локальную Ollama без API-ключа
и банковской карты (например, ollama pull qwen2.5:7b и
ollama pull deepseek-r1:7b). Также поддерживаются Gemini, OpenAI,
Anthropic, Mistral, Groq, OpenRouter, NVIDIA NIM и Cerebras. Для Ollama можно
добавить Gemma или любую другую совместимую модель через OLLAMA_MODELS.
Облачные бесплатные тарифы имеют лимиты провайдера; Cerebras может требовать
активированный trial balance и возвращает deferred без доступных кредитов.
Добавляйте только нужные
репозиторные GitHub Actions secrets
(GEMINI_API_KEY, CEREBRAS_API_KEY, NVIDIA_API_KEY, OPENAI_API_KEY,
ANTHROPIC_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY, OPENROUTER_API_KEY);
отсутствующий ключ получает статус
skipped, временная квота — deferred. Модели видят только
benchmark/proposal evidence и не могут изменить production weights, verdict или
создать сделки. Завершённые reviews превращаются максимум в три
ai_screening_targets.json research-targets; они направляют следующий
benchmark, но не применяют формулу или веса автоматически.
Деплой на Fly.io
fly deploy
Структура
├── app.py # Streamlit dashboard
├── src/
│ ├── assessor.py # StrategyRiskAssessor — главный класс
│ ├── data_module.py # Загрузка данных (yfinance)
│ ├── core_metrics.py # Метрики, Monte Carlo, Walk-Forward
│ ├── risk_metrics.py # VaR, CVaR, Stress Tests
│ ├── overfitting.py # Проверки на overfitting
│ └── portfolio.py # Корреляции, slippage, capacity
├── Dockerfile
├── fly.toml
└── requirements.txt