moex-vibe/apps/docs/docs/backend/moex-client.md
Sergey Krylov aac5b2f873
All checks were successful
CI / lint (pull_request) Successful in 1m32s
CI / test (pull_request) Successful in 1m23s
CI / build (pull_request) Successful in 1m27s
CI / lint (push) Successful in 1m16s
CI / test (push) Successful in 1m23s
CI / build (push) Successful in 1m32s
docs: add Docusaurus documentation site as npm workspace
- Create apps/docs/ with Docusaurus 3.7.0
- Add documentation: architecture, backend, frontend, infrastructure, development, ADR
- Include 5 Mermaid diagrams (system architecture, request flow, modules, caching, deployment)
- Configure as npm workspace with dev:docs/build:docs scripts
- Copy existing ADR documents from docs/architecture/adr/
2026-06-13 21:37:10 +03:00

3.3 KiB
Raw Blame History

MOEX Client

Overview

MoexClientService (apps/backend/src/modules/moex-client/moex-client.service.ts) — HTTP-клиент для MOEX ISS API.

Rate Limiting

Использует p-queue:

this.queue = new PQueue({
  interval: 1000,
  intervalCap: rateLimit, // 10 по умолчанию
});

Все запросы к MOEX проходят через очередь — не более MOEX_RATE_LIMIT запросов в секунду.

Circuit Breaker

Состояние: закрыт → открыт → полуоткрыт (через таймаут).

private circuitOpen = false;
private circuitErrorCount = 0;
  • После MOEX_CIRCUIT_BREAKER_THRESHOLD (5) последовательных ошибок — открывается
  • В открытом состоянии все запросы мгновенно падают с ошибкой "Circuit breaker is open"
  • Через MOEX_CIRCUIT_BREAKER_RESET_SECONDS (30) автоматически сбрасывается

Request Method

private async request<T>(path: string, params?: Record<string, string>): Promise<T>
  • Добавляет .json к пути (MOEX JSON API)
  • Устанавливает iss.meta=off (отключает метаданные)
  • Таймаут: 10s

Response Parsing

MOEX возвращает данные в табличном формате:

{
  "securities": {
    "columns": ["secid", "isin", "name", ...],
    "data": [["SBER", "RU0009029540", "Сбербанк", ...]]
  }
}

Метод extractTable преобразует это в массив объектов по колонкам.

Available MOEX Methods

Method MOEX Path Description
searchSecurities /securities?q= Поиск инструментов
getSecurityDescription /securities/{secid} Спецификация
getShareMarketData /engines/stock/markets/shares/securities/{secid} Рыночные данные акции (board: TQBR)
getBondData /engines/stock/markets/bonds/securities/{secid} Данные облигации (board: TQCB)
getBondMarketData /engines/stock/markets/bonds/securities/{secid} Рыночные данные облигации
getDividends /securities/{secid}/dividends Дивиденды
getCandles /engines/{engine}/markets/{market}/securities/{secid}/candles Свечи
getHistory /engines/stock/markets/shares/securities/{secid} История акций
getBondHistory /engines/stock/markets/bonds/securities/{secid} История облигаций

MOEX ISS Types

Все MOEX-типы описаны в apps/backend/src/modules/moex-client/moex-client.types.ts:

  • MoexSecurityDescription — описание инструмента
  • MoexShareMarketData — рыночные данные акции
  • MoexBondData — данные облигации
  • MoexBondMarketData — рыночные данные облигации
  • MoexDividend — дивиденд
  • MoexCandle — свеча (OHLCV)
  • MoexHistoryEntry — запись истории акции
  • MoexBondHistoryEntry — запись истории облигации
  • MoexBoard — торговая доска