MCP server by baskaev
RootLord Trader Workspace
RootLord Trader Workspace - набор локальных модулей для сбора рыночных данных, подготовки датасетов, обучения торговых моделей, оценки риска, backtest, paper/sandbox-журнала и выдачи этих данных через локальный HTTP API для AI-агента RootLord.
Репозиторий хранит код, тесты, конфиги-примеры и описание контрактов. Секреты, browser/session state, parquet-данные, модели, отчеты, логи и runtime-файлы по умолчанию хранятся вне проекта: C:\Users\tamu\.rootlord\TraderMcpRootlord\....
Для Чего Нужен
Проект был нужен как локальная инфраструктура для торгового агента:
- собрать исторические свечи, инструменты, новости, macro и realtime-данные;
- привести разные источники к стабильным parquet/json/csv артефактам;
- построить базовые, microstructure, news impact, gradient boosting и neural модели;
- посчитать risk, backtest и model evaluation;
- вести paper/sandbox journal без live trading;
- дать агенту единый локальный API вместо прямого доступа к файлам и CLI.
Это исследовательский и sandbox-инструмент. Live trading в API не реализован и намеренно не включен.
Структура
| Модуль | Каталог | Назначение |
| --- | --- | --- |
| market-history | market-history/ | historical OHLCV candles |
| instrument-master | instrument-master/ | instrument reference, ticker mapping, corporate actions |
| realtime-stream | realtime-stream/ | raw market stream, orderbook, trades, realtime candles |
| macro-regime | macro-regime/ | macro series and market regime features |
| news-intelligence | news-intelligence/ | news, fundamentals, sentiment, event mapping |
| paper-sandbox-journal | paper-sandbox-journal/ | paper orders, trades, PnL, Tinkoff Sandbox helpers |
| daily-baseline-model | daily-baseline-model/ | first daily forecasting baseline |
| microstructure-model | microstructure-model/ | intraday microstructure dataset and model |
| risk-engine | risk-engine/ | risk metrics and position sizing |
| backtest-engine | backtest-engine/ | vectorized and event-driven backtests |
| news-impact-model | news-impact-model/ | news impact dataset and predictions |
| decision-engine | decision-engine/ | meta-signal aggregation and final decision layer |
| gradient-boosting-model | gradient-boosting-model/ | stronger classical ML forecast model |
| model-evaluation | model-evaluation/ | model comparison and forward-test metrics |
| neural-trader | neural-trader/ | neural sequence forecast model |
| trader-core | trader_core/ | shared contracts, artifact registry, schemas, storage helpers |
| trader-api | trader_api/ | local HTTP tools API for RootLord |
| workspace-tools | workspace_tools/ | workspace status, validation and readiness helpers |
Имена вроде market-history, decision-engine, neural-trader теперь являются и названиями модулей, и именами каталогов, и project keys для workspace/API команд.
Каждый модуль автономен: у него свои README.md, main.py, requirements.txt, тесты и package-код в trader_data_hub/.
Архитектурное Правило
Проекты связаны через опубликованные артефакты, а не через прямой импорт внутреннего кода друг друга.
Разрешено:
project -> trader_core
project -> parquet/json/csv artifact from another project
Не разрешено:
project -> internal module of another module
Пути к межпроектным артефактам централизованы в trader_core/artifact_registry.py.
Что Не Хранится В Проекте И Git
По умолчанию рабочее состояние уходит в домашнюю папку:
C:\Users\tamu\.rootlord\TraderMcpRootlord\<module>\data
C:\Users\tamu\.rootlord\TraderMcpRootlord\<module>\models
C:\Users\tamu\.rootlord\TraderMcpRootlord\<module>\reports
C:\Users\tamu\.rootlord\TraderMcpRootlord\<module>\.runs
Секреты можно хранить здесь:
C:\Users\tamu\.rootlord\secrets\TraderMcpRootlord.env
C:\Users\tamu\.rootlord\secrets\TraderMcpRootlord\<module>.env
Для совместимости также читаются старые приватные env-пути C:\Users\tamu\.rootlord\secrets\traderModelsAndData.env и C:\Users\tamu\.rootlord\secrets\traderModelsAndData\<module>.env, но новые секреты лучше хранить под именем TraderMcpRootlord.
Project-local .env больше не читается автоматически. Если агент, браузер или сторонняя библиотека случайно создаст cookies/session/profile внутри repo, это поймает:
python workspace.py security-check
Для работы из этой папки с дополнительной защитой запускай shell или команду через guard-скрипт:
.\scripts\private-workspace.ps1
.\scripts\private-workspace.ps1 codex
.\scripts\private-workspace.ps1 python workspace.py status
Он выставляет приватные пути вне repo:
ROOTLORD_HOME -> %USERPROFILE%\.rootlord
ROOTLORD_WORKSPACE_ID -> TraderMcpRootlord
ROOTLORD_STATE_ROOT -> %USERPROFILE%\.rootlord\TraderMcpRootlord
ROOTLORD_SECRETS_ROOT -> %USERPROFILE%\.rootlord\secrets
CODEX_HOME -> %USERPROFILE%\.rootlord\agent-home\codex
XDG_* -> %USERPROFILE%\.rootlord\agent-home\...
Это best-effort изоляция для CLI и browser automation tools, которые уважают эти переменные окружения. Для программ, которые игнорируют env и явно пишут в current working directory, защитой остается security-check и Git pre-commit guard.
Один раз после git init включи Git guard:
python workspace.py install-guards
После этого git commit будет падать, если в repo появились секреты, cookies, browser/session profiles, data, models, reports или .runs.
Корневой .gitignore исключает:
.env,.env.*,secrets.env, ключи и credentials;.rootlord_agent/,.runs/, browser profiles, cookies, sessions,*.log;__pycache__/,*.pyc,.pytest_cache/, virtualenv;data/raw,data/bronze,data/silver,data/gold;models,reports;*.parquet,*.pkl,*.joblib,*.onnx;- архивы
*.tgz,*.zip,*.tar*; - локальные one-off ops scripts с machine-specific путями.
Если нужно восстановить результаты работы, их надо пересобрать локально командами проектов.
Требования
Минимально:
- Python 3.11+ или 3.12+;
pipилиuv;- PowerShell на Windows;
- Git.
Для отдельных модулей нужны дополнительные зависимости из их requirements.txt. Например:
pandas,pyarrow,numpyдля parquet/data pipeline;fastapi,uvicorn,httpxдля API;scikit-learn,lightgbm,torchдля моделей;tinkoff-investmentsтолько для Tinkoff/Sandbox-интеграций.
Быстрый Старт
Из корня репозитория:
python workspace.py status
Если зависимости не установлены глобально, удобнее запускать через uv:
uv run --with pandas --with pyarrow python workspace.py status
Проверить workspace и записать отчет:
python workspace.py report
Отчет будет создан локально:
C:\Users\tamu\.rootlord\TraderMcpRootlord\_workspace\reports\workspace_status.md
Папка _workspace\reports находится вне repo.
Переменные Окружения
Реальные значения держи только в shell env или в приватных env-файлах под C:\Users\tamu\.rootlord\secrets\.... Не создавай .env внутри repo.
Частые переменные:
ROOTLORD_HOME приватная домашняя папка RootLord, default ~/.rootlord
ROOTLORD_WORKSPACE_ID стабильное имя приватного workspace, default TraderMcpRootlord
ROOTLORD_STATE_ROOT приватная папка runtime-данных, default ~/.rootlord/TraderMcpRootlord
ROOTLORD_SECRETS_ROOT приватная папка env-секретов, default ~/.rootlord/secrets
TINKOFF_API_TOKEN token для Tinkoff API/Sandbox
TINKOFF_API_TARGET sandbox или production endpoint для SDK, где поддерживается
TRADER_DATA_ROOT кастомная папка данных, должна быть вне repo
TRADER_MODELS_ROOT кастомная папка моделей, должна быть вне repo
TRADER_REPORTS_ROOT кастомная папка отчетов, должна быть вне repo
TRADER_HTTP_TIMEOUT timeout HTTP-коннекторов
TRADER_API_HOST host локального API, default 127.0.0.1
TRADER_API_PORT port локального API, default 8765
TRADER_API_ALLOW_JOBS включает API job execution, default 0
TRADER_API_ALLOW_SANDBOX_ORDERS включает sandbox order endpoint, default выключено
TRADER_WORKSPACE_ROOT корень workspace для API, если запускаешь API не из repo root
ROOTLORD_ALLOW_PROJECT_STATE аварийный opt-in для project-local state, default 0
Пример приватного env-файла:
New-Item -ItemType Directory -Force "$env:USERPROFILE\.rootlord\secrets" | Out-Null
notepad "$env:USERPROFILE\.rootlord\secrets\TraderMcpRootlord.env"
Внутри файла:
TINKOFF_API_TOKEN=...
Управление Workspace
Корневой CLI:
python workspace.py status
python workspace.py status --json
python workspace.py report
python workspace.py validate
python workspace.py validate --projects instrument-master,decision-engine
python workspace.py security-check
python workspace.py install-guards
python workspace.py production-readiness
python workspace.py all
python workspace.py all --projects instrument-master,decision-engine
Что делают команды:
status- проверяет наличие ожидаемых артефактов по всем проектам;status --json- то же самое в JSON;report- пишет markdown-отчет вreports/workspace_status.md;validate- запускает validation-команды проектов;validate --projects instrument-master,decision-engine- валидирует только выбранные проекты;security-check- падает, если внутри repo появились.env, cookies, browser/session profiles,data,models,reportsили.runs;install-guards- подключает versioned Git pre-commit hook из.githooks/;production-readiness- пишет readiness-отчет;all- делает status report и validation одним запуском.
Типовой Порядок Сборки
Базовый pipeline:
instrument-master
-> market-history
-> realtime-stream
-> macro-regime
-> news-intelligence
-> paper-sandbox-journal
daily-baseline-model
-> gradient-boosting-model
-> neural-trader
-> model-evaluation
risk-engine
backtest-engine
news-impact-model
decision-engine
Практически:
cd instrument-master
python main.py --help
cd ../market-history
python main.py --help
cd ..
python workspace.py validate --projects instrument-master,market-history
CLI workspace.py --projects принимает новые имена модулей. Старые числовые IDs временно мапятся на новые имена для совместимости. У каждого модуля подробные команды описаны в его локальном README.md.
Модули
market-history (market-history/)
Назначение: загрузка исторических свечей MOEX/Tinkoff, нормализация OHLCV, запись model-ready parquet.
Основные артефакты:
market-history/data/gold/model_ready/candles.parquet
market-history/reports/candles_quality_report.md
Проверка:
cd market-history
python main.py validate-candles --ticker SBER --interval 1d
instrument-master (instrument-master/)
Назначение: справочник инструментов, ticker/FIGI/UID mapping, corporate actions.
Основные артефакты:
instrument-master/data/gold/symbol_master.parquet
instrument-master/data/gold/corporate_actions.parquet
instrument-master/reports/instrument_master_quality_report.md
Проверка:
cd instrument-master
python main.py validate
realtime-stream (realtime-stream/)
Назначение: сбор raw stream events, orderbook/trades, resample в 1m realtime candles.
Основные артефакты:
realtime-stream/data/raw/stream_events/...
realtime-stream/data/silver/realtime_candles/...
realtime-stream/reports/realtime_stream_quality_report.md
Проверка:
cd realtime-stream
python main.py validate --date 2026-05-08 --warn-only
macro-regime (macro-regime/)
Назначение: macro daily series, market regime features, macro quality checks.
Основные артефакты:
macro-regime/data/gold/macro_daily.parquet
macro-regime/data/gold/market_regime_features.parquet
macro-regime/reports/macro_quality_report.md
news-intelligence (news-intelligence/)
Назначение: сбор RSS/news/fundamentals, очистка, sentiment/event classification, ticker mapping.
Основные артефакты:
news-intelligence/data/silver/news_events.parquet
news-intelligence/reports/news_quality_report.md
news-intelligence/reports/news_event_study.md
paper-sandbox-journal (paper-sandbox-journal/)
Назначение: paper signals, paper orders, paper trades, PnL report и Tinkoff Sandbox helpers.
Основные артефакты:
paper-sandbox-journal/data/gold/signals.parquet
paper-sandbox-journal/data/gold/paper_orders.parquet
paper-sandbox-journal/data/gold/paper_trades.parquet
paper-sandbox-journal/reports/sandbox_journal_quality_report.md
Sandbox-заявки специально выключены по умолчанию. Для API endpoint order нужен отдельный guard:
$env:TRADER_API_ALLOW_SANDBOX_ORDERS="1"
daily-baseline-model (daily-baseline-model/)
Назначение: первый daily forecasting baseline по MOEX equities.
Артефакты:
daily-baseline-model/data/silver/baseline_daily_dataset.parquet
daily-baseline-model/models/baseline_daily/model.pkl
daily-baseline-model/models/baseline_daily/metrics.json
microstructure-model (microstructure-model/)
Назначение: microstructure dataset и intraday signal model на realtime/orderbook/trade данных.
Артефакты:
microstructure-model/data/silver/microstructure_dataset.parquet
microstructure-model/data/gold/microstructure_signals.parquet
microstructure-model/models/microstructure_1m/model.pkl
risk-engine (risk-engine/)
Назначение: volatility, drawdown, position sizing, portfolio risk estimates.
Артефакты:
risk-engine/data/gold/risk_estimates.parquet
risk-engine/reports/risk_report.md
backtest-engine (backtest-engine/)
Назначение: vectorized/event-driven backtest, costs, slippage, equity curve, trades.
Артефакты:
backtest-engine/data/gold/backtest_equity.parquet
backtest-engine/data/gold/backtest_trades.parquet
backtest-engine/reports/backtest_report.md
news-impact-model (news-impact-model/)
Назначение: dataset и модель влияния новостей на последующую доходность.
Артефакты:
news-impact-model/data/silver/news_impact_dataset.parquet
news-impact-model/models/news_impact/model.pkl
news-impact-model/models/news_impact/impact_predictions.parquet
decision-engine (decision-engine/)
Назначение: объединение сигналов моделей, risk, news и regime features в итоговые meta-signals.
Артефакты:
decision-engine/data/gold/meta_signals.parquet
decision-engine/reports/decision_report.md
gradient-boosting-model (gradient-boosting-model/)
Назначение: сильная classical ML модель поверх baseline dataset.
Артефакты:
gradient-boosting-model/data/silver/gradient_boosting_dataset.parquet
gradient-boosting-model/models/gradient_boosting/model.pkl
gradient-boosting-model/data/gold/gb_signals.parquet
model-evaluation (model-evaluation/)
Назначение: сравнение моделей, common-window evaluation, sensitivity по assumptions.
Артефакты:
model-evaluation/data/gold/model_evaluation.parquet
model-evaluation/data/gold/model_evaluation_common.parquet
model-evaluation/data/gold/model_evaluation_sensitivity.parquet
model-evaluation/reports/model_evaluation_report.md
neural-trader (neural-trader/)
Назначение: neural sequence model для прогнозов и neural signals.
Артефакты:
neural-trader/data/silver/neural_trader_dataset.parquet
neural-trader/models/neural_trader/model.pkl
neural-trader/models/neural_trader/model.pt
neural-trader/data/gold/neural_signals.parquet
Локальный Tools API
API нужен, чтобы RootLord или другой агент мог обращаться к workspace через HTTP:
- читать инструменты, свечи, macro, news, fundamentals;
- получать predictions, risk, backtest, evaluation;
- читать и писать paper journal;
- работать с Tinkoff Sandbox helpers;
- запускать allowlist jobs, если явно включено.
Запуск:
uv run --isolated --with fastapi --with uvicorn --with pandas --with pyarrow python -m trader_api.main
Адреса после запуска:
Swagger UI: http://127.0.0.1:8765/docs
Health: http://127.0.0.1:8765/api/v1/health
Tools manifest: http://127.0.0.1:8765/api/v1/tools/manifest
OpenAPI: http://127.0.0.1:8765/openapi.json
Smoke test:
uv run --isolated --with fastapi --with httpx --with pandas --with pyarrow python -m trader_api.smoke_test
Основные API Endpoints
Workspace:
GET /api/v1/health
GET /api/v1/projects
GET /api/v1/artifacts
GET /api/v1/artifacts/{name}/summary
GET /api/v1/tools/manifest
Market data:
GET /api/v1/instruments
GET /api/v1/instruments/{ticker}
GET /api/v1/corporate-actions/{ticker}
GET /api/v1/candles/{ticker}
GET /api/v1/macro
GET /api/v1/regimes
GET /api/v1/news
GET /api/v1/fundamentals/{ticker}
Realtime:
GET /api/v1/realtime/status
GET /api/v1/realtime/events
GET /api/v1/realtime/orderbook/latest
GET /api/v1/realtime/trades/latest
GET /api/v1/realtime/candles
Models, risk, backtest:
GET /api/v1/predictions/baseline
GET /api/v1/predictions/gradient_boosting
GET /api/v1/predictions/neural_trader
GET /api/v1/microstructure/signals
GET /api/v1/news-impact/predictions
GET /api/v1/meta-signals
GET /api/v1/signals/latest
GET /api/v1/risk/{ticker}
GET /api/v1/backtest/metrics
GET /api/v1/backtest/equity
GET /api/v1/backtest/trades
GET /api/v1/evaluation
GET /api/v1/models/baseline/metrics
GET /api/v1/models/gradient_boosting/metrics
GET /api/v1/models/neural_trader/metrics
GET /api/v1/models/news_impact/metrics
Journal and sandbox:
GET /api/v1/journal/signals
POST /api/v1/journal/signals
GET /api/v1/journal/orders
POST /api/v1/journal/orders
GET /api/v1/journal/trades
POST /api/v1/journal/trades
GET /api/v1/journal/pnl
GET /api/v1/sandbox/status
GET /api/v1/sandbox/accounts
POST /api/v1/sandbox/open-account
POST /api/v1/sandbox/pay-in
GET /api/v1/sandbox/portfolio
GET /api/v1/sandbox/operations
POST /api/v1/sandbox/cancel-order
POST /api/v1/sandbox/order
Jobs:
GET /api/v1/jobs
POST /api/v1/jobs/{project}/{command}
GET /api/v1/jobs/{job_id}
POST /api/v1/jobs/{project}/{command} выключен по умолчанию. Включение:
$env:TRADER_API_ALLOW_JOBS="1"
python -m trader_api.main
Безопасность
Правила эксплуатации:
- не коммить
.env, токены, ключи, логи, архивы, parquet, модели и отчеты; - хранить
TINKOFF_API_TOKENтолько в shell env илиC:\Users\tamu\.rootlord\secrets\...; - запускать
python workspace.py security-checkпосле авторизаций в браузере/Telegram/агентах; - перед push проверять
git status --ignored --short; - не включать
TRADER_API_ALLOW_JOBS, если API доступен не только локально; - не включать
TRADER_API_ALLOW_SANDBOX_ORDERS, если не понимаешь, какая заявка будет отправлена; - не менять
TRADER_API_HOSTна публичный интерфейс без auth/proxy/firewall.
Проверка на случайно добавленные опасные файлы:
python workspace.py security-check
git status --short
git ls-files | Select-String -Pattern "(\.env$|\.log$|\.tgz$|__pycache__|\.pyc$|\.parquet$|\.pkl$|/data/|/models/|/reports/)"
Ожидаемо: в git ls-files не должно быть совпадений по реальным данным, моделям, логам и секретам.
Работа С Git
Обычный безопасный цикл:
git status --short
git add README.md trader_core trader_api workspace_tools
git status --short
git commit -m "update docs"
git push
Перед массовым git add . проверь, что .gitignore покрывает новые runtime-папки.
Где Смотреть Контракты
Главные файлы:
trader_core/artifact_registry.py список ожидаемых артефактов и их путей
trader_core/schemas.py общие схемы
workspace_tools/projects.py список проектов и validation-команд
trader_api/rootlord_tools.json статический tools manifest
trader_api/app.py HTTP endpoints
Диагностика
Нет артефактов:
python workspace.py status
python workspace.py validate --projects <project-key>
Не стартует API:
python -m trader_api.main
Проверь TRADER_API_PORT, зависимости fastapi/uvicorn, и что команда запущена из корня repo или задан TRADER_WORKSPACE_ROOT.
Нет Tinkoff/Sandbox доступа:
$env:TINKOFF_API_TOKEN
Если переменная пустая, sandbox endpoints вернут ошибку или статус token_present=false.