use ccxt_core::ExchangeConfig;
use ccxt_exchanges::binance::Binance;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Binance Order Book WebSocket Example ===\n");
println!("Note: Order book WebSocket feature is pending implementation");
println!("The following examples show planned usage patterns:\n");
let config = ExchangeConfig {
api_key: std::env::var("BINANCE_API_KEY")
.ok()
.map(ccxt_core::SecretString::new),
secret: std::env::var("BINANCE_API_SECRET")
.ok()
.map(ccxt_core::SecretString::new),
..Default::default()
};
let _binance = Binance::new(config)?;
println!("Available Examples:");
println!(" 1. Watch spot order book (fast updates - 100ms)");
example_watch_spot_orderbook_info();
println!("\n 2. Watch order book (slow updates - 1000ms)");
example_watch_orderbook_slow_info();
println!("\n 3. Watch multiple order books simultaneously");
example_watch_multiple_orderbooks_info();
println!("\n 4. Watch futures order book");
example_watch_futures_orderbook_info();
println!("\n 5. Order book depth analysis");
example_orderbook_analysis_info();
println!("\n 6. Monitor real-time order book updates");
example_orderbook_updates_info();
println!("\n=== Example Information Complete ===");
println!("\nTo enable these features, implement the watch_order_book method in Binance.");
println!("Reference: https://binance-docs.github.io/apidocs/spot/en/#diff-depth-stream");
Ok(())
}
fn example_watch_spot_orderbook_info() {
println!("\n--- Example 1: Watch Spot Order Book (Fast Updates) ---");
println!("\nFeatures:");
println!(" • Subscribe to BTC/USDT order book");
println!(" • Fast update speed (100ms)");
println!(" • Monitor top 5 bid/ask levels");
println!(" • Calculate spread and mid-price");
println!("\nExample Code:");
println!(
r#"
let symbol = "BTC/USDT";
let limit = Some(5);
let mut stream = binance.watch_order_book(symbol, limit).await?;
while let Some(orderbook) = stream.next().await {{
println!("Symbol: {{}}", orderbook.symbol);
println!("Best Bid: {{}}", orderbook.bids[0].price);
println!("Best Ask: {{}}", orderbook.asks[0].price);
let spread = orderbook.asks[0].price - orderbook.bids[0].price;
let mid_price = (orderbook.asks[0].price + orderbook.bids[0].price) / 2;
println!("Spread: {{}}", spread);
println!("Mid Price: {{}}", mid_price);
}}
"#
);
}
fn example_watch_orderbook_slow_info() {
println!("\n--- Example 2: Watch Order Book (Slow Updates) ---");
println!("\nFeatures:");
println!(" • Reduced update frequency (1000ms)");
println!(" • Lower bandwidth consumption");
println!(" • Suitable for non-HFT strategies");
println!("\nExample Code:");
println!(
r#"
let symbol = "ETH/USDT";
let limit = Some(10);
let params = HashMap::from([
("updateSpeed".to_string(), "1000ms".to_string())
]);
let mut stream = binance.watch_order_book_with_params(symbol, limit, params).await?;
while let Some(orderbook) = stream.next().await {{
println!("Timestamp: {{}}", orderbook.timestamp);
println!("Depth levels: {{}}", orderbook.bids.len());
}}
"#
);
}
fn example_watch_multiple_orderbooks_info() {
println!("\n--- Example 3: Watch Multiple Order Books ---");
println!("\nFeatures:");
println!(" • Monitor multiple trading pairs");
println!(" • Batch subscription reduces overhead");
println!(" • Compare cross-pair liquidity");
println!("\nExample Code:");
println!(
r#"
let symbols = vec!["BTC/USDT", "ETH/USDT", "BNB/USDT"];
let limit = Some(5);
let mut streams = binance.watch_order_books(symbols, limit).await?;
while let Some((symbol, orderbook)) = streams.next().await {{
println!("\nSymbol: {{}}", symbol);
println!("Best Bid: {{}}", orderbook.bids[0].price);
println!("Best Ask: {{}}", orderbook.asks[0].price);
let liquidity = orderbook.bids.iter()
.take(5)
.map(|level| level.amount)
.sum::<Decimal>();
println!("Top 5 bid liquidity: {{}}", liquidity);
}}
"#
);
}
fn example_watch_futures_orderbook_info() {
println!("\n--- Example 4: Watch Futures Order Book ---");
println!("\nFeatures:");
println!(" • Subscribe to USDT-M futures order book");
println!(" • Higher leverage and volatility");
println!(" • Mark price and funding rate correlation");
println!("\nExample Code:");
println!(
r#"
let symbol = "BTC/USDT:USDT"; // USDT-M perpetual contract
let limit = Some(20);
let params = HashMap::from([
("type".to_string(), "future".to_string())
]);
let mut stream = binance.watch_order_book_with_params(symbol, limit, params).await?;
while let Some(orderbook) = stream.next().await {{
println!("Contract: {{}}", orderbook.symbol);
let total_bid_size = orderbook.bids.iter()
.map(|l| l.amount)
.sum::<Decimal>();
let total_ask_size = orderbook.asks.iter()
.map(|l| l.amount)
.sum::<Decimal>();
println!("Total Bid Size: {{}} BTC", total_bid_size);
println!("Total Ask Size: {{}} BTC", total_ask_size);
let imbalance = total_bid_size / (total_bid_size + total_ask_size);
println!("Buy Pressure: {{}}%", imbalance * 100);
}}
"#
);
}
fn example_orderbook_analysis_info() {
println!("\n--- Example 5: Order Book Depth Analysis ---");
println!("\nFeatures:");
println!(" • Analyze order book structure");
println!(" • Calculate support/resistance levels");
println!(" • Identify large orders (walls)");
println!(" • Measure market depth");
println!("\nExample Code:");
println!(
r#"
let symbol = "BTC/USDT";
let limit = Some(100);
let mut stream = binance.watch_order_book(symbol, limit).await?;
while let Some(orderbook) = stream.next().await {{
// Find largest bid/ask walls
let max_bid = orderbook.bids.iter()
.max_by(|a, b| a.amount.cmp(&b.amount))
.unwrap();
let max_ask = orderbook.asks.iter()
.max_by(|a, b| a.amount.cmp(&b.amount))
.unwrap();
println!("\nLargest Bid Wall:");
println!(" Price: {{}}", max_bid.price);
println!(" Amount: {{}} BTC", max_bid.amount);
println!("\nLargest Ask Wall:");
println!(" Price: {{}}", max_ask.price);
println!(" Amount: {{}} BTC", max_ask.amount);
// Calculate cumulative depth
let depth_1pct = calculate_depth_to_percentage(&orderbook, 0.01);
println!("\nDepth to move price 1%: {{}} USDT", depth_1pct);
}}
"#
);
}
fn example_orderbook_updates_info() {
println!("\n--- Example 6: Real-time Order Book Updates ---");
println!("\nFeatures:");
println!(" • Track order book changes");
println!(" • Detect significant price movements");
println!(" • Monitor spread dynamics");
println!(" • Alert on anomalies");
println!("\nExample Code:");
println!(
r#"
let symbol = "BTC/USDT";
let limit = Some(10);
let mut stream = binance.watch_order_book(symbol, limit).await?;
let mut prev_mid_price = None;
while let Some(orderbook) = stream.next().await {{
let best_bid = orderbook.bids[0].price;
let best_ask = orderbook.asks[0].price;
let spread = best_ask - best_bid;
let spread_pct = (spread / best_bid) * Decimal::from(100);
let mid_price = (best_bid + best_ask) / Decimal::from(2);
println!("\n[{{}}] Update", orderbook.timestamp);
println!("Best Bid: {{}} | Best Ask: {{}}", best_bid, best_ask);
println!("Spread: {{}} ({{}}%)", spread, spread_pct);
if let Some(prev) = prev_mid_price {{
let price_change = ((mid_price - prev) / prev) * Decimal::from(100);
println!("Price Change: {{}}%", price_change);
if price_change.abs() > Decimal::from_str("0.1").unwrap() {{
println!("⚠️ Significant price movement detected!");
}}
}}
if spread_pct > Decimal::from_str("0.05").unwrap() {{
println!("⚠️ Wide spread detected - low liquidity!");
}}
prev_mid_price = Some(mid_price);
}}
"#
);
}