Документация · v0.3.0

Market Oracle API

Справочник для интеграции ботов и AI-агентов. Сверху — база для быстрого старта; ниже — полный набор endpoint'ов, лимиты, ошибки и контракты данных.

Назначение

Market Oracle — только источник рыночных данных. Он не открывает сделки и не управляет позициями. Между биржами и клиентами — единый подготовленный слой: закрытые бары, индикаторы, стаканные факты, макро и режим рынка.

Главное правило: торговые решения — только по закрытому 1m-бару (closed: true, bar −1). Дедупликация сигнала: symbol:ts.

Быстрый старт

1. Health

Проверить status=ok, Redis и WS-провайдер.

GET /health

2. Тариф

Лимиты daily / RPM / WS / expires_at.

GET /v1/me

3. Символы

Брать только ready=true.

GET /v1/symbols

4. Stream

Подписка на закрытые бары.

WS /v1/stream

5. Context

Снимок перед решением (60–90 с).

GET /v1/context/{symbol}

6. Сигнал

Один раз на закрытый бар.

dedupe symbol:ts
# Пример (подставьте свой BASE и ключ) curl.exe -s https://HOST/health curl.exe -s https://HOST/v1/me -H "Authorization: Bearer mo_…" curl.exe -s "https://HOST/v1/context/BTCUSDT" -H "Authorization: Bearer mo_…"

Авторизация

Для всех маршрутов /v1/* нужен заголовок:

Authorization: Bearer mo_…

Готовность символа

ПолеГдеСмысл
bars_1m / bar_countsymbols, statusсколько 1m баров в Redis
readysymbols, status, contexttrue при ≥ 200 баров (прогрев EMA200)
historyтам жеwarming / ready / full_day (≥1440)
indicators_readylatest, status, contextесть базовый набор ema20+rsi14+atr14
data_quality.scorecontext, status0…100; для входа требуйте ≥ 70
lag_secstatus, contextвозраст закрытого бара; >120 режет score до ≤69
Важно: readyindicators_ready. Для EMA200 нужны оба. Не торгуйте «тёплую» пару с 15 свечами как BTC с сутками истории.

GET /v1/context/{symbol}

Главный endpoint для бота/AI. Один ответ вместо 8–10 вызовов:

БлокДля чего
bar + indicatorsсигнал только по закрытому 1m
ticker24h объём/изменение, best bid/ask
depthspread, imbalance, стены (live-снимок)
ready / history / lag_secможно ли торговать пару
macro_event_soonпауза перед FOMC/CPI (high impact <60 мин)
derivatives + liquidationsfunding / OI / каскады
macro_snapshotF&G, dominance, стейблы, DXY/10Y
cross_exchangevenue consensus, divergence
market_regimecorr к BTC, vol, breadth
data_qualityscore + flags

Не входит в context (запрашивается отдельно): длинная история, календарь событий, live WS, /v1/meta, закрытая минутная microstructure-история.

Ограничение: context_scope="live_snapshot", historical_safe=false — это не point-in-time история для бэктеста.

WebSocket /v1/stream

ws(s)://HOST/v1/stream # или ws(s)://HOST/v1/stream?token=mo_…
  1. После connect сервер шлёт {"type":"hello",…}
  2. Клиент: {"op":"subscribe","symbols":["*"]} или список пар
  3. Для стакана: "microstructure": true → доп. событие microstructure_close
  4. Событие сигнала: {"type":"bar_close","symbol":"BTCUSDT","bar":{…},"interval":"1m"}
  5. Ping: {"op":"ping"}pong

Join bar_close и microstructure_close строго по symbol + ts, не по времени получения. Push по WS не списывает daily quota.

Тарифы и лимиты

ТарифЗапросов в деньRPMМин. паузаMax WS
free6 000302 с (2000 мс)1
basic25 000120500 мс2
pro100 000180350 мс3

Пауза между запросами ≈ 60 000 мс ÷ RPM (равномерный темп под минутный лимит). Тяжёлые endpoint'ы (context/history = вес 3) списывают больше из дневного лимита; /v1/me, /v1/symbols, /v1/meta/*, /v1/calendar — вес 0 по дню (RPM и пауза всё равно действуют). Push по WS не тратит дневной лимит.

При лимите: HTTP 429, заголовки X-RateLimit-*, Retry-After, X-Quota-*. Смотрите поле status/code в теле.

Практика: на basiccontext раз в 60–90 с на активную пару; на free — реже (бюджет 6k/день). Не штормите параллельными десятками context.

Все endpoint'ы

Служебные

МетодПутьОписание
GET/health, /v1/healthстатус, Redis, active_provider, failover
GET/metricsPrometheus-текст
GET/v1/meтариф ключа, usage, weights, expires_at

Ключи (admin)

МетодПутьОписание
GET / POST/v1/keysсписок / создать (name, tier, expires_at)
PATCH / DELETE/v1/keys/{id}сменить tier/срок / отозвать

Символы и статус

МетодПутьОписание
GET/v1/symbolsактивные пары + bars / ready / history
POST/v1/symbolsдобавить пару → bootstrap + WS reload
DELETE/v1/symbols/{symbol}убрать из реестра
GET/v1/status/{symbol}lag, ready, indicators, quality
GET/v1/meta/{symbol}tick / step / minNotional

История и синхронизация

МетодПутьОписание
GET/v1/history/{symbol}?interval=1m|1h|4h|1d|1w, limit, from, to
POST/v1/history/batchдо 20 пар; опционально include_microstructure
POST/v1/sync/bootstrapхолодный дамп из Redis для клиента
GET/v1/latest?symbols=последний закрытый бар + ticker
GET/v1/indicators/{symbol}только индикаторы по истории
IntervalГлубинаИндикаторы
1m21 день (live WS)да
1h~9 меснет (null)
4h2 годанет
1d3 годанет
1w5 летнет

Срез рынка

МетодПутьОписание
GET/v1/context/{symbol}полный AI-снимок
GET/v1/depth/{symbol}live top-20 / recent seconds (execution filter)
GET/v1/derivatives/{symbol}funding, OI, ликвидации
GET/v1/calendar?hours=, ?high_only=true
GET/v1/macroF&G (+history ?fng_days=), dominance, стейблы, FRED
GET/v1/quotes/{symbol}BBO consensus Binance/Bybit/OKX
GET/v1/market-regimecorr / vol / breadth из своих 1h

Microstructure

МетодПутьОписание
GET/v1/microstructure/{symbol}закрытая минутная история стакана
GET/v1/microstructure/{symbol}/latestпоследняя закрытая минута

Агрегация top-20 @ 1 Hz в UTC-минуту. Live depth в context и закрытая microstructure — разные сущности. Исторический depth с биржи задним числом не восстанавливается.

Индикаторы на 1m-баре

Инкрементальный расчёт, batch-reference тесты. Поля — decimal-строки; во время прогрева могут быть null.

Ошибки и статусы

status / codeHTTPКогда
ok200успех
key_missing / key_invalid / key_expired / key_revoked401проблемы с ключом
unauthorized401неверный admin token
rate_limited / quota_exceeded / too_fast / ws_limit429лимиты тарифа
unavailable503auth/БД временно недоступны

Клиент: сначала смотрите status (или code), не парсите текст error. После 429 — sleep на retry_after_ms / Retry-After.

Чеклист для AI-агента / бота

  1. GET /healthstatus == "ok", Redis ok, WS connected.
  2. GET /v1/me → учесть tier, daily, RPM, min_interval_ms, expires_at.
  3. GET /v1/symbols → фильтр ready == true (лучше full_day).
  4. WS subscribe; для стакана — microstructure: true.
  5. На bar_close — анализ один раз (дедуп symbol:ts).
  6. Перед входом / по расписанию — GET /v1/context/{symbol}; gate: data_quality.score ≥ 70, ready, indicators_ready.
  7. Опционально через 1–2 с после сигнала: GET /v1/depth/{symbol}?seconds=3 как execution-filter (не меняет исторический сигнал бара).
  8. После reconnect: пауза ≥ min_interval → /v1/history (+ microstructure) → exact join.
  9. Не хранить admin token в клиенте. Не публиковать mo_… в репозитории.
Источник истины в репозитории: docs/DOC.md, docs/AUTH.md, docs/agents.md. Эта страница — публичная выжимка той же спецификации.