Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
Educational trading platform: observe the market and compare agents' decisions without real money.
AI translation
Учебная торговая платформа: наблюдайте за рынком и сравнивайте решения агентов без реальных денег.
FinanceTypeScript · JavaGitHub @HqzdevOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
TRADR — full-stack симулятор рынка. Пользователь начинает со 100 000 учебных долларов, задаёт цель, распределяет капитал между агентами и наблюдает, как они самостоятельно покупают и продают акции. Ручной торговли нет: каждое действие связано с агентом и имеет понятное объяснение. Проект предназначен для обучения и экспериментов. Он не использует реальные деньги и не является инвестиционной рекомендацией.Read the full README ↗
TRADR — full-stack симулятор рынка. Пользователь начинает со 100 000 учебных долларов, задаёт цель, распределяет капитал между агентами и наблюдает, как они самостоятельно покупают и продают акции. Ручной торговли нет: каждое действие связано с агентом и имеет понятное объяснение.
Проект предназначен для обучения и экспериментов. Он не использует реальные деньги и не является инвестиционной рекомендацией.
Этот раздел описывает продукт как единое ТЗ для разработки. Он фиксирует границы системы, обязательные пользовательские сценарии, правила денег и критерии готовности. Если описание ниже расходится с текущим кодом, разделы «Что уже работает» и «Ограничения» имеют приоритет над будущими задачами.
TRADR должен дать пользователю безопасную учебную среду, в которой можно наблюдать за решениями автономных торговых агентов, понимать связь между рыночными данными, риском и результатом и проверять разные стратегии без реальных платежей, брокерских счетов и вывода средств.
Главный пользовательский результат — не обещание прибыли, а объяснимый цикл:
данные рынка → анализ агента → решение → заявка → сделка → изменение позиции
→ пересчёт капитала → запись объяснения и результата
Каждое действие, которое меняет учебный капитал или состояние агента, должно быть связано с владельцем аккаунта, иметь серверную проверку и оставлять аудируемый след.
Входит в продукт:
Не входит в продукт без отдельного согласования:
| Сущность | Ответственность |
|---|---|
| User | Учётная запись, email, пароль и профиль пользователя. |
| Account | Единственный учебный счёт пользователя: резерв, стартовый капитал, валюта, цель и ускорение. |
| Agent | Автономный участник симуляции со стратегией, статусом и принадлежностью к Account. |
| AgentWallet | Деньги конкретного агента; только он может оплачивать его заявки и позиции. |
| AgentPosition | Открытая позиция агента по инструменту и её текущая учебная стоимость. |
| Order | Намерение совершить операцию с типом, стороной, количеством, ценой и источником. |
| Trade | Исполненная операция с комиссией, временем и итоговой стоимостью. |
| AgentDecisionLog | Объяснение: что агент анализировал, какое действие выбрал и какие правила проверил. |
| Instrument | Учебный рыночный инструмент с тикером, валютой, котировкой и свечами. |
| Account settings | Сохранённые пользовательские предпочтения и defaults, которые не заменяют доменные правила. |
userId из JWT/Authentication, а не из
тела запроса. Пользователь не видит и не изменяет чужой Account, Agent или
историю.BigDecimal и масштаб 2. Для идентификаторов и
внешних связей используются UUID.Dashboard показывает минимум:
Числа на Dashboard рассчитываются из одного согласованного среза данных. UI не суммирует несовместимые ответы самостоятельно и показывает время последнего успешного обновления.
Каждая заявка проходит последовательность:
OrderCalculator рассчитывает денежные значения без плавающей арифметики;TradingService атомарно меняет кошелёк, позицию и результат сделки;Trade и AgentDecisionLog;Нельзя допускать отрицательный баланс, продажу чужой позиции, повторное исполнение одной заявки, изменение уже исполненной сделки или обход stop-loss, take-profit и cooldown через повторный HTTP-запрос.
Раздел настроек состоит из семи самостоятельных экранов. Настройки должны
сохраняться на backend, загружаться при открытии страницы и иметь состояния
loading, dirty, saving, saved и error. Локальное состояние формы не
является источником истины.
Профиль
Уведомления
Доставка должна быть идемпотентной: повторная попытка worker не создаёт дубль. Торговая транзакция публикует событие, а email/push отправляются отдельно и могут повториться с backoff.
Безопасность
Торговля
Эти значения являются defaults для будущих решений/агентов. Они не переписывают уже исполненные ордера и не могут отменить бюджет, комиссию или доменные ограничения.
Данные
Экспорт ограничивается текущим пользователем, потоково формируется на backend, экранирует CSV-значения от formula injection и не загружает весь результат в память браузера.
Отображение
Intl.NumberFormat и
Intl.DateTimeFormat, а не локальными шаблонами компонентов;Метрики
Метрики и benchmark должны считаться за один период и возвращать источник, время среза и статус свежести. При отсутствии данных показывается «нет данных», а не нулевой результат.
/api/v1.Authorization: Bearer <access-token>.Минимальные существующие группы API:
/api/v1/auth/* регистрация, вход и токены
/api/v1/dashboard агрегированный обзор аккаунта
/api/v1/account/* настройки учебного счёта
/api/v1/agents/* агенты, бюджеты, решения и позиции
/api/v1/market/* инструменты, котировки и свечи
/api/v1/trading/* заявки и сделки учебного движка
При добавлении новой функции сначала фиксируются request/response DTO, коды ошибок, права доступа, транзакционная граница и обратная совместимость.
Функция считается готовой, если:
git diff --check, web tests, backend tests и production build проходят;Уже работает: авторизация, учебный счёт, Dashboard, синтетический рынок, агенты с кошельками и позициями, сделки, комиссии, decision log, WebSocket и базовое изменение цели/ускорения аккаунта.
Отдельно описаны как будущие задачи: кастомные агенты, риск-профили акций,
команды агентов, Time Skip, сценарий нулевого бюджета, расширенные настройки,
Google-вход и live-котировки. Подробные шаги находятся в документации задач
и доступны в интерфейсе по адресу /docs после запуска frontend.
# 1. Подготовьте переменные окружения.
cp apps/backend/.env.example apps/backend/.env
cp apps/web/.env.example apps/web/.env.local
# 2. В apps/backend/.env задайте надёжный JWT_SECRET длиной не менее 32 символов.
# 3. Запустите базу данных.
docker compose -f apps/backend/docker-compose.dev.yml up -d
# 4. Установите зависимости один раз из корня.
npm install
# 5. Запустите фронтенд и бэкенд вместе.
npm run dev
После запуска:
Для запуска по отдельности доступны npm run dev:web и npm run dev:backend.
tradr/
├── apps/
│ ├── web/ # Next.js: пользовательский интерфейс
│ └── backend/ # Spring Boot: API, рынок, торговля, агенты
├── design/ # Pen-макеты, экспорт экранов и визуальные материалы
├── qa/ # сценарии и результаты проверок интерфейса
├── ARCHITECTURE.md # границы модулей и обмен данными
├── DEVELOPMENT.md # локальная разработка и команды
└── CONTRIBUTING.md # правила внесения изменений
Frontend обращается к REST API по адресу http://localhost:8080/api/v1 и
получает котировки через WebSocket. Backend хранит данные в PostgreSQL и
применяет миграции Flyway V1–V15 при запуске.
Котировки сейчас синтетические. Реальный рыночный провайдер ещё не реализован, поэтому переменная с API-ключом сама по себе не включит настоящие цены. Проект не использует реальные деньги и не является инвестиционной рекомендацией.