Market Oracle — REST и WebSocket API рыночных данных для торговых систем и AI-агентов: закрытые бары, проверенные индикаторы, микроструктура стакана, макро-контекст и режим рынка. Одним запросом. Решения принимаете вы — мы поставляем только факты.
Oracle не открывает сделки и не управляет позициями. Его задача — дать вашим алгоритмам корректные данные, на которых можно строить решения.
Торговые решения формируются исключительно по закрытому 1m-бару (closed: true). Никакого заглядывания в будущее — данные всегда point-in-time корректны.
EMA, RSI, ATR, ADX(+DI), VWAP, Bollinger, OBV, MFI и CVD считаются на каждом нативном ТФ и покрыты тестами. Закрытый бар и индикаторы пишутся атомарно, состояние восстанавливается после сбоев.
Один вызов GET /v1/context/{symbol} отдаёт всё для решения: бар, стакан, деривативы, макро и режим рынка. Машинно-читаемые форматы, явные лимиты, предсказуемые ошибки.
Context, quotes и история — только по этим символам. Свой тикер добавить нельзя; актуальный ready — в GET /v1/symbols.
Главный endpoint для бота и AI-агента. Бар с индикаторами, тикер, live-стакан, trade_cost / cost_risk, live HTF, деривативы, макро, сверка котировок, режим рынка и data_quality — вместо 8–10 отдельных вызовов.
Единственный источник сигнала — закрытый бар (closed: true). Остальное — фильтры: tradable, макро-пауза, data_quality.score ≥ 70.
Один core на 1m и на нативных 5m/15m/30m/1h/4h/1d/1w. Decimal-строки; во время прогрева поле null, не ноль.
Закрытая минутная агрегация top-20: spread, imbalance, стены, pressure.
/v1/microstructure/{symbol}Fear&Greed, dominance, stablecoins, DXY, 10Y yield.
/v1/macroFunding, open interest, каскады ликвидаций.
/v1/derivatives/{symbol}Корреляция с BTC, realized vol, breadth рынка.
/v1/market-regimeМедиана mid по нескольким источникам с контролем расхождений — защита от «битого» тика перед входом. Символ — только из списка выше.
/v1/quotes/{symbol}bar_close + opt-in microstructure_close; REST для восстановления пропусков.
WS /v1/streamБлижайшие события (FOMC, CPI) с уровнем влияния.
/v1/calendarНативные свечи, не склейка минуток: 5m 60д, 15m 90д, 30m 120д, 1h ~9 мес, 4h 2г, 1d 3г, 1w 5л. WS закрывает только 1m.
/v1/history/{symbol}?interval=…Типовой сценарий для AI-агента или торгового бота.
Сначала API-ключ mo_… (кнопка «Получить ключ»). Дальше каждый запрос к /v1/* и WebSocket — заголовок Authorization: Bearer mo_…. Без ключа бары, context и stream недоступны. Публичный только GET /health.
Убедиться, что status=ok и бары свежие.
Дневные лимиты, RPM, число WS и срок действия ключа — чтобы подобрать частоту запросов.
Только базовый набор (BTC, ETH, SOL, BNB, DOGE, XRP) и только ready=true, желательно history=full_day.
Получать bar_close в реальном времени. Стакан — опционально через microstructure:true.
Перед входом: cost, HTF, quality. Вход только если tradable и score ≥ 70.
Ровно один раз на закрытый бар, с дедупликацией по ключу symbol:ts.
Получаете API-ключ — и работаете. Всё управление с одной страницы.
Уже есть ключ?
Оплата в рублях: только российские карты МИР, Visa и Mastercard (банки РФ) и СБП. Карты иностранных банков не принимаются. Услуга электронная: API-ключ на e-mail. Условия, отказ и возврат — в лицензионном соглашении (публичная оферта).
Мануал написан так, чтобы разработчик мог подключить Oracle без лишних вопросов. AI-агенту скормите Markdown-спеку — отдельная ссылка ниже.
# Python — только стандартная библиотека import json, urllib.request BASE = "https://api.market-oracle.pro" KEY = "mo_…" req = urllib.request.Request(BASE + "/v1/context/BTCUSDT", headers={"Authorization": f"Bearer {KEY}"}) with urllib.request.urlopen(req, timeout=15) as r: ctx = json.load(r) # Сигнал — только по закрытому бару if (ctx["bar"]["closed"] and ctx["data_quality"]["score"] >= 70 and ctx["cost_risk"]["tradable"]): decide(ctx["bar"])
// Node.js 18+: fetch встроен const BASE = "https://api.market-oracle.pro"; const KEY = "mo_…"; const res = await fetch(BASE + "/v1/context/BTCUSDT", { headers: { Authorization: `Bearer ${KEY}` } }); const ctx = await res.json(); // Сигнал — только по закрытому бару if (ctx.bar.closed && ctx.data_quality.score >= 70 && ctx.cost_risk.tradable) { decide(ctx.bar); }
{
"symbol": "BTCUSDT",
"market": "spot",
"interval": "1m",
"ts": 1784179275000,
"context_scope": "live_snapshot",
"historical_safe": false,
"bar": {
"ts": 1784179200000,
"open": "65000.00",
"high": "65080.00",
"low": "64950.00",
"close": "65040.00",
"volume": "123.45",
"quote_volume": "8023456.78",
"trades": 4120,
"closed": true,
"taker_buy_volume": "60.10",
"indicators": {
"ema20": "64910.12",
"ema50": "64500.00",
"ema200": "62000.00",
"rsi14": "54.20",
"atr14": "180.50",
"vwap": "64980.00",
"vol_sma20": "95.00",
"adx14": "22.10",
"plus_di14": "24.50",
"minus_di14": "17.80",
"di_side": "1",
"obv": "1500000.00",
"mfi14": "48.00",
"cvd_delta": "-3.25",
"ema50_slope_pct": "0.031000",
"ema_slope_abs": "0.031000",
"atr50": "210.00",
"atr_ratio_14_50": "0.859524",
"volume_usd": "8023456.78",
"volume_rate": "8023456.78",
"bb_mid": "64900.00",
"bb_upper": "65200.00",
"bb_lower": "64600.00",
"bb_width": "0.009244",
"body": "0.307692",
"wick_balance": "0.153846",
"close_pos": "0.692308",
"candle_q": "0.261538",
"range_ratio": "0.720222",
"atr_pct": "0.277521",
"last_swing_high": "65200.00",
"last_swing_low": "64400.00"
}
},
"ticker": {
"ts": 1784179274000,
"last": "65042.10",
"bid": "65042.00",
"ask": "65042.20",
"open_24h": "64200.00",
"high_24h": "65300.00",
"low_24h": "63800.00",
"volume_24h": "28000.50",
"quote_volume_24h": "1800000000.00",
"price_change_pct_24h": "1.25",
"weighted_avg_24h": "64890.00"
},
"depth": {
"ts": 1784179274000,
"best_bid": "65042.00",
"best_ask": "65042.20",
"spread_pct": "0.000307",
"bid_volume": "55.00",
"ask_volume": "45.00",
"imbalance": "0.5500",
"bid_wall": {
"price": "65000.00",
"qty": "12.50",
"distance_pct": "-0.064727"
},
"ask_wall": {
"price": "65100.00",
"qty": "8.00",
"distance_pct": "0.089019"
},
"levels": 20
},
"bar_count": 30240,
"ready": true,
"history": "full_day",
"lag_sec": 75,
"indicators_ready": true,
"data_quality": {
"score": 92,
"flags": []
},
"freshness": {
"ticker": {
"available": true,
"fresh": true,
"age_sec": 1,
"max_age_sec": 30
},
"depth": {
"available": true,
"fresh": true,
"age_sec": 1,
"max_age_sec": 10
},
"macro_snapshot": {
"available": true,
"fresh": true,
"age_sec": 900,
"max_age_sec": 7200
},
"market_regime": {
"available": true,
"fresh": true,
"age_sec": 900,
"max_age_sec": 7200
}
},
"macro_event_soon": false,
"next_macro_event": {
"ts": 1784246400000,
"title": "CPI m/m",
"country": "USD",
"impact": "high"
},
"derivatives": {
"snapshot": {
"ts": 1784179270000,
"mark_ts": 1784179270000,
"mark_price": "65045.10",
"index_price": "65040.00",
"funding_rate": "0.000100",
"next_funding_ts": 1784196000000,
"open_interest": "85000.50",
"open_interest_ts": 1784179260000
},
"funding_7d": {
"samples": 21,
"from_ts": 1783574475000,
"to_ts": 1784160000000,
"funding_ma_7d": "0.000080",
"funding_std_7d": "0.000050"
},
"stale": false
},
"liquidations": {
"windows": {
"five_min": {
"window_sec": 300,
"from_ts": 1784178975000,
"to_ts": 1784179275000,
"count": 3,
"total_long_qty": "1.80",
"total_short_qty": "0.60",
"total_long_value": "120000.00",
"total_short_value": "40000.00"
},
"one_hour": {
"window_sec": 3600,
"from_ts": 1784175675000,
"to_ts": 1784179275000,
"count": 40,
"total_long_qty": "14.00",
"total_short_qty": "8.00",
"total_long_value": "900000.00",
"total_short_value": "500000.00"
}
}
},
"macro_snapshot": {
"ts": 1784178375000,
"fear_greed": {
"ts": 1784073600000,
"value": 25,
"classification": "Extreme Fear"
},
"fear_greed_updated_ts": 1784178375000,
"btc_dominance_pct": "56.27",
"eth_dominance_pct": "12.10",
"total_market_cap_usd": "2400000000000.00",
"total_volume_24h_usd": "90000000000.00",
"global_updated_ts": 1784178375000,
"stablecoin_total_usd": "300000000000.00",
"usdt_supply_usd": "110000000000.00",
"usdc_supply_usd": "34000000000.00",
"stablecoins_updated_ts": 1784178375000,
"usd_index": "120.50",
"usd_index_ts": 1783987200000,
"us_10y_yield_pct": "4.62",
"us_10y_ts": 1783987200000
},
"cross_exchange": {
"symbol": "BTCUSDT",
"ts": 1784179270000,
"consensus_mid": "65052.765",
"fresh_venues": 3,
"divergence_warning": false,
"venues": [
{
"id": "v1",
"quote": {
"bid": "65052.76",
"ask": "65052.77",
"bid_qty": "1.20",
"ask_qty": "0.85",
"source_ts": 1784179269700,
"received_ts": 1784179270000
},
"mid": "65052.765",
"divergence_bps": "0.0000",
"age_ms": 0,
"stale": false,
"connected": true
},
{
"id": "v2",
"quote": {
"bid": "65051.90",
"ask": "65052.40",
"bid_qty": "0.90",
"ask_qty": "1.10",
"source_ts": 1784179269200,
"received_ts": 1784179269500
},
"mid": "65052.150",
"divergence_bps": "0.9450",
"age_ms": 500,
"stale": false,
"connected": true
},
{
"id": "v3",
"quote": {
"bid": "65053.10",
"ask": "65053.60",
"bid_qty": "0.70",
"ask_qty": "0.60",
"source_ts": 1784179268800,
"received_ts": 1784179269300
},
"mid": "65053.350",
"divergence_bps": "0.8990",
"age_ms": 700,
"stale": false,
"connected": true
}
]
},
"market_regime": {
"ts": 1784178375000,
"interval": "1h",
"lookback_days": 7,
"benchmark": "BTCUSDT",
"symbol_count": 2,
"breadth_above_ema20_pct": 80,
"breadth_above_ema50_pct": 60,
"median_return_1h_pct": -0.05,
"median_return_24h_pct": 1.2,
"decoupling_count": 1,
"symbols": [
{
"symbol": "BTCUSDT",
"correlation_btc_7d": 1,
"correlation_btc_24h": 1,
"realized_volatility_24h_pct": 38.5,
"realized_volatility_7d_pct": 42,
"volatility_regime": "low_vol_range",
"decoupling_detected": false,
"return_1h_pct": -0.05,
"return_24h_pct": 1.25,
"above_ema20": true,
"above_ema50": true
},
{
"symbol": "ETHUSDT",
"correlation_btc_7d": 0.85,
"correlation_btc_24h": 0.4,
"realized_volatility_24h_pct": 45,
"realized_volatility_7d_pct": 48,
"volatility_regime": "low_vol_range",
"decoupling_detected": true,
"return_1h_pct": -0.1,
"return_24h_pct": 2.5,
"above_ema20": true,
"above_ema50": true
}
]
},
"volatility_regime": "low_vol_range",
"decoupling_detected": false,
"trade_cost": {
"source": "preset",
"fee_buy": "0.001",
"fee_sell": "0.001",
"spread_bps": "2.0",
"spread_from_depth": true,
"slip_bps": "2.0",
"half_spread": "0.0001",
"c_spot": "0.0025",
"funding_rate": "0.0001",
"c_perp": "0.0026"
},
"cost_risk": {
"atr_pct": "0.28",
"d_sl_pct": "0.56",
"c_r": "0.446429",
"p_be": "0.482143",
"tradable": true,
"params": {
"k_sl": "2.0",
"rr": "2.0",
"tradable_c_r_max": "0.45"
}
},
"htf": {
"m15": {
"ts": 1784178300000,
"open": "64980.00",
"high": "65040.00",
"low": "64920.00",
"close": "65020.00",
"volume": "1840.20",
"quote_volume": "120351851.70",
"trades": 61020,
"closed": true,
"taker_buy_volume": "980.00",
"indicators": {
"ema20": "64950.00",
"ema50": "64500.00",
"ema200": "62000.00",
"rsi14": "54.20",
"atr14": "180.50",
"vwap": "64980.00",
"vol_sma20": "95.00",
"adx14": "24.10",
"plus_di14": "24.50",
"minus_di14": "17.80",
"di_side": "1",
"obv": "1500000.00",
"mfi14": "48.00",
"cvd_delta": "-3.25",
"ema50_slope_pct": "0.031000",
"ema_slope_abs": "0.031000",
"atr50": "210.00",
"atr_ratio_14_50": "0.859524",
"volume_usd": "120351851.70",
"volume_rate": "8023456.78",
"bb_mid": "64900.00",
"bb_upper": "65200.00",
"bb_lower": "64600.00",
"bb_width": "0.009244",
"body": "0.307692",
"wick_balance": "0.153846",
"close_pos": "0.692308",
"candle_q": "0.261538",
"range_ratio": "0.720222",
"atr_pct": "0.277521",
"last_swing_high": "65200.00",
"last_swing_low": "64400.00"
}
},
"h1": {
"ts": 1784174400000,
"open": "64800.00",
"high": "64920.00",
"low": "64740.00",
"close": "64880.00",
"volume": "7420.00",
"quote_volume": "481407406.80",
"trades": 240000,
"closed": true,
"taker_buy_volume": "3900.00",
"indicators": {
"ema20": "64910.12",
"ema50": "64500.00",
"ema200": "62000.00",
"rsi14": "54.20",
"atr14": "180.50",
"vwap": "64980.00",
"vol_sma20": "95.00",
"adx14": "25.40",
"plus_di14": "24.50",
"minus_di14": "17.80",
"di_side": "1",
"obv": "1500000.00",
"mfi14": "48.00",
"cvd_delta": "-3.25",
"ema50_slope_pct": "0.031000",
"ema_slope_abs": "0.031000",
"atr50": "210.00",
"atr_ratio_14_50": "0.859524",
"volume_usd": "481407406.80",
"volume_rate": "8023456.78",
"bb_mid": "64900.00",
"bb_upper": "65200.00",
"bb_lower": "64600.00",
"bb_width": "0.009244",
"body": "0.307692",
"wick_balance": "0.153846",
"close_pos": "0.692308",
"candle_q": "0.261538",
"range_ratio": "0.720222",
"atr_pct": "0.277521",
"last_swing_high": "65200.00",
"last_swing_low": "64400.00"
}
},
"h4": {
"ts": 1784160000000,
"open": "64500.00",
"high": "64700.00",
"low": "64400.00",
"close": "64620.00",
"volume": "28000.00",
"quote_volume": "1925629627.20",
"trades": 900000,
"closed": true,
"taker_buy_volume": "14000.00",
"indicators": {
"ema20": "64410.00",
"ema50": "64500.00",
"ema200": "62000.00",
"rsi14": "54.20",
"atr14": "180.50",
"vwap": "64980.00",
"vol_sma20": "95.00",
"adx14": "22.10",
"plus_di14": "24.50",
"minus_di14": "17.80",
"di_side": "1",
"obv": "1500000.00",
"mfi14": "48.00",
"cvd_delta": "-3.25",
"ema50_slope_pct": "0.031000",
"ema_slope_abs": "0.031000",
"atr50": "210.00",
"atr_ratio_14_50": "0.859524",
"volume_usd": "1925629627.20",
"volume_rate": "8023456.78",
"bb_mid": "64900.00",
"bb_upper": "65200.00",
"bb_lower": "64600.00",
"bb_width": "0.009244",
"body": "0.307692",
"wick_balance": "0.153846",
"close_pos": "0.692308",
"candle_q": "0.261538",
"range_ratio": "0.720222",
"atr_pct": "0.277521",
"last_swing_high": "65200.00",
"last_swing_low": "64400.00"
}
},
"d1": {
"ts": 1784073600000,
"open": "63800.00",
"high": "65300.00",
"low": "63600.00",
"close": "64200.00",
"volume": "180000.00",
"quote_volume": "11553777763.20",
"trades": 5200000,
"closed": true,
"taker_buy_volume": "90000.00",
"indicators": {
"ema20": "64910.12",
"ema50": "64500.00",
"ema200": "61800.00",
"rsi14": "54.20",
"atr14": "180.50",
"vwap": "64980.00",
"vol_sma20": "95.00",
"adx14": "22.10",
"plus_di14": "24.50",
"minus_di14": "17.80",
"di_side": "1",
"obv": "1500000.00",
"mfi14": "48.00",
"cvd_delta": "-3.25",
"ema50_slope_pct": "0.031000",
"ema_slope_abs": "0.031000",
"atr50": "210.00",
"atr_ratio_14_50": "0.859524",
"volume_usd": "11553777763.20",
"volume_rate": "8023456.78",
"bb_mid": "64900.00",
"bb_upper": "65200.00",
"bb_lower": "64600.00",
"bb_width": "0.009244",
"body": "0.307692",
"wick_balance": "0.153846",
"close_pos": "0.692308",
"candle_q": "0.261538",
"range_ratio": "0.720222",
"atr_pct": "0.277521",
"last_swing_high": "65200.00",
"last_swing_low": "64400.00"
}
}
},
"failover": false
}
Oracle отдаёт факты по API. Стратегию, бэктест и исполнение пишете вы — на любом языке, в своём боте или сигнализаторе.
Чистые рыночные данные: бары, индикаторы, стакан, макро и режим рынка.
● Вы здесьЛюбой клиент API: торговый робот, сигналы, скринер, AI-агент.
● Ваш кодМашинный индекс: llms.txt. Полный контракт: agents.md. Ниже те же факты коротко — для краулеров и людей.
Market Oracle — API рыночных данных для торговых ботов, сигнализаторов и AI-агентов. Сделки он не открывает. Один вызов GET /v1/context/{symbol} отдаёт снимок для решения: закрытый бар с проверенными индикаторами, live-стакан, trade_cost/cost_risk, HTF, деривативы, макро, котировки, режим рынка и data_quality.
Хост API — https://api.market-oracle.pro (не маркетинговый сайт). WebSocket: wss://api.market-oracle.pro/v1/stream. Каждый запрос к /v1/* и сокет — заголовок Authorization: Bearer mo_…. Публичный только GET /health.
Да. Официального SDK нет. В документации — примеры на стандартной библиотеке Python (urllib) и Node.js fetch. Decimal-строки в JSON не превращайте в бинарный float для денег.
По умолчанию стрим — закрытый 1m bar_close (бар + indicators). Минутная микроструктура стакана — opt-in (microstructure:true → microstructure_close). Факты книги — REST GET /v1/microstructure/{symbol} и GET /v1/depth. WebSocket не шлёт bar_close на 5m/15m.
Только по закрытому бару (closed: true), один раз на ключ symbol:ts. Live-триггер — закрытый 1m; старшие ТФ ждут нативную закрытую свечу (GET /v1/history?interval=… или live context.htf). Не торговать незакрытую свечу и не склеивать минутки ради oracle-only полей.
Платные тарифы видят фиксированный набор USDT spot: BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT, DOGEUSDT, XRPUSDT. Free — только BTCUSDT (GET /v1/me → allowed_symbols). Свой тикер добавить нельзя. Берите GET /v1/symbols и только ready=true (желательно history=full_day). Макро и календарь не привязаны к паре.
Прочитать /llms.txt, затем Markdown-спеку /ru/docs/agents.md (или /en/docs/agents.md). Взять бесплатный API-ключ на сайте, вызвать GET /health, GET /v1/me, GET /v1/symbols, подписаться на WS /v1/stream и перед входом брать GET /v1/context/{symbol}. Вход только при cost_risk.tradable и data_quality.score ≥ 70.
Нет. Платные тарифы — только в рублях. Принимаются российские карты МИР, Visa и Mastercard (банки РФ) и СБП. Карты иностранных банков не принимаются. Тариф Free карту не требует.