β Symbol Info Margin Rate¶
Request: get margin rates for a symbol given an order type (BUY/SELL). Returns initial and maintenance rates.
Source files:
MetaRpcMT5/mt5_account.py
β methodsymbol_info_margin_rate(...)
MetaRpcMT5/mt5_term_api_market_info_pb2.py
βSymbolInfoMarginRate*
messages (SymbolInfoMarginRateRequest
,SymbolInfoMarginRateReply
,SymbolInfoMarginRateData
) and enumENUM_ORDER_TYPE
MetaRpcMT5/mt5_term_api_market_info_pb2_grpc.py
β service stubMarketInfoStub
RPC¶
- Service:
mt5_term_api.MarketInfo
- Method:
SymbolInfoMarginRate(SymbolInfoMarginRateRequest) β SymbolInfoMarginRateReply
- Low-level client:
MarketInfoStub.SymbolInfoMarginRate(request, metadata, timeout)
- SDK wrapper:
MT5Account.symbol_info_margin_rate(symbol, order_type, deadline=None, cancellation_event=None)
β returnsSymbolInfoMarginRateData
π Code Example¶
# Ask margin rates for placing a BUY order
from MetaRpcMT5 import mt5_term_api_market_info_pb2 as mi_pb2
rates = await acct.symbol_info_margin_rate(
"EURUSD",
mi_pb2.ENUM_ORDER_TYPE.ORDER_TYPE_BUY,
)
print(rates.initial_margin_rate, rates.maintenance_margin_rate)
# Compare BUY vs SELL
from MetaRpcMT5 import mt5_term_api_market_info_pb2 as mi_pb2
buy = await acct.symbol_info_margin_rate("XAUUSD", mi_pb2.ENUM_ORDER_TYPE.ORDER_TYPE_BUY)
sell = await acct.symbol_info_margin_rate("XAUUSD", mi_pb2.ENUM_ORDER_TYPE.ORDER_TYPE_SELL)
print("BUY initial:", buy.initial_margin_rate, "SELL initial:", sell.initial_margin_rate)
Method Signature¶
async def symbol_info_margin_rate(
self,
symbol: str,
order_type: market_info_pb2.ENUM_ORDER_TYPE,
deadline: datetime | None = None,
cancellation_event: asyncio.Event | None = None,
) -> market_info_pb2.SymbolInfoMarginRateData
π¬ Plain English¶
- What it is. Server-calculated margin rates (initial & maintenance) for a symbol under a specific order type.
- Why you care. Use these to estimate required margin before placing orders or sizing positions.
-
Mind the traps.
-
Rates are broker/symbol specific and can vary by order type (BUY vs SELL) and account settings.
- Returned values are rates, not absolute money β multiply by contract/price to project margin.
π½ Input¶
Parameter | Type | Description | |
---|---|---|---|
symbol |
str (required) |
Symbol name. | |
order_type |
ENUM_ORDER_TYPE (required) |
BUY/SELL/etc. context for which to compute rates. | |
deadline |
`datetime | None` | Absolute perβcall deadline β converted to timeout. |
cancellation_event |
`asyncio.Event | None` | Cooperative cancel for the retry wrapper. |
Request message:
SymbolInfoMarginRateRequest { symbol: string, order_type: ENUM_ORDER_TYPE }
β¬οΈ Output¶
Payload: SymbolInfoMarginRateData
¶
Field | Proto Type | Description |
---|---|---|
maintenance_margin_rate |
double |
Maintenance margin rate. |
initial_margin_rate |
double |
Initial margin rate. |
Wire reply:
SymbolInfoMarginRateReply { data: SymbolInfoMarginRateData, error: Error? }
SDK returnsreply.data
.
Enum: ENUM_ORDER_TYPE
¶
Number | Value |
---|---|
0 | ORDER_TYPE_BUY |
1 | ORDER_TYPE_SELL |
2 | ORDER_TYPE_BUY_LIMIT |
3 | ORDER_TYPE_SELL_LIMIT |
4 | ORDER_TYPE_BUY_STOP |
5 | ORDER_TYPE_SELL_STOP |
6 | ORDER_TYPE_BUY_STOP_LIMIT |
7 | ORDER_TYPE_SELL_STOP_LIMIT |
8 | ORDER_TYPE_CLOSE_BY |
π― Purpose¶
- Preβcheck margin requirements before placing or modifying orders.
- Display margin components in UI (initial & maintenance).
- Audit broker settings across instruments.
π§© Notes & Tips¶
- Pair with
symbol_info_double(SYMBOL_TRADE_CONTRACT_SIZE)
and current price to project absolute margin per lot. - For precise feasibility (free margin after/retcode), use
OrderCheck
.
See also: order_calc_margin.md, order_check.md, symbol_info_double.md
Usage Examples¶
1) Rough initial margin per 1 lot (illustrative)¶
from MetaRpcMT5 import mt5_term_api_market_info_pb2 as mi_pb2
rates = await acct.symbol_info_margin_rate("EURUSD", mi_pb2.ENUM_ORDER_TYPE.ORDER_TYPE_BUY)
contract = await acct.symbol_info_double("EURUSD", mi_pb2.SymbolInfoDoubleProperty.SYMBOL_TRADE_CONTRACT_SIZE)
print("rate:", rates.initial_margin_rate, "contract:", contract.value)
2) With deadline & cancel¶
import asyncio
from datetime import datetime, timedelta, timezone
from MetaRpcMT5 import mt5_term_api_market_info_pb2 as mi_pb2
cancel_event = asyncio.Event()
res = await acct.symbol_info_margin_rate(
"BTCUSD",
mi_pb2.ENUM_ORDER_TYPE.ORDER_TYPE_BUY,
deadline=datetime.now(timezone.utc) + timedelta(seconds=2),
cancellation_event=cancel_event,
)
print(res.initial_margin_rate, res.maintenance_margin_rate)