Skip to main content

symbols_list/
symbols_list.rs

1//! List all symbols for a demo account, then verify XAUUSD exists.
2//!
3//! Usage:
4//!   cargo run --example symbols_list
5
6use std::time::Duration;
7
8use ctrader_rs::{Client, Config};
9
10#[tokio::main]
11async fn main() -> Result<(), Box<dyn std::error::Error>> {
12    dotenvy::dotenv().ok();
13
14    tracing_subscriber::fmt()
15        .with_env_filter("symbols_list=debug,ctrader_rs=debug")
16        .with_line_number(true)
17        .init();
18
19    let client_id = std::env::var("CTRADER_CLIENT_ID")?;
20    let secret = std::env::var("CTRADER_SECRET")?;
21    let token = std::env::var("CTRADER_TOKEN")?;
22    let account_id: i64 = std::env::var("CTRADER_ACCOUNT_ID")?.parse()?;
23
24    let config = Config::new(client_id, secret).deadline(Duration::from_secs(5));
25
26    println!("Connecting …");
27    let client = Client::start(config).await?;
28    println!("✓ Connected");
29
30    // Authenticate the account
31    let auth_res = client.account_auth(account_id, &token).await?;
32    assert_eq!(auth_res.ctid_trader_account_id, account_id);
33    println!("✓ Account {account_id} authenticated");
34
35    // Fetch symbol list
36    let res = client.symbols_list(account_id, false).await?;
37    println!("\nTotal symbols: {}", res.symbol.len());
38
39    // Verify XAUUSD is present (same assertion as the Go test)
40    let xauusd = res
41        .symbol
42        .iter()
43        .find(|s| s.symbol_name.as_deref() == Some("XAUUSD"));
44
45    match xauusd {
46        Some(sym) => println!(
47            "✓ XAUUSD found  (id={}, enabled={})",
48            sym.symbol_id,
49            sym.enabled.unwrap_or(false)
50        ),
51        None => println!("✗ XAUUSD NOT found in symbol list"),
52    }
53
54    // Print first 10 symbols
55    println!("\nFirst 10 symbols:");
56    println!("{:<10} {:<15} {}", "ID", "Name", "Enabled");
57    println!("{}", "-".repeat(35));
58    for sym in res.symbol.iter().take(10) {
59        println!(
60            "{:<10} {:<15} {}",
61            sym.symbol_id,
62            sym.symbol_name.as_deref().unwrap_or(""),
63            sym.enabled.unwrap_or(false),
64        );
65    }
66
67    Ok(())
68}