Skip to content

dvigal/moex2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Обзор MOEX2

Что это?

Реализация Java клиента к интерфейсу Информационного-статистического сервера Московской Биржи

Почему moex2?

Следующая генерация библиотеки moex

Особенности реализации

  • Большая часть кода (99%) сгенерирована с помощью библиотеки Javapoet
  • Запросы конструируются через цепочку вызовов методов (Fluent API), например:
var history = client
        .iss()
        .history()
        .engines()
        .engine("stock")
        .markets()
        .market("shares")
        .boards()
        .board("TQBR")
        .securities()
        .security("sber")
        .format().json() // Выбираем формат JSON
        .get(Map.of("from", "2020-01-03", "till", "2020-10-03")); // Задаем параметры и выполняем запрос 

Начало работы

Создание экземпляра клиента

import ru.exdata.moex.IssClientBuilder;

var client = IssClientBuilder.builder().build()

Форматы ответов

Согласно официальной документации, формат в котором необходимо получить данные, указывается в конце основной части URL через точку и поддерживаются XML, CSV, JSON, HTML.

Клиент, предоставляет способ выбрать нужный формат следующим образом:

// str - объект класса String
var str = issClient.iss().index().format().asIs().get();

// json - объект класса Response
var json = issClient.iss().index().format().json().get();

// xml - объект класса String
var xml = issClient.iss().index().format().xml().get();

// csv - объект класса String
var csv = issClient.iss().index().format().csv().get();

// html - объект класса String
var html = issClient.iss().index().format().html().get();

Конструирование запроса

Рассмотрим работу библиотеки на примере запроса получения истории по одной бумаге на фондовом рынке

Параметры запроса

Параметры передаются в метод get, как экземпляр объекта класса, реализующего интерфейс java.lang.Map<K,V>

var request = client
        .iss()
        .history()
        .engines()
        .engine("stock")
        .markets()
        .market("shares")
        .securities()
        .security("MOEX")
        .format()
        .json();

// Экземпляр объекта класса Response
var response = request.get(Map.of("from", "2022-10-10", "till", "2022-10-14"));

Пагинация

Как следует из документации MOEX ISS

Для некоторых запросов также доступен специальный блок данных "cursor", указывающий текущую позицию отдаваемый данных относительно всего объёма данных, доступных по этому запросу.

Поэтому, для навигации по страницам, нужно использовать объект Qursor, получить который можно с помощью метода qursor у объекта класса Response.

response
    .cursor()
    .filter(Cursor::hasNext)
    .map(cursor -> request.get(Map.of(
            "start", String.valueOf(cursor.nextIndex()),
            "from", "2020-01-03",
            "till", "2022-10-03"
    )));

Поддерживаемые запросы

Всего 143 метода

Подключение к проекту

Maven
<dependency>
  <groupId>ru.ex-data</groupId>
  <artifactId>moex2</artifactId>
  <version>1.0.0</version>
</dependency>
Gradle
implementation  'ru.ex-data:moex2:1.0.0'

Донат

Сказать "Спасибо" можно тут donationalerts

donationalerts