Storage
Модуль содержит общий интерфейс для описания работы с данными в библиотеке и его имплементации для сохранения рыночных данных (MarketDataStream) в различные типы хранилищ.
Сейчас поддерживаются следующие типы хранилищ:
Какие задачи решает
- Запись рыночных данных в различные типы хранилищ.
- Поиск рыночных данных в хранилищах по
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