Skip to content

MT5Account · Symbol Information - Overview

Symbol properties, trading sessions, market data, and symbol availability. Use this page to choose the right API for accessing symbol information.

📁 What lives here

  • SymbolInfoDouble - single double value from symbol (bid, ask, spread, tick size, etc.).
  • SymbolInfoInteger - single integer value from symbol (digits, spread, time flags, etc.).
  • SymbolInfoString - single string value from symbol (description, path, category, etc.).
  • SymbolInfoTick - latest tick data for symbol (bid, ask, last, volume, time).
  • SymbolsTotal - count of available symbols (all or Market Watch only).
  • SymbolExist - check if symbol exists (standard or custom).
  • SymbolName - get symbol name by index from list.
  • SymbolSelect - add/remove symbol to/from Market Watch.
  • SymbolIsSynchronized - check if symbol data is synchronized with server.

🧭 Plain English

  • SymbolInfo (Double/Integer/String) → grab one specific property* of a symbol.
  • SymbolInfoTick → get current market prices (bid/ask) for a symbol.
  • SymbolsTotal → count how many symbols are available.
  • SymbolExist → verify if a symbol exists before trading.
  • SymbolSelect → enable symbol for quotes and trading.
  • SymbolName → iterate through symbols by index.
  • SymbolIsSynchronized → ensure data is fresh before trading.

Rule of thumb: need one propertySymbolInfo*Async; need current pricesSymbolInfoTickAsync; need symbol management → Select/Exist/IsSynchronized.


Quick choose

If you need… Use Returns Key inputs
One numeric value (bid, ask, spread, etc.) SymbolInfoDoubleAsync Single double Symbol name + Property enum
One integer value (digits, time flags, etc.) SymbolInfoIntegerAsync Single long Symbol name + Property enum
One text value (description, currency, etc.) SymbolInfoStringAsync Single string Symbol name + Property enum
Current market prices (bid/ask/last) SymbolInfoTickAsync MrpcMqlTick object Symbol name
Count of available symbols SymbolsTotalAsync int Selected only (true/false)
Check if symbol exists SymbolExistAsync Exists + IsCustom flags Symbol name
Get symbol name by index SymbolNameAsync string Index + Selected flag
Add/remove symbol from Market Watch SymbolSelectAsync Success flag Symbol name + Select flag
Check if symbol data is synchronized SymbolIsSynchronizedAsync bool Symbol name

❌ Cross‑refs & gotchas

  • SymbolSelect must be called before accessing quotes for some symbols.
  • Spread is in points, not pips - divide by 10 for 5-digit brokers.
  • Tick size determines minimum price change - important for pending orders.
  • Contract size affects lot calculations - 1 lot = contract size units.
  • Digits determines price precision - use for rounding prices.
  • Session times vary by broker and symbol - check trading hours.

🟢 Minimal snippets

// Get current bid/ask prices
var tick = await account.SymbolInfoTickAsync("EURUSD");
Console.WriteLine($"EURUSD - Bid: {tick.Bid:F5}, Ask: {tick.Ask:F5}, Spread: {(tick.Ask - tick.Bid) * 100000:F1} points");
// Get symbol spread
var spread = await account.SymbolInfoIntegerAsync("EURUSD",
    SymbolInfoIntegerProperty.SymbolSpread);
Console.WriteLine($"Spread: {spread} points");
// Check if symbol exists before trading
var existData = await account.SymbolExistAsync("BTCUSD");
if (existData.Exists)
{
    Console.WriteLine($"Symbol exists! Is custom: {existData.IsCustom}");
}
else
{
    Console.WriteLine("Symbol not found!");
}
// Add symbol to Market Watch
var success = await account.SymbolSelectAsync("XAUUSD", select: true);
if (success.Success)
{
    // Wait for synchronization
    var synced = await account.SymbolIsSynchronizedAsync("XAUUSD");
    if (synced.Synchronized)
    {
        Console.WriteLine("Symbol ready for trading!");
    }
}
// Iterate through all symbols in Market Watch
var total = await account.SymbolsTotalAsync(selectedOnly: true);
for (int i = 0; i < total.Total; i++)
{
    var symbolData = await account.SymbolNameAsync(i, selected: true);
    Console.WriteLine($"[{i}] {symbolData.Name}");
}

See also