moex-ruby

Gem Version

Ruby gem для работы с MOEX ISS API - интерфейсом информационной системы Московской Биржи.

Описание

Этот гем предоставляет удобный интерфейс для получения данных о торгах, инструментах, котировках и других аспектах Московской Биржи через официальное API ISS (Information & Statistical Server).

Установка

gem 'moex-ruby'

или через Bundler:

bundle add moex-ruby

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

require 'moex_ruby'

# Базовое использование
client = MoexRuby::Client.new

# Получение данных о бумаге через модульный API
security = client.security('SBER')
puts security.inspect

# Поиск ценных бумаг
results = client.search_securities('Газпром')

# Исторические данные
history = client.security_history('SBER', from: '2024-01-01', till: '2024-01-31')

# Свечи (OHLC)
candles = client.candles('SBER', from: '2024-01-01', interval: 24)

# Автопагинация - получить ВСЕ результаты автоматически
client = MoexRuby::Client.new(auto_paginate: true)
all_securities = client.securities  # Получит все страницы автоматически!
puts "Получено #{all_securities.count} бумаг"

# Ручная пагинация через все страницы
client.paginate_candles('SBER', from: '2024-01-01', interval: 24) do |page|
  page.each { |candle| puts candle }
end

# Низкоуровневый доступ (по-прежнему доступен)
raw_data = client.get('/iss/securities/SBER')

Конфигурация

Базовая конфигурация

# С таймаутом
client = MoexRuby::Client.new(timeout: 60)

# С автопагинацией (получать все страницы автоматически)
client = MoexRuby::Client.new(auto_paginate: true)

# С блоком конфигурации
client = MoexRuby::Client.new do |config|
  config.timeout = 60
  config.base_url = 'https://iss.moex.com'
  config.auto_paginate = true
end

Продвинутая конфигурация

client = MoexRuby::Client.new do |config|
  # Добавление middleware
  config.response :logger, nil, { bodies: true }
  config.response :raise_error
  config.request :url_encoded

  # Выбор адаптера
  config.adapter :net_http

  # Автопагинация
  config.auto_paginate = true
end

Модульная архитектура

Гем использует модульную архитектуру, разделяя функциональность на логические группы:

Securities - Работа с ценными бумагами

# Информация о бумаге
client.security('SBER')

# Поиск
client.search_securities('Газпром', limit: 10)

# Список всех бумаг
client.securities(is_trading: 1)

# Индексы
client.indices
client.index('IMOEX')

History - Исторические данные

# История торгов
client.security_history('SBER', from: '2024-01-01', till: '2024-01-31')

# Свечи (OHLC)
client.candles('SBER', from: '2024-01-01', interval: 24)

# Облигации
client.bond_history('RU000A0JXQ12', from: '2024-01-01')

# Валюта
client.currency_history('USD000UTSTOM', from: '2024-01-01')

# Пагинация
client.paginate_history('SBER', from: '2024-01-01') do |page|
  page.each { |row| puts row }
end

client.paginate_candles('SBER', from: '2024-01-01', interval: 24) do |page|
  page.each { |candle| puts candle }
end

Engines - Торговые системы

# Список торговых систем
client.engines

# Рынки
client.markets('stock')

# Режимы торгов
client.boards('stock', 'shares')

# Бумаги на режиме
client.board_securities('stock', 'shares', 'TQBR')

# Котировки
client.board_security('stock', 'shares', 'TQBR', 'SBER')

# Алиасы
client.stock_shares  # Акции на основном режиме
client.stock_bonds   # Облигации

Markets - Рыночные данные

# Текущие котировки
client.market_data('SBER')

# Стакан заявок
client.order_book('SBER')

# Лента сделок
client.trades('SBER')

# Итоги торговой сессии
client.trading_session
client.trading_session(date: '2024-01-15')

# Топ по объему
client.top_securities(limit: 20)

# Обороты
client.turnovers

# Эмитенты
client.issuers
client.issuer(1234)

# Открытый интерес (для фьючерсов)
client.open_interest('USDRUBF')
client.open_interest_on_date('USDRUBF', '2024-01-15')

Автопагинация

Автоматическое получение всех страниц результатов:

# Способ 1: Через параметр при инициализации
client = MoexRuby::Client.new(auto_paginate: true)

# Способ 2: Через блок конфигурации
client = MoexRuby::Client.new do |config|
  config.auto_paginate = true
  config.timeout = 60
end

# Теперь все методы автоматически получают ВСЕ страницы
all_securities = client.securities  # Получит все, а не только первые 100
all_history = client.security_history('SBER', from: '2024-01-01')

# Можно переключать динамически
client.auto_paginate = false  # Выключить
result = client.securities    # Вернёт только первую страницу

client.auto_paginate = true   # Включить
all_results = client.securities  # Вернёт все страницы

Низкоуровневый доступ

Для специфических запросов доступен универсальный метод get:

# Прямой доступ к любому эндпоинту API
client.get('/iss/securities', q: 'Сбербанк', limit: 10)

# Ручная пагинация любого эндпоинта
client.paginate('/iss/history/...', from: '2024-01-01') do |page|
  # обработка страницы
end

Подробнее см. examples/modular_api_examples.rb

Документация

MOEX ISS API