Skip to content

Dankosik/invest-api-java-sdk-starter

Repository files navigation

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 будет подниматься мажорная версия стартера, но старые будут оставаться на поддержке

Сообщество API Тинькофф Инвестиций

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages