#для #sdk #tinkoff #trading #tbank #tinvest

t-invest-sdk

T-Bank Invest API SDK. Клиент для работы с T-Invest API Т-Банка (Tinkoff).

13 releases (8 breaking)

0.9.0 Jul 5, 2025
0.7.1 May 25, 2025
0.3.0 Mar 14, 2025

#75 in Finance

Download history 1/week @ 2025-03-19 116/week @ 2025-04-02 80/week @ 2025-04-09 51/week @ 2025-04-16 107/week @ 2025-04-23 141/week @ 2025-04-30 41/week @ 2025-05-07 14/week @ 2025-05-14 241/week @ 2025-05-21 142/week @ 2025-05-28 127/week @ 2025-07-02

127 downloads per month

MIT license

640KB
10K SLoC

T-Invest API Rust SDK

Версия API 1.36.1

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

Пример

Cargo.toml

[dependencies]
t-invest-sdk = "0.9.0"
tokio = { version = "1.42.0", features = ["full"] }
flume = "0.11.1"
anyhow = "1.0.95"

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);
        }
    }
}

Dependencies

~13–22MB
~402K SLoC