21 个版本 (11 个破坏性更新)

0.12.0 2024年7月30日
0.11.2 2024年6月25日
0.7.1 2024年3月5日
0.5.0 2023年11月23日

#8 in 财务

Download history 2173/week @ 2024-05-03 2640/week @ 2024-05-10 2317/week @ 2024-05-17 2393/week @ 2024-05-24 2390/week @ 2024-05-31 1891/week @ 2024-06-07 2284/week @ 2024-06-14 2473/week @ 2024-06-21 2177/week @ 2024-06-28 1949/week @ 2024-07-05 2265/week @ 2024-07-12 2138/week @ 2024-07-19 2363/week @ 2024-07-26 1876/week @ 2024-08-02 1962/week @ 2024-08-09 1698/week @ 2024-08-16

8,156 每月下载量

Apache-2.0

150KB
3K SLoC

databento-rs

build Documentation license Current Crates.io Version Slack

Databento的官方Rust客户端库。客户端支持通过类似接口快速、安全地流式传输实时和历史市场数据。

安装

要将crate添加到现有项目,请运行以下命令

cargo add databento

使用

实时

实时和日内回放通过Live客户端提供。以下是一个简单的程序,用于获取下一个ES mini期货交易

use std::error::Error;

use databento::{
    dbn::{Dataset, PitSymbolMap, SType, Schema, TradeMsg},
    live::Subscription,
    LiveClient,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let mut client = LiveClient::builder()
        .key_from_env()?
        .dataset(Dataset::GlbxMdp3)
        .build()
        .await?;
    client
        .subscribe(
            &Subscription::builder()
                .symbols("ES.FUT")
                .schema(Schema::Trades)
                .stype_in(SType::Parent)
                .build(),
        )
        .await
        .unwrap();
    client.start().await?;

    let mut symbol_map = PitSymbolMap::new();
    // Get the next trade
    loop {
        let rec = client.next_record().await?.unwrap();
        if let Some(trade) = rec.get::<TradeMsg>() {
            let symbol = &symbol_map[trade];
            println!("Received trade for {symbol}: {trade:?}");
            break;
        }
        symbol_map.on_record(rec)?;
    }
    Ok(())
}

要运行此程序,请设置DATABENTO_API_KEY环境变量并使用API密钥运行cargo run --example historical

历史

以下是一个简单的程序,用于获取整个CME Globex市场的10分钟历史交易

use std::error::Error;

use databento::{
    dbn::{Schema, TradeMsg},
    historical::timeseries::GetRangeParams,
    HistoricalClient, Symbols,
};
use time::macros::{date, datetime};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let mut client = HistoricalClient::builder().key_from_env()?.build()?;
    let mut decoder = client
        .timeseries()
        .get_range(
            &GetRangeParams::builder()
                .dataset("GLBX.MDP3")
                .date_time_range((
                    datetime!(2022-06-10 14:30 UTC),
                    datetime!(2022-06-10 14:40 UTC),
                ))
                .symbols(Symbols::All)
                .schema(Schema::Trades)
                .build(),
        )
        .await?;
    let symbol_map = decoder
        .metadata()
        .symbol_map_for_date(date!(2022 - 06 - 10))?;
    while let Some(trade) = decoder.decode_record::<TradeMsg>().await? {
        let symbol = &symbol_map[trade];
        println!("Received trade for {symbol}: {trade:?}");
    }
    Ok(())
}

要运行此程序,请设置DATABENTO_API_KEY环境变量并使用API密钥运行cargo bin --example live

文档

您可以在Databento文档网站上找到更多示例和完整的API文档。

许可

根据Apache 2.0许可分发。

依赖关系

~9–21MB
~285K SLoC