Spring Boot стартер для invest-api-java-sdk
Простота написания кода + высокая производительность из коробки. В стартере упор сделан на стриминг данных - пишите только логику обработки, а за создание стримов и выбор нужных хендлеров стартер позаботится за вас.
jdk17+Maven 3+либоGradle 8.5+(еслиjdk21+) иGradle 7.3+(еслиjdk17+)SpringBoot 3.0+- Также добавьте в
aplication.yml
tinkoff:
starter:
apiToken:
fullAccess:
"ваш токен"Вместо fullAccess можно использовать readonly или sandbox. Все ваши запросы к api будут использовать определенный вами токен.
Три способа обработать минутные свечи по Фьючерсу на доллар:
@HandleCandle(
ticker = "SiH4",
subscriptionInterval = SubscriptionInterval.SUBSCRIPTION_INTERVAL_ONE_MINUTE
)
class DollarCandleHandler implements AsyncCandleHandler {
@Override
public CompletableFuture<Void> handleAsync(Candle candle) {
return CompletableFuture.runAsync(() -> System.out.println(candle));
}
}@HandleCandle(
ticker = "SiH4",
subscriptionInterval = SubscriptionInterval.SUBSCRIPTION_INTERVAL_ONE_MINUTE
)
class BlockingDollarCandleHandler implements BlockingCandleHandler {
@Override
public void handleBlocking(Candle candle) {
System.out.println(candle);
}
}Или для списка инструментов:
@HandleAllCandles(
subscriptionInterval = SubscriptionInterval.SUBSCRIPTION_INTERVAL_ONE_MINUTE,
tickers = {"SiH4", "SBER"}
)
class CommonCandleHandler implements AsyncCandleHandler {
@Override
public CompletableFuture<Void> handleAsync(Candle candle) {
return CompletableFuture.runAsync(() -> System.out.println("CommonCandleHandler: " + candle));
}
}Для kotlin:
@HandleCandle(
ticker = "SiH4",
subscriptionInterval = SubscriptionInterval.SUBSCRIPTION_INTERVAL_ONE_MINUTE
)
class DollarCandleHandler : CoroutineCandleHandler {
override suspend fun handle(candle: Candle) {
println("DollarCandleHandler $candle")
}
}Тоже самое можно сделать с помощью @Bean следующим способом:
@Configuration
class Config {
@Bean
public BlockingCandleStreamProcessorAdapter candleStreamProcessorAdapter() {
return CandleStreamProcessorAdapterFactory
.withSubscriptionInterval(SubscriptionInterval.SUBSCRIPTION_INTERVAL_ONE_MINUTE)
.waitClose(true)
.withTickers(List.of("SiH4"))
.createBlockingHandler(System.out::println);
}
}Вместо тикера можно использовать figi или instrumentUid
Если у вас jdk 21+ то все ваши BlockingCandleHandler будут запущены в виртульных потоках, поэтому смело используйте блокирующий код без проблем
Обрабатывак сделки, стаканы, последние цены, обновление портфеля и т.д. можно аналогично.
LastPrice, Trade, OrderBook, Porfolio и остальные события доступные в стримах invest-api-java-sdk можно будет обрабатывать также как и в примерах выше используя другие аннотации и интерфейсы. Подробнее можно посмотреть примеры:
На kotlin + gradle.kts
На java + maven
Все сервисы api, такие как: MarketDataService, InstrumentsService, OrdersService и т.д. будут созданы как компоненты spring. Поэтому вы можете использвать их в ваших хендлерах например вот так:
@HandleCandle(
ticker = "SiZ3",
subscriptionInterval = SubscriptionInterval.SUBSCRIPTION_INTERVAL_ONE_MINUTE
)
class DollarCandleHandler(
private val marketDataService: MarketDataService,
private val ordersService: OrdersService,
private val instrumentsService: InstrumentsService,
) : CoroutineCandleHandler {
override suspend fun handle(candle: Candle) {
val uid = instrumentsService.getFutures(InstrumentStatus.INSTRUMENT_STATUS_BASE)
.awaitSingle()
.find { it.ticker == "ваш тикер" }?.uid
marketDataService.getOrderBook(uid!!, 50)
ordersService.getOrders("id вашего аккаунта")
}
}Подробные гайды и статьи скоро появятся - ждите
build.gradle.kts
implementation("io.github.dankosik:invest-api-java-sdk-starter:1.6.0-RC1")Также необходимо добавить зависимость
implementation("org.springframework.boot:spring-boot-starter-web")Или
implementation("org.springframework.boot:spring-boot-starter-webflux")build.gradle
implementation 'io.github.dankosik:invest-api-java-sdk-starter:1.6.0-RC1'Также необходимо добавить зависимость
implementation 'org.springframework.boot:spring-boot-starter-web'Или
implementation 'org.springframework.boot:spring-boot-starter-webflux'Для Maven
<dependency>
<groupId>io.github.dankosik</groupId>
<artifactId>invest-api-java-sdk-starter</artifactId>
<version>1.6.0-RC1</version>
<classifier>plain</classifier>
</dependency>Также необходимо добавить зависимость
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>или
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>Версии будут совпадать как в самой sdk
Тоесть при подключении
implementation("io.github.dankosik:invest-api-java-sdk-starter:1.6.0")
Будет использоваться версия sdk 1.6
Стартер поддерживает минимальную версию skd - 1.6
При появлении новых версий skd будет подниматься мажорная версия стартера, но старые будут оставаться на поддержке