Skip to main content

Crate tradingkit

Crate tradingkit 

Source
Expand description

Trading primitives and exchange adapters for algorithmic trading workflows.

§Project Layers

  • model holds exchange-agnostic trading domain types such as orders, option legs, and account snapshots.
  • data separates direct reads from cache-backed reads through Source, Store, and Repository abstractions.
  • exchange defines the common trading traits and exposes concrete exchange adapters.
  • exchange::alpaca is the current REST trading implementation, including equity, single-leg options, and multi-leg options support.
  • exchange::okx currently covers credential/signature behavior and is the next extension point for shared trading operations.
  • strategy/ contains executable crates that consume the shared library.

§Examples

use tradingkit::exchange::alpaca::{Alpaca, AlpacaCredentials};
use tradingkit::model::{
    AssetClass, OrderClass, OrderRequest, OrderSide, OrderType, PositionIntent, TimeInForce,
};
use tradingkit::trading::TradingApi;

async fn example() -> Result<(), Box<dyn std::error::Error>> {
    let api = Alpaca::paper(AlpacaCredentials::new(
        "your-key".to_string(),
        "your-secret".to_string(),
    ));

    let request = OrderRequest {
        symbol: Some("AAPL240119C00190000".to_string()),
        asset_class: Some(AssetClass::UsOption),
        qty: Some("1".to_string()),
        notional: None,
        side: Some(OrderSide::Buy),
        order_type: OrderType::Market,
        time_in_force: TimeInForce::Day,
        order_class: Some(OrderClass::Simple),
        limit_price: None,
        stop_price: None,
        trail_price: None,
        trail_percent: None,
        client_order_id: Some("example-order".to_string()),
        extended_hours: Some(false),
        position_intent: Some(PositionIntent::BuyToOpen),
        legs: None,
    };

    let _order = api.submit(&request).await?;
    Ok(())
}

The same client can be created from environment variables instead of inline secrets:

use tradingkit::exchange::alpaca::{Alpaca, AlpacaCredentials};

let _alpaca = Alpaca::paper(AlpacaCredentials::env()?);

Modules§

data
Data access abstractions that separate direct exchange reads from cached reads.
exchange
Exchange-facing traits and concrete exchange modules.
model
Shared trading domain models used across exchange implementations.
trading
Write-side trading operations for exchange adapters.