Skip to content

MT5Account · Symbol Information - Overview

Quotes, symbol properties, trading rules, tick values, Market Watch management. Use this page to choose the right API for symbol data.

📁 What lives here

Current Quotes

  • SymbolInfoTick - current quote for symbol (bid, ask, last, volume, time).

Symbol Inventory & Management

Symbol Properties


📚 Step-by-step tutorials

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


🧭 Plain English

  • SymbolInfoTick → get current prices (bid, ask, last).
  • SymbolsTotal/SymbolNameiterate through all symbols.
  • SymbolSelectadd/remove symbol from Market Watch.
  • SymbolExistcheck if symbol exists on broker.
  • SymbolInfo → get specific symbol property* (double/integer/string).

Rule of thumb: need current priceSymbolInfoTick; need symbol listSymbolsTotal + SymbolName; need specific propertySymbolInfo*.


Quick choose

If you need… Use Returns Key inputs
Current quote (bid, ask, last) SymbolInfoTick MrpcMqlTick Symbol
Count available symbols SymbolsTotal int32 Mode (bool)
Get symbol name by index SymbolName string Index, Selected
Add/remove symbol from Market Watch SymbolSelect bool Symbol, Select (true/false)
Check if symbol exists SymbolExist bool Name
Check if symbol data is synced SymbolIsSynchronized bool Symbol
One numeric property (bid, point, volume, etc.) SymbolInfoDouble float64 Symbol, Type (enum)
One integer property (digits, spread, etc.) SymbolInfoInteger int64 Symbol, Type (enum)
One text property (description, currency) SymbolInfoString string Symbol, Type (enum)

❌ Cross‑refs & gotchas

  • SymbolInfoTick - Use this for current prices; updates in real-time.
  • Bid vs Ask - BUY orders use Ask price, SELL orders use Bid price.
  • Market Watch - Symbol must be in Market Watch to get live updates (use SymbolSelect).
  • Synchronization - Check SymbolIsSynchronized before trading to ensure data is current.
  • Digits - Number of decimal places (e.g., EURUSD = 5, USDJPY = 3).
  • Point - Minimal price change (e.g., 0.00001 for 5-digit EURUSD).
  • Volume limits - Check VOLUME_MIN, VOLUME_MAX, VOLUME_STEP before placing orders.
  • Stop level - Minimum distance for SL/TP from current price (in points).

🟢 Minimal snippets

// Get current quote
tick, err := account.SymbolInfoTick(ctx, &pb.SymbolInfoTickRequest{
    Symbol: "EURUSD",
})
if err != nil {
    log.Fatalf("Failed: %v", err)
}

fmt.Printf("EURUSD: Bid=%.5f, Ask=%.5f, Spread=%.5f\n",
    tick.Bid, tick.Ask, tick.Ask-tick.Bid)
// List all available symbols
totalData, _ := account.SymbolsTotal(ctx, &pb.SymbolsTotalRequest{
    Selected: false,
})

fmt.Printf("Available symbols: %d\n", totalData.Total)

for i := int32(0); i < totalData.Total; i++ {
    nameData, _ := account.SymbolName(ctx, &pb.SymbolNameRequest{
        Index:    i,
        Selected: false,
    })
    fmt.Printf("%d. %s\n", i+1, nameData.Name)
}
// Add symbol to Market Watch
selectData, _ := account.SymbolSelect(ctx, &pb.SymbolSelectRequest{
    Symbol: "GBPUSD",
    Select: true,
})

if selectData.Success {
    fmt.Println("✅ GBPUSD added to Market Watch")
} else {
    fmt.Println("❌ Failed to add GBPUSD")
}
// Check if symbol exists
existData, _ := account.SymbolExist(ctx, &pb.SymbolExistRequest{
    Name: "EURUSD",
})

if existData.Exists {
    fmt.Println("✅ Symbol exists")
} else {
    fmt.Println("❌ Symbol not found")
}
// Get symbol properties
digitsData, _ := account.SymbolInfoInteger(ctx, &pb.SymbolInfoIntegerRequest{
    Symbol: "EURUSD",
    Type:   pb.SymbolInfoIntegerProperty_SYMBOL_DIGITS,
})

pointData, _ := account.SymbolInfoDouble(ctx, &pb.SymbolInfoDoubleRequest{
    Symbol: "EURUSD",
    Type:   pb.SymbolInfoDoubleProperty_SYMBOL_POINT,
})

fmt.Printf("EURUSD: Digits=%d, Point=%.5f\n", digitsData.Value, pointData.Value)

See also