#![allow(clippy::disallowed_methods)]
use ccxt_core::DefaultType;
use ccxt_exchanges::okx::OkxBuilder;
#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("=== OKX Futures (Swap) Example ===\n");
let exchange = OkxBuilder::new().default_type(DefaultType::Swap).build()?;
println!("1. 【fetch_markets】Get all swap markets");
println!(" Fetching swap markets...");
let markets = exchange.fetch_markets().await?;
println!(" ✓ Found {} swap markets", markets.len());
let swaps: Vec<_> = markets
.values()
.filter(|m| m.quote == "USDT" && m.linear.unwrap_or(false))
.take(5)
.collect();
println!(" Sample USDT-margined Swaps:");
for market in swaps {
println!(
" - {} ({}) Linear: {:?} Settle: {:?}",
market.symbol, market.id, market.linear, market.settle
);
}
println!();
exchange.load_markets(false).await?;
let symbol = "BTC/USDT:USDT";
println!("2. 【fetch_ticker】Get {} ticker", symbol);
match exchange.fetch_ticker(symbol).await {
Ok(ticker) => {
println!(" ✓ Successfully fetched ticker");
println!(" - Symbol: {}", ticker.symbol);
println!(" - Last Price: {:?}", ticker.last);
println!(" - Mark Price: {:?}", ticker.mark_price); println!(" - Index Price: {:?}", ticker.index_price);
println!(" - Open Interest: {:?}", ticker.open_interest);
}
Err(e) => {
println!(" ✗ Error: {}", e);
println!(" Trying BTC/USDT...");
match exchange.fetch_ticker("BTC/USDT").await {
Ok(ticker) => println!(" ✓ Fetched BTC/USDT: {:?}", ticker.last),
Err(e2) => println!(" ✗ Error: {}", e2),
}
}
}
println!();
println!("3. 【fetch_order_book】Get {} order book", symbol);
match exchange.fetch_order_book(symbol, Some(5)).await {
Ok(order_book) => {
println!(" ✓ Successfully fetched order book");
if let Some(best_bid) = order_book.bids.first() {
println!(" - Best Bid: {} @ {}", best_bid.amount, best_bid.price);
}
if let Some(best_ask) = order_book.asks.first() {
println!(" - Best Ask: {} @ {}", best_ask.amount, best_ask.price);
}
}
Err(e) => println!(" ✗ Error: {}", e),
}
println!();
println!("=== Example Complete ===");
Ok(())
}