Skip to content

MT5Account - Symbol Information - Overview

Symbol prices, properties, parameters, and trading conditions. Query individual properties or get complete symbol data.

📁 What lives here


📚 Step-by-step tutorials

Want detailed explanations with line-by-line code breakdown? Check these guides:


🧭 Plain English

  • symbols_total - how many symbols are available (all or Market Watch only).
  • symbol_exist - check if symbol name is valid.
  • symbol_name - get symbol name by position number.
  • symbol_select - show/hide symbol in Market Watch.
  • symbol_is_synchronized - verify symbol data is up-to-date.
  • symbol_info_double - get one numeric value (price, spread, etc.).
  • symbol_info_integer - get one integer value (digits, spread points, etc.).
  • symbol_info_string - get one text value (description, currency, etc.).
  • symbol_info_tick - get current price snapshot.
  • symbol_info_margin_rate - get margin requirements.
  • symbol_info_session_quote/trade - get trading hours.
  • symbol_params_many - get ALL properties in one call (most efficient).

Rule of thumb: need all properties - symbol_params_many() (RECOMMENDED); need one property - symbol_info_*; need current price - symbol_info_tick().


Quick choose

If you need Use Returns Key inputs
Count of symbols symbols_total SymbolsTotalData (count) selected_only (bool)
Check symbol exists symbol_exist SymbolExistData (bool) symbol name
Symbol name by position symbol_name SymbolNameData (string) index, selected
Add/remove from Market Watch symbol_select SymbolSelectData (bool) symbol, select
Check data synchronized symbol_is_synchronized SymbolIsSynchronizedData symbol name
Single double value symbol_info_double SymbolInfoDoubleData symbol, property enum
Single integer value symbol_info_integer SymbolInfoIntegerData symbol, property enum
Single string value symbol_info_string SymbolInfoStringData symbol, property enum
Current tick (BID/ASK/volume) symbol_info_tick MrpcMqlTick symbol name
Margin rates symbol_info_margin_rate SymbolInfoMarginRateData symbol, order_type
Quote session times symbol_info_session_quote SymbolInfoSessionQuoteData symbol, day, session_index
Trade session times symbol_info_session_trade SymbolInfoSessionTradeData symbol, day, session_index
ALL symbol parameters (RECOMMENDED) symbol_params_many SymbolParamsManyData symbol_name (optional), pagination

ℹ️ Cross-refs & gotchas

  • symbol_params_many - RECOMMENDED for getting multiple properties (single call instead of many).
  • BID vs ASK - BID is sell price, ASK is buy price. Spread = ASK - BID.
  • DIGITS - number of decimal places for symbol (e.g., 5 for EURUSD = 1.12345).
  • SPREAD - current spread in points, not pips (for 5-digit: 1 pip = 10 points).
  • Market Watch - symbols must be in Market Watch to get prices.
  • Synchronization - check symbol_is_synchronized() before trading.
  • Session times - returned in seconds from midnight (convert to hours:minutes).
  • Tick data - use symbol_info_tick() for real-time price snapshot.

🟢 Minimal snippets

from MetaRpcMT5.mt5_account import MT5Account
import MetaRpcMT5.mt5_term_api_account_helper_pb2 as account_helper_pb2

# Get complete symbol parameters (RECOMMENDED)
request = account_helper_pb2.SymbolParamsManyRequest(symbol_name="EURUSD")
data = await account.symbol_params_many(request=request)
if data.symbol_infos:
    info = data.symbol_infos[0]
    print(f"BID: {info.bid}, ASK: {info.ask}")
    print(f"Spread: {info.spread}, Digits: {info.digits}")
    print(f"Contract Size: {info.trade_contract_size}")
# Get current tick
tick = await account.symbol_info_tick(symbol="EURUSD")
print(f"BID: {tick.bid}, ASK: {tick.ask}")
print(f"Spread: {tick.ask - tick.bid}")
# Get specific properties
import MetaRpcMT5.mt5_term_api_market_info_pb2 as market_info_pb2

bid_data = await account.symbol_info_double(
    symbol="EURUSD",
    property=market_info_pb2.SYMBOL_BID
)

digits_data = await account.symbol_info_integer(
    symbol="EURUSD",
    property=market_info_pb2.SYMBOL_DIGITS
)

print(f"BID: {bid_data.value:.{digits_data.value}f}")
# Check if symbol exists
data = await account.symbol_exist(symbol="EURUSD")
if data.exists:
    print(f"[OK] EURUSD exists ({'custom' if data.is_custom else 'standard'})")
# Get all Market Watch symbols
count_data = await account.symbols_total(selected_only=True)

symbols = []
for i in range(count_data.total):
    name_data = await account.symbol_name(index=i, selected=True)
    symbols.append(name_data.name)

print(f"Market Watch symbols: {symbols}")
# Add symbol to Market Watch
result = await account.symbol_select(symbol="EURUSD", select=True)
if result.success:
    print("[OK] Symbol added to Market Watch")
# Calculate spread in pips
import MetaRpcMT5.mt5_term_api_market_info_pb2 as market_info_pb2

tick = await account.symbol_info_tick(symbol="EURUSD")
digits_data = await account.symbol_info_integer(
    symbol="EURUSD",
    property=market_info_pb2.SYMBOL_DIGITS
)

digits = digits_data.value
spread_points = (tick.ask - tick.bid) * (10 ** digits)
spread_pips = spread_points / 10 if digits == 5 else spread_points

print(f"Spread: {spread_pips:.1f} pips")
# Get all symbols with parameters
import MetaRpcMT5.mt5_term_api_account_helper_pb2 as account_helper_pb2

request = account_helper_pb2.SymbolParamsManyRequest(items_per_page=100)
data = await account.symbol_params_many(request=request)

print(f"Total symbols: {data.symbols_total}")
for info in data.symbol_infos:
    print(f"{info.name}: BID={info.bid}, ASK={info.ask}, Spread={info.spread}")
# Get margin rates
import MetaRpcMT5.mt5_term_api_market_info_pb2 as market_info_pb2

rates = await account.symbol_info_margin_rate(
    symbol="EURUSD",
    order_type=market_info_pb2.ORDER_TYPE_BUY
)

print(f"Initial margin: {rates.initial_margin_rate}")
print(f"Maintenance margin: {rates.maintenance_margin_rate}")
# Check trading hours
import MetaRpcMT5.mt5_term_api_market_info_pb2 as market_info_pb2

session = await account.symbol_info_session_trade(
    symbol="EURUSD",
    day_of_week=market_info_pb2.MONDAY,
    session_index=0
)

from_hours = session.from.seconds // 3600
from_mins = (session.from.seconds % 3600) // 60
to_hours = session.to.seconds // 3600
to_mins = (session.to.seconds % 3600) // 60

print(f"Monday trading: {from_hours:02d}:{from_mins:02d} - {to_hours:02d}:{to_mins:02d}")

📚 See also