MT5Account Β· Additional Methods - OverviewΒΆ
Advanced symbol information, trading sessions, margin rates, batch operations. Use this page to choose the right API for advanced queries.
π What lives hereΒΆ
Advanced Symbol InformationΒΆ
- SymbolInfoMarginRate - margin rates for symbol and order type.
- SymbolInfoSessionQuote - quote session times.
- SymbolInfoSessionTrade - trade session times.
- SymbolParamsMany - detailed parameters for one or all symbols (116 fields!).
- TickValueWithSize - tick value and size information for symbols.
π Step-by-step tutorialsΒΆ
Want detailed explanations with line-by-line code breakdown? Check these guides:
- SymbolInfoMarginRate - How it works
- SymbolInfoSessionQuote - How it works
- SymbolInfoSessionTrade - How it works
- SymbolParamsMany - How it works
- TickValueWithSize - How it works
π§ Plain EnglishΒΆ
- SymbolInfoMarginRate β get margin multiplier for different order types.
- SymbolInfoSessionQuote β get quote session times (when quotes are available).
- SymbolInfoSessionTrade β get trading session times (when trading is allowed).
- SymbolParamsMany β get complete symbol specifications for one symbol or all symbols in one call (most efficient).
- TickValueWithSize β get tick value and contract size for position value and P&L calculations.
Rule of thumb: need session times β use Session methods; need complete symbol data β use
SymbolParamsMany; need margin rates β useSymbolInfoMarginRate; need tick value/P&L data β useTickValueWithSize.
Quick chooseΒΆ
| If you need⦠| Use | Returns | Key inputs |
|---|---|---|---|
| Margin rates for order type | SymbolInfoMarginRate |
SymbolInfoMarginRateData | Symbol, OrderType |
| Quote session times | SymbolInfoSessionQuote |
SymbolInfoSessionQuoteData (From, To) | Symbol, DayOfWeek, SessionIndex |
| Trading session times | SymbolInfoSessionTrade |
SymbolInfoSessionTradeData (From, To) | Symbol, DayOfWeek, SessionIndex |
| Complete specs for one or all symbols | SymbolParamsMany |
SymbolParamsManyData (SymbolInfos array of SymbolParameters) |
SymbolName (optional), SortType, PageNumber/ItemsPerPage |
| Tick value and size for P&L calculations | TickValueWithSize |
TickValueWithSizeData (SymbolTickSizeInfos array of TickSizeSymbol) |
SymbolNames array |
β Crossβrefs & gotchasΒΆ
- SymbolParamsMany - THE MOST EFFICIENT way to get complete symbol data (116 fields per symbol).
- Session times -
From/Toare timestamps whose time of day is the session boundary; ignore the date part. - Day of week - SUNDAY=0, MONDAY=1, ..., SATURDAY=6.
- Session index - Most symbols have 1 session, some have multiple (e.g., 24h = 1 session, day+night = 2 sessions).
- Margin rates - Different rates for BUY/SELL, LONG/SHORT positions.
- SymbolParamsMany filters - Only
SymbolName(one symbol), sorting and paging; there is no field filter or symbol list. Filter other things on the client side. - Batch operations - SymbolParamsMany without
SymbolNamereturns all symbols in one call.
π’ Minimal snippetsΒΆ
// Get margin rates for symbol
rates, err := account.SymbolInfoMarginRate(ctx, &pb.SymbolInfoMarginRateRequest{
Symbol: "EURUSD",
OrderType: pb.ENUM_ORDER_TYPE_ORDER_TYPE_BUY,
})
if err != nil {
log.Fatalf("Failed: %v", err)
}
fmt.Printf("EURUSD BUY margin rates:\n")
fmt.Printf(" Initial: %.2f\n", rates.InitialMarginRate)
fmt.Printf(" Maintenance: %.2f\n", rates.MaintenanceMarginRate)
// Get trading session times for Monday
sessionInfo, _ := account.SymbolInfoSessionTrade(ctx, &pb.SymbolInfoSessionTradeRequest{
Symbol: "EURUSD",
DayOfWeek: pb.DayOfWeek_MONDAY,
SessionIndex: 0,
})
fromTime := sessionInfo.From.AsTime()
toTime := sessionInfo.To.AsTime()
fromSeconds := fromTime.Hour()*3600 + fromTime.Minute()*60 + fromTime.Second()
toSeconds := toTime.Hour()*3600 + toTime.Minute()*60 + toTime.Second()
fmt.Printf("EURUSD Monday trading session:\n")
fmt.Printf(" From: %d seconds (%.2f hours)\n",
fromSeconds, float64(fromSeconds)/3600)
fmt.Printf(" To: %d seconds (%.2f hours)\n",
toSeconds, float64(toSeconds)/3600)
// Get complete symbol parameters for several symbols:
// one call for all symbols, then keep the wanted ones (there is no symbol-list filter)
wanted := map[string]bool{"EURUSD": true, "GBPUSD": true, "USDJPY": true}
params, err := account.SymbolParamsMany(ctx, &pb.SymbolParamsManyRequest{})
if err != nil {
log.Fatalf("Failed: %v", err)
}
for _, symbolParam := range params.SymbolInfos {
if !wanted[symbolParam.Name] {
continue
}
fmt.Printf("\n%s:\n", symbolParam.Name)
fmt.Printf(" Bid: %.5f, Ask: %.5f\n", symbolParam.Bid, symbolParam.Ask)
fmt.Printf(" Digits: %d, Point: %.5f\n", symbolParam.Digits, symbolParam.Point)
fmt.Printf(" Volume: %.2f - %.2f (step: %.2f)\n",
symbolParam.VolumeMin, symbolParam.VolumeMax, symbolParam.VolumeStep)
fmt.Printf(" Contract size: %.0f\n", symbolParam.TradeContractSize)
fmt.Printf(" Spread: %d points\n", symbolParam.Spread)
}
// Get all trading sessions for a week
symbol := "EURUSD"
var days []pb.DayOfWeek // Monday through Friday
days = append(days, pb.DayOfWeek_MONDAY, pb.DayOfWeek_TUESDAY, pb.DayOfWeek_WEDNESDAY,
pb.DayOfWeek_THURSDAY, pb.DayOfWeek_FRIDAY)
dayNames := []string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}
fmt.Printf("%s Trading Schedule:\n", symbol)
fmt.Println("βββββββββββββββββββββββββββββββββββββ")
for i, day := range days {
session, err := account.SymbolInfoSessionTrade(ctx, &pb.SymbolInfoSessionTradeRequest{
Symbol: symbol,
DayOfWeek: day,
SessionIndex: 0,
})
if err != nil {
continue
}
fromTime := session.From.AsTime()
toTime := session.To.AsTime()
fromHours := float64(fromTime.Hour()*3600 + fromTime.Minute()*60 + fromTime.Second()) / 3600
toHours := float64(toTime.Hour()*3600 + toTime.Minute()*60 + toTime.Second()) / 3600
fmt.Printf("%s: %.2f:00 - %.2f:00\n",
dayNames[i], fromHours, toHours)
}
// Batch query all forex majors with SymbolParamsMany (all symbols, filtered on the client side)
majors := map[string]bool{
"EURUSD": true, "GBPUSD": true, "USDJPY": true, "USDCHF": true,
"AUDUSD": true, "USDCAD": true, "NZDUSD": true,
}
params, _ := account.SymbolParamsMany(ctx, &pb.SymbolParamsManyRequest{})
fmt.Println("Forex Majors Summary:")
fmt.Println("βββββββββββββββββββββββββββββββββββββββββββββββββββββ")
fmt.Printf("%-8s %-10s %-10s %-8s\n", "Symbol", "Bid", "Ask", "Spread")
fmt.Println("βββββββββββββββββββββββββββββββββββββββββββββββββββββ")
for _, sp := range params.SymbolInfos {
if !majors[sp.Name] {
continue
}
fmt.Printf("%-8s %-10.5f %-10.5f %-8d\n",
sp.Name, sp.Bid, sp.Ask, sp.Spread)
}
See alsoΒΆ
- Basic symbol info: SymbolInfoTick - get current prices
- Symbol properties: SymbolInfoDouble - get single property
- Trading: OrderCalcMargin - uses margin rates internally