Skip to content

WIP: Библиотека для взаимодействия с ОpenAPI Тинькофф Инвестиций.

Notifications You must be signed in to change notification settings

a-khakimov/tinvest4s

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scala CI Lines of Code Coverage Technical Debt

tinvest4s

Библиотека предназначена для взаимодействия с ОpenAPI Тинькофф Инвестиций.

Начало работы

Для работы с библиотекой потребуется изучить документацию на ОpenAPI и получить в личном кабинете токен для авторизации.

Подключение библиотеки к проекту

В данный момент возможен вариант подключения библиотеки в качестве внешнего проекта.

Например, в sbt указать ссылку на репозиторий.

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-клиент

  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 потребуется создать обработчик событий.

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-клиента необходимо передать токен для авторизации.

  def resources(): Resource[F, WSConnectionHighLevel[F]] = {
    for {
      wsClient <- JdkWSClient[F](HttpClient.newHttpClient())
        .connectHighLevel(
          TInvestWSAuthorization()
            .withToken("token")
        )
    } yield wsClient
  }

Далее выполнить подписку на свечи с некоторым значением CandleResolution.

  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
  }

About

WIP: Библиотека для взаимодействия с ОpenAPI Тинькофф Инвестиций.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages