Crate tradestation

Crate tradestation 

Source
Expand description

TradeStation Rust Client

Crates.io Total Downloads docs.rs

An ergonomic Rust client for the TradeStation API empowering you to build fast, scalable, and production ready trading systems and applications.

§Features

  • 🧮 Accounting: Monitor your risk, positions, balances, order history, and more across multiple accounts.
  • 📈 Market Data: Easily fetch and stream real time and historic market data on thousands of assets and derivatives.
  • Execution: Lightning fast trade execution allowing you to place, update, and cancel orders with all kinds of custom configuration.
  • 🧪 Testing: Supports mocking so you can seamlessly build out environments to test your trading systems and applications.

§Install

Use cargo CLI:

cargo add tradestation

Or manually add it into your Cargo.toml:

[dependencies]
tradestation = "0.0.9"

§Usage

For more thorough information, read the docs.

NOTE: See initial auth example on how to get your token (if not already done): https://github.com/antonio-hickey/tradestation-rs/blob/master/examples/initial_auth.rs

Simple example for streaming bars of trading activity:

use tradestation::{
    responses::market_data::StreamBarsResp,
    market_data::{BarUnit, StreamBarsQueryBuilder},
    token::{Token, Scope},
    ClientBuilder, Error,
};

#[tokio::main]
async fn main() -> Result<(), Error> {
    // Build the TradeStation Client
    //
    // NOTE: If you don't have your token yet, see the inital auth example.
    let mut client = ClientBuilder::new()
        .credentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY")
        .with_token(Token {
            access_token: "YOUR_ACCESS_TOKEN".into(),
            refresh_token: "YOUR_REFRESH_TOKEN".into(),
            id_token: "YOUR_ID_TOKEN".into(),
            token_type: String::from("Bearer"),
            scope: vec![Scope::MarketData],
            expires_in: 1200,
        })
        .build()
        .await?;

    // Build a query to stream Crude Oil Futures
    let stream_bars_query = StreamBarsQueryBuilder::new()
        .symbol("CLX30")
        .unit(BarUnit::Minute)
        .interval(240)
        .build()?;

    // Stream the bars based on the query built above into
    // a custom function to process each bar streamed in.
    client
        .stream_bars_into(&stream_bars_query, |stream_event| {
            println!("Stream Bar Event: {stream_event:?}");
            Ok(())
        })
        .await?;

    Ok(())
}

§Contributing

There are many ways to contribute like reporting issues, writing documentation, building out new features and abstractions, refactoring to improve on current abstractions, or fixing bugs.

Keep an eye out on open issues :)

Re-exports§

pub use client::Client;
pub use client::ClientBuilder;
pub use token::Scope;
pub use token::Token;

Modules§

accounting
Functions, structs, and primitives related to accounting.
client
Functions, structs, and primitives related to the tradestation-rs Client.
execution
Functions, Structs, and primitives related to market data.
market_data
Functions, Structs, and primitives related to market data.
orders
Abstractions, functions, and primitives related to orders.
responses
Structs for all TradeStation API responses.
token
Functions, structs, and primitives related to auth tokens.

Enums§

Error
The tradestation-rs error type. TradeStation API Client Error