MT5Account · Trading - Overview¶
Order execution, position management, margin calculations, and trade validation. Use this page to choose the right API for trading operations and pre-trade calculations.
📁 What lives here¶
- OrderSend - place orders (market or pending) to open positions.
- OrderModify - modify existing positions or pending orders (SL/TP/price/expiration).
- OrderClose - close positions or delete pending orders (full or partial).
- OrderCalcMargin - calculate margin required for a trade (pre-trade check).
- OrderCalcProfit - calculate profit/loss for a trade scenario (risk/reward analysis).
- OrderCheck - validate trade request before sending (check funds, margin, parameters).
🧭 Plain English¶
- OrderSend → execute trades (market BUY/SELL or pending orders).
- OrderModify → change SL/TP or order parameters after placement.
- OrderClose → exit positions or cancel pending orders.
- OrderCalcMargin → "How much margin do I need?" before placing order.
- OrderCalcProfit → "How much will I make/lose?" for profit targets and stop losses.
- OrderCheck → "Can I afford this trade?" validation before execution.
Rule of thumb: Calculate first (CalcMargin, CalcProfit, OrderCheck) → then execute (OrderSend) → then manage (OrderModify, OrderClose).
Quick choose¶
| If you need… | Use | Returns | Key inputs |
|---|---|---|---|
| Open position or place pending order | OrderSend |
Order/deal ticket | Symbol, operation, volume, price, SL/TP |
| Modify SL/TP or order parameters | OrderModify |
Success/failure | Ticket, new SL/TP/price/expiration |
| Close position or cancel pending order | OrderClose |
Success/failure | Ticket, volume, slippage |
| Calculate margin required for trade | OrderCalcMargin |
Margin amount | Symbol, order type, volume, price |
| Calculate profit/loss for trade scenario | OrderCalcProfit |
P/L amount | Symbol, order type, volume, open/close price |
| Validate trade before execution | OrderCheck |
Validation result + estimates | Trade request object |
❌ Cross‑refs & gotchas¶
- Return code 10009 = success; other codes = failure (check comment).
- Slippage in points, not pips (EURUSD: 10 points = 1 pip for 5-digit).
- Market orders: price optional (use 0 or current ask/bid).
- Pending orders: price required, must be away from current price.
- SL/TP distance: must meet symbol's Stops Level (see SymbolInfoInteger).
- Partial close: specify volume < position volume.
- Margin calculation: returns margin in account currency.
- Profit calculation: excludes commission, swap, spread.
- OrderCheck: validates parameters and funds, but doesn't execute.
- Magic numbers: use to identify your orders (Expert Advisor ID).
🟢 Minimal snippets¶
// Open market BUY position
var request = Mt5TermApiTradingHelper.OrderSendRequest.newBuilder()
.setSymbol("EURUSD")
.setOperation(Mt5TermApiTradingHelper.TMT5_ENUM_ORDER_TYPE.TMT5_ORDER_TYPE_BUY)
.setVolume(0.1)
.setSlippage(10)
.setStopLoss(1.08000)
.setTakeProfit(1.12000)
.build();
var reply = account.orderSend(request);
if (reply.getData().getReturnedCode() == 10009) {
System.out.printf("✅ Position opened: #%d%n", reply.getData().getOrder());
}
// Modify SL/TP of existing position
var request = Mt5TermApiTradingHelper.OrderModifyRequest.newBuilder()
.setTicket(123456789)
.setStopLoss(1.09000)
.setTakeProfit(1.11000)
.build();
var reply = account.orderModify(request);
if (reply.getData().getReturnedCode() == 10009) {
System.out.println("✅ SL/TP modified");
}
// Close position (full close: volume = 0)
var reply = account.orderClose(123456789, 0.0, 10);
if (reply.getData().getReturnedCode() == 10009) {
System.out.println("✅ Position closed");
}
// Calculate margin before trading
var reply = account.orderCalcMargin(
"GBPUSD",
Mt5TermApiTradeFunctions.ENUM_ORDER_TYPE_TF.ORDER_TYPE_TF_BUY,
1.0, // 1 lot
0.0 // current price
);
double margin = reply.getData().getMargin();
System.out.printf("Required margin: $%.2f%n", margin);
// Calculate profit for trade scenario
var reply = account.orderCalcProfit(
"EURUSD",
Mt5TermApiTradeFunctions.ENUM_ORDER_TYPE_TF.ORDER_TYPE_TF_BUY,
1.0, // 1 lot
1.10000, // entry
1.10500 // exit
);
double profit = reply.getData().getProfit();
System.out.printf("Potential profit: $%.2f%n", profit);
// Validate trade before execution
var tradeRequest = Mt5TermApiTradeFunctions.MrpcMqlTradeRequest.newBuilder()
.setAction(Mt5TermApiTradeFunctions.MRPC_ENUM_TRADE_REQUEST_ACTIONS.TRADE_ACTION_DEAL)
.setSymbol("XAUUSD")
.setVolume(0.1)
.setOrderType(Mt5TermApiTradeFunctions.ENUM_ORDER_TYPE_TF.ORDER_TYPE_TF_BUY)
.build();
var reply = account.orderCheck(tradeRequest);
var result = reply.getData().getMqlTradeCheckResult();
if (result.getReturnedCode() == 10009) {
System.out.printf("✅ Trade valid | Margin: $%.2f | Free margin after: $%.2f%n",
result.getMargin(), result.getFreeMargin());
} else {
System.out.printf("❌ Trade invalid: %s%n", result.getComment());
}
// Risk/reward calculation
double entry = 1.10000;
double stopLoss = 1.09500;
double takeProfit = 1.11000;
// Calculate loss at SL
var lossReply = account.orderCalcProfit("EURUSD",
Mt5TermApiTradeFunctions.ENUM_ORDER_TYPE_TF.ORDER_TYPE_TF_BUY,
1.0, entry, stopLoss);
double loss = Math.abs(lossReply.getData().getProfit());
// Calculate profit at TP
var profitReply = account.orderCalcProfit("EURUSD",
Mt5TermApiTradeFunctions.ENUM_ORDER_TYPE_TF.ORDER_TYPE_TF_BUY,
1.0, entry, takeProfit);
double profit = profitReply.getData().getProfit();
double riskReward = profit / loss;
System.out.printf("Risk/Reward: 1:%.2f%n", riskReward);
See also¶
- Subscriptions:
OnTrade- real-time trade execution events - Subscriptions:
OnTradeTransaction- detailed transaction log - Positions:
OpenedOrders- view current positions - Account:
AccountSummary- check available margin - Symbol info:
SymbolInfoDouble- get stops level, min volume