Skip to content

Latest commit

 

History

History
96 lines (76 loc) · 3.72 KB

README.md

File metadata and controls

96 lines (76 loc) · 3.72 KB

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
  }