12 releases (7 breaking)
0.8.0 | Apr 1, 2024 |
---|---|
0.7.1 | Mar 5, 2024 |
0.6.0 | Jan 16, 2024 |
0.5.0 | Nov 23, 2023 |
#4 in Finance
10,779 downloads per month
140KB
3K
SLoC
databento-rs
The official Rust client library for Databento. The clients support fast and safe streaming of both real-time and historical market data through similar interfaces.
Installation
To add the crate to an existing project, run the following command:
cargo add databento
Usage
Live
Real-time and intraday replay is provided through the Live clients. Here is a simple program that fetches the next ES mini futures trade:
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(())
}
To run this program, set the DATABENTO_API_KEY
environment variable with an API key.
Historical
Here is a simple program that fetches 10 minutes worth of historical trades for the entire CME Globex market:
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(())
}
To run this program, set the DATABENTO_API_KEY
environment variable with an API key.
Documentation
You can find more detailed examples and the full API documentation on the Databento docs site.
License
Distributed under the Apache 2.0 License.
Dependencies
~9–25MB
~323K SLoC