t-invest-sdk

Crates.iot-invest-sdk
lib.rst-invest-sdk
version0.14.0
created_at2025-01-07 11:54:26.96893+00
updated_at2026-01-22 20:02:50.415216+00
descriptionT-Bank Invest API SDK. Клиент для работы с T-Invest API Т-Банка (Tinkoff).
homepage
repositoryhttps://github.com/artemevsevev/t-invest-sdk
max_upload_size
id1507018
size1,025,520
Artem Evsevev (artemevsevev)

documentation

README

T-Invest API Rust SDK

Версия API 1.44

Документация для разработчиков

Пример

Cargo.toml

[dependencies]
t-invest-sdk = "0.14.0"
tokio = { version = "1.47.1", features = ["full"] }
flume = "0.11.1"
anyhow = "1.0.99"

main.rs

use anyhow::anyhow;
use std::env;
use t_invest_sdk::api::{
    get_candles_request::CandleSource, market_data_request, CandleInstrument,
    FindInstrumentRequest, InstrumentType, MarketDataRequest, SubscribeCandlesRequest,
    SubscriptionAction, SubscriptionInterval,
};
use t_invest_sdk::TInvestSdk;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let token = env::var("API_TOKEN")?;
    let sdk = TInvestSdk::new_sandbox(&token).await?;

    let find_instrument_response = sdk
        .instruments()
        .find_instrument(FindInstrumentRequest {
            query: "Т-Технологии".to_string(),
            instrument_kind: Some(InstrumentType::Share as i32),
            api_trade_available_flag: Some(true),
        })
        .await?
        .into_inner();

    let instrument = find_instrument_response
        .instruments
        .first()
        .ok_or(anyhow!("Can't find instrument"))?;

    println!("Instrument: {:?}", instrument);

    let (tx, rx) = flume::unbounded();
    let request = MarketDataRequest {
        payload: Some(market_data_request::Payload::SubscribeCandlesRequest(
            SubscribeCandlesRequest {
                subscription_action: SubscriptionAction::Subscribe as i32,
                instruments: vec![CandleInstrument {
                    figi: "".to_string(),
                    interval: SubscriptionInterval::OneMinute as i32,
                    instrument_id: instrument.uid.clone(),
                }],
                waiting_close: false,
                candle_source_type: Some(CandleSource::Unspecified as i32),
            },
        )),
    };
    tx.send(request)?;

    let response = sdk
        .market_data_stream()
        .market_data_stream(rx.into_stream())
        .await?;

    let mut streaming = response.into_inner();

    loop {
        if let Some(next_message) = streaming.message().await? {
            println!("Candle: {:?}", next_message);
        }
    }
}
Commit count: 58

cargo fmt