https://github.com/a-khakimov/tinvest4s
WIP: Библиотека для взаимодействия с ОpenAPI Тинькофф Инвестиций.
https://github.com/a-khakimov/tinvest4s
tinkoff-invest tinkoff-invest-api tinvest4s
Last synced: 4 months ago
JSON representation
WIP: Библиотека для взаимодействия с ОpenAPI Тинькофф Инвестиций.
- Host: GitHub
- URL: https://github.com/a-khakimov/tinvest4s
- Owner: a-khakimov
- Created: 2020-11-28T20:11:01.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2021-05-17T18:59:29.000Z (over 4 years ago)
- Last Synced: 2025-02-03T12:46:44.661Z (10 months ago)
- Topics: tinkoff-invest, tinkoff-invest-api, tinvest4s
- Language: Scala
- Homepage: https://a-khakimov.github.io/projects/tinvest4s-doc
- Size: 97.7 KB
- Stars: 0
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README

[](https://sonarcloud.io/dashboard?id=a-khakimov_tinvest4s)
[](https://sonarcloud.io/dashboard?id=a-khakimov_tinvest4s)
[](https://sonarcloud.io/dashboard?id=a-khakimov_tinvest4s)
# tinvest4s
Библиотека предназначена для взаимодействия с [ОpenAPI Тинькофф Инвестиций](https://tinkoffcreditsystems.github.io/invest-openapi/).
## Начало работы
Для работы с библиотекой потребуется изучить [документацию](https://tinkoffcreditsystems.github.io/invest-openapi/) на ОpenAPI и получить в [личном кабинете](https://www.tinkoff.ru/invest/) токен для авторизации.
## Подключение библиотеки к проекту
В данный момент возможен вариант подключения библиотеки в качестве внешнего проекта.
Например, в sbt указать ссылку на репозиторий.
```scala
lazy val tinvest4s = ProjectRef(uri("https://github.com/a-khakimov/tinvest4s.git#branch"), "tinvest4s")
lazy val root = (project in file(".")).dependsOn(tinvest4s)
```
## Пример использования
Клиенты разделены на REST и Streaming. Примеры использования можно найти в директори `examples`.
### REST-клиент
```scala
override def run(args: List[String]): F[ExitCode] = {
for {
_ <- resources().use {
case httpClient => {
implicit val tinvestApi: TInvestApi[F] = new TInvestApiHttp4s[F](httpClient, "token")
for {
portfolio <- tinvestApi.getPortfolio
_ <- Sync[F].delay {
println(portfolio)
}
} yield ()
}
}
} yield ExitCode.Success
}
```
### Streaming клиент
Для работы со Streaming-api потребуется создать обработчик событий.
```scala
class StreamingEvents[F[_]: Sync] extends TInvestWSHandler[F] {
override def handle(response: TInvestWSResponse): F[Unit] = {
response match {
case CandleResponse(_, _, candle) => ???
case OrderBookResponse(_, _, orderBook) => ???
case InstrumentInfoResponse(_, _, instrumentInfo) => ???
}
}
}
```
При создании websocket-клиента необходимо передать токен для авторизации.
```scala
def resources(): Resource[F, WSConnectionHighLevel[F]] = {
for {
wsClient <- JdkWSClient[F](HttpClient.newHttpClient())
.connectHighLevel(
TInvestWSAuthorization()
.withToken("token")
)
} yield wsClient
}
```
Далее выполнить подписку на свечи с некоторым значением `CandleResolution`.
```scala
override def run(args: List[String]): F[ExitCode] = {
for {
_ <- resources().use {
wsClient => {
implicit val handler: TInvestWSHandler[F] = new StreamingEvents[F]()
implicit val tinvestWSApi: TInvestWSApi[F] = new TInvestWSApiHttp4s[F](wsClient, handler)
for {
_ <- tinvestWSApi.subscribeCandle("BBG005HLSZ23", CandleResolution.`1min`)
} yield ()
}
}
} yield ExitCode.Success
}
```