| Crates.io | tradestation-rs |
| lib.rs | tradestation-rs |
| version | 0.1.2 |
| created_at | 2024-09-27 23:51:39.276768+00 |
| updated_at | 2024-12-29 05:16:25.145419+00 |
| description | High level, fully featured, and ergonomic Rust client for the TradeStation API. |
| homepage | https://crates.io/crates/tradestation-rs |
| repository | https://github.com/convexity-guild/tradestation-rs |
| max_upload_size | |
| id | 1389598 |
| size | 406,290 |
An ergonomic Rust client for the TradeStation API.
This is a fork of the tradestation crate, but more opinionated and providing higher level abstractions.
Use cargo CLI:
cargo install tradestation-rs
Or manually add it into your Cargo.toml:
[dependencies]
tradestation-rs = "0.1.2"
For more thorough information, read the docs.
Simple example for streaming bars of trading activity:
use tradestation_rs::{
responses::MarketData::StreamBarsResp,
ClientBuilder, Error,
MarketData::{self, BarUnit},
};
#[tokio::main]
async fn main() -> Result<(), Error> {
let mut client = ClientBuilder::new()?
.set_credentials("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")?
.authorize("YOUR_AUTHORIZATION_CODE")
.await?
.build()
.await?;
println!("Your TradeStation API Bearer Token: {:?}", client.token);
let stream_bars_query = MarketData::StreamBarsQueryBuilder::new()
.set_symbol("CLX24")
.set_unit(BarUnit::Minute)
.set_interval("240")
.build()?;
let streamed_bars = client
.stream_bars(&stream_bars_query, |stream_data| {
match stream_data {
StreamBarsResp::Bar(bar) => {
// Do something with the bars like making a chart
println!("{bar:?}")
}
StreamBarsResp::Heartbeat(heartbeat) => {
if heartbeat.heartbeat > 10 {
return Err(Error::StopStream);
}
}
StreamBarsResp::Status(status) => {
println!("{status:?}");
}
StreamBarsResp::Error(err) => {
println!("{err:?}");
}
}
Ok(())
})
.await?;
// All the bars collected during the stream
println!("{streamed_bars:?}");
Ok(())
}