Skip to main content

Storage

Модуль содержит общий интерфейс для описания работы с данными в библиотеке и его имплементации для сохранения рыночных данных (MarketDataStream) в различные типы хранилищ.

Сейчас поддерживаются следующие типы хранилищ:

  • CSV-файлы — модуль CSV;
  • БД — модуль JDBC.

Какие задачи решает

  • Запись рыночных данных в различные типы хранилищ.
  • Поиск рыночных данных в хранилищах по instrumentId и точному времени или заданному периоду.

CSV

Добавить модуль в проект


Пример использования

Пример сохранения закрытых минутных свечей бумаги Т-Технологии в CSV-файл:

public class Main {

public static void main(String[] args) {
var connectorConfiguration = ConnectorConfiguration.loadFromPropertiesFile("invest.properties");
var unaryServiceFactory = ServiceStubFactory.create(connectorConfiguration);
var streamServiceFactory = StreamServiceStubFactory.create(unaryServiceFactory);
var streamManagerFactory = StreamManagerFactory.create(streamServiceFactory);
var executorService = Executors.newCachedThreadPool();
var scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
CsvConfiguration csvConfiguration = new CsvConfiguration(Path.of("candles.csv"));
try (var candlesRepository = new CandlesCsvRepository(csvConfiguration)) {
var marketDataStreamManager = streamManagerFactory.newMarketDataStreamManager(executorService, scheduledExecutorService);
marketDataStreamManager.subscribeCandles(Set.of(
new Instrument(
"87db07bc-0e02-4e29-90bb-05e8ef791d7b",
SubscriptionInterval.SUBSCRIPTION_INTERVAL_ONE_MINUTE
)
),
new CandleSubscriptionSpec(),
candle -> candlesRepository.save(candle.getOriginal())
);
marketDataStreamManager.start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

JDBC

Сейчас полностью поддерживаются следующие СУБД:

Добавить модуль в проект


Также для работы с модулем нужно добавить драйвер вашей СУБД в зависимости jdbc:

  • PostgreSQL:

  • MySQL:

Пример использования

Пример сохранения закрытых минутных свечей бумаги Т-Технологии в СУБД PostgreSQL:

public class Main {

public static void main(String[] args) {
var connectorConfiguration = ConnectorConfiguration.loadFromPropertiesFile("invest.properties");
var unaryServiceFactory = ServiceStubFactory.create(connectorConfiguration);
var streamServiceFactory = StreamServiceStubFactory.create(unaryServiceFactory);
var streamManagerFactory = StreamManagerFactory.create(streamServiceFactory);
var executorService = Executors.newCachedThreadPool();
var scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
var jdbcConfiguration = new JdbcConfiguration(createDataSource(), "trading", "candles");
var candlesRepository = new CandlesJdbcRepository(jdbcConfiguration);
var marketDataStreamManager = streamManagerFactory.newMarketDataStreamManager(executorService, scheduledExecutorService);
marketDataStreamManager.subscribeCandles(Set.of(
new Instrument(
"87db07bc-0e02-4e29-90bb-05e8ef791d7b",
SubscriptionInterval.SUBSCRIPTION_INTERVAL_ONE_MINUTE
)
),
new CandleSubscriptionSpec(),
candle -> candlesRepository.save(candle.getOriginal())
);
marketDataStreamManager.start();
}

private static DataSource createDataSource() {
var pgDataSource = new PGSimpleDataSource();
pgDataSource.setUrl("jdbc:postgresql://localhost:5432/invest");
pgDataSource.setUser("user");
pgDataSource.setPassword("password");
return pgDataSource;
}
}

Поднять СУБД локально можно с помощью docker, выполнив команду:

docker run --name postgres -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password -e POSTGRES_DB=invest -p 5432:5432 postgres:16

openapi@tbank.ru

АО «ТБанк» использует файлы «cookie» с целью персонализации сервисов и повышения удобства пользования веб-сайтом. «Cookie» представляют собой небольшие файлы, содержащие информацию о предыдущих посещениях веб-сайта. Если вы не хотите использовать файлы «cookie», измените настройки браузера.