rustrade-execution 0.7.0

Stream private account data from financial venues, and execute (live or mock) orders.
Documentation

rustrade-execution

Execution client library for streaming private account data and executing orders (live or mock).

Supported Exchanges

Exchange Constructor InstrumentKinds Features
BinanceSpot BinanceSpot::new(BinanceSpotConfig) Spot Orders, Balances
BinanceMargin BinanceMargin::new(BinanceMarginConfig) Spot (cross/isolated margin) Orders, Balances
Alpaca AlpacaClient::new(AlpacaConfig) Spot (Equities, Crypto), Option Orders, Balances, BracketOrders
Hyperliquid HyperliquidClient::connect(HyperliquidConfig) Perpetual Orders, Balances, Positions
HyperliquidSpot HyperliquidSpotClient::connect(HyperliquidConfig) Spot Orders, Balances
IBKR IbkrClient::connect_sync(IbkrConfig) Spot, Future, Option Orders, Balances, BracketOrders

Positions means account_snapshot reports each open position in InstrumentAccountSnapshot::position: signed quantity, entry price, unrealised PnL, margin, liquidation price and leverage. Only Hyperliquid perpetuals do. On Binance (Spot and Margin) and Hyperliquid Spot a holding is an asset balance instead. Two clients report less than the account holds:

  • Alpaca reports crypto holdings as balances, and a USD balance whose total is account equity and whose free amount is buying power. Equity and option positions are counted in that total but not reported one by one.
  • IBKR lists the instruments that hold a position, without their size or cost.

The new constructors are ExecutionClient::new. Each connector is behind a Cargo feature, and none is enabled by default: alpaca, binance (Spot and Margin), hyperliquid (perpetuals and spot), and ibkr. The mock client is always available.

Order Types

All connectors support Limit orders. Market orders are supported everywhere except Hyperliquid (use a Limit order with ImmediateOrCancel time-in-force instead). Additional order types:

Order Type IBKR Alpaca Binance Hyperliquid
Stop ✅ ✅ ✅ ✅
StopLimit ✅ ✅ ✅ ✅
TakeProfit ❌ ❌ ✅ ✅
TakeProfitLimit ❌ ❌ ✅ ✅
TrailingStop ✅ ⚠️ ⚠️ ❌
TrailingStopLimit ✅ ❌ ❌ ❌

⚠️ Binance TrailingStop supports BasisPoints and Percentage offsets only; Absolute offsets are rejected as unsupported. ⚠️ Alpaca TrailingStop supports Percentage and Absolute offsets only; BasisPoints is rejected as unsupported. Hyperliquid requires every order it accepts to carry a client order ID in ClientOrderId::uuid() form; an order with any other ID is rejected. BinanceMargin matches Binance spot except that both TrailingStop and TrailingStopLimit are rejected as unsupported (the SDK margin binding omits trailingDelta).

See the workspace README for documentation, examples, and contributing guidelines.