Alpaca交易API的Rust SDK

alpaca-rs 是一个 Rust 编写的 SDK、CLI 和 MCP 服务器,用于访问 Alpaca 交易 API,支持交易、市场数据查询和 WebSocket 实时流。

  • by piekstra
  • Rust
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 piekstra/alpaca-rs

使用说明

alpaca-rs

Rust SDK, CLI, and MCP server for the Alpaca Trading API.

Architecture

Two-layer design for reusability:

  • api-client-core — Generic async REST + WebSocket client abstractions, pagination helpers, and error types. Reusable by future SDKs for other APIs.
  • alpaca-sdk — Alpaca-specific client, types, and WebSocket streaming built on api-client-core.
  • alpaca-cli — Command-line interface for querying accounts, positions, orders, quotes, and bars.
  • alpaca-mcp — MCP server exposing Alpaca operations as tools for Claude (planned).

Quick Start

SDK — REST

use alpaca_sdk::{AlpacaClient, AlpacaConfig};

let config = AlpacaConfig::from_env()?;
let client = AlpacaClient::new(config)?;

// Trading
let account = client.get_account().await?;
let positions = client.list_positions().await?;
let order = client.submit_order("AAPL", 10, "buy", "market", "day", None, false).await?;

// Market Data
let quote = client.get_latest_quote("AAPL").await?;
let trade = client.get_latest_trade("TSLA").await?;
let snapshot = client.get_snapshot("SPY").await?;
let bars = client.get_bars("SOXL", start, end, "1Day", None, None, None).await?;

// Reference Data
let assets = client.get_assets(Some("active"), Some("us_equity")).await?;
let calendar = client.get_calendar(Some(start), Some(end)).await?;
let clock = client.get_clock().await?;

SDK — WebSocket Streaming

use alpaca_sdk::{AlpacaConfig, AlpacaStream, MarketDataFeed};

let config = AlpacaConfig::from_env()?;

// Real-time market data
let mut stream = AlpacaStream::connect_market_data(&config, MarketDataFeed::Iex).await?;
stream.subscribe_trades(&["AAPL", "TSLA"]).await?;
stream.subscribe_quotes(&["SPY"]).await?;

while let Some(msg) = stream.recv().await {
    println!("{:?}", msg?);
}

// Trade updates (order fills, cancellations)
let mut updates = AlpacaStream::connect_trade_updates(&config).await?;
updates.listen_trade_updates().await?;

while let Some(update) = updates.recv_trade_update().await {
    println!("{:?}", update?);
}

CLI

# Set credentials
export APCA_API_KEY_ID=your_key
export APCA_API_SECRET_KEY=your_secret

# Run commands
cargo run -p alpaca-cli -- account
cargo run -p alpaca-cli -- quote AAPL
cargo run -p alpaca-cli -- bars SOXL --start 2024-01-01 --end 2024-12-31
cargo run -p alpaca-cli -- positions
cargo run -p alpaca-cli -- orders --status open
cargo run -p alpaca-cli -- clock

Configuration

Set environment variables or use AlpacaConfig::paper():

Variable Required Default
APCA_API_KEY_ID Yes -
APCA_API_SECRET_KEY Yes -
APCA_TRADING_BASE_URL No https://paper-api.alpaca.markets
APCA_MARKET_DATA_BASE_URL No https://data.alpaca.markets

API Coverage

Trading API

  • Account details
  • Submit / get / list / cancel / cancel all / replace orders
  • List / close positions
  • List / get assets
  • Trading calendar
  • Market clock

Market Data API

  • Latest quotes and trades
  • Stock snapshots (trade + quote + bars)
  • Historical bars with auto-pagination
  • Historical trades with auto-pagination
  • Supports all timeframes (1Min, 5Min, 15Min, 1Hour, 1Day)

Options (read-only)

  • Option contracts / chain reference data (get_option_contracts, trading API) with bounded next_page_token pagination
  • Option snapshots — latest quote, trade, greeks, and implied volatility (get_option_snapshots, market-data API, v1beta1, OPRA feed)

WebSocket Streaming

  • Real-time trades, quotes, and minute bars (IEX / SIP feeds)
  • Account trade updates (order fills, cancellations, replacements)

Development

cargo build --workspace     # Build all crates
cargo test --workspace      # Run all tests
cargo clippy --workspace -- -D warnings  # Lint
cargo fmt --all             # Format

License

MIT