Wrong symbol, lot size or account in MT5? Three checklists to fix it.
Your TradingView alert reached MT5, but the result is not what you sent: symbol not found on gold, 0.01 lots instead of 0.50, or a trade on the demo account instead of the live one. These are three different problems with three different fixes. Below are the checklists, in the order that usually finds the cause fastest.
The 30-second diagnosis
Before changing anything, find out what MT5 actually received. In the MT5 Experts tab, the EA writes a [PROC] line for every signal it receives, with the signal id, action, symbol and lot; the [SEND] line is the order it sent to the broker. In the dashboard, each signal shows its status (EXECUTED, FILTERED, FAILED, NOT_DELIVERED or PENDING) and the reason. Compare those with your alert message and jump to the matching checklist:
account field, a typo in it, or demo and live connected with the same tokenChecklist 1: the symbol
TradingView and your broker do not share a symbol dictionary. The same instrument often has a different name, a suffix that depends on the account type, or both. Typical patterns you will find across MT5 brokers (broker-by-broker notes in our MT5 broker guides and prop firm guides):
- Read your broker's real name. In MT5 open View → Symbols (Ctrl+U) and search for the instrument. Check that it exists on your account: at some brokers a Raw and a Standard account list the same instrument with different suffixes.
- Know what
{{ticker}}sends. According to TradingView's help on alert placeholders (checked 4 October 2026),{{ticker}}is the ticker alone, such as AAPL or BTCUSD, and{{exchange}}is a separate placeholder. So an alert onOANDA:XAUUSDsendsXAUUSD, not the exchange prefix. But it is still TradingView's ticker: a chart ofOANDA:NAS100USDsendsNAS100USD. If the server receives the literal text{{ticker}}because the placeholder was not replaced, the alert is rejected with HTTP 400. - Let the EA resolve suffixes. The SignalForge EA tries the exact name first, then the name plus common suffixes (
.a.b.i.pro.raw.std.stpmpro#), and finally the first broker symbol that contains the name. That is whyEURUSDfindsEURUSDmorEURUSD.raw, andUS30findsUS30.cash, without you touching the alert. - Send the exact name when it is a different word. No suffix logic turns
US30intoDJ30orNAS100intoUSTEC: the EA reports symbol not found. Also send the exact name when your broker lists several variants of one instrument, because the last fallback takes the first match it finds. - Gold named GOLD. The server applies two global aliases,
GOLD→XAUUSDandSILVER→XAGUSD(never the other way round), because most brokers use the XAU/XAG names. If your broker literally calls goldGOLD, you will see symbol not found: XAUUSD. Do not switch the alert to XAUUSD (your terminal has none): keepGOLDand email [email protected] so support adds a per-account alias that keeps GOLD as GOLD. The same per-account alias covers other renames, such as US30 to DJ30. - No symbol in the alert = the chart's symbol. If the alert has no
symbol, the EA trades the symbol of the chart it is attached to. An EA sitting on a EURUSD chart turns a symbol-less gold alert into a EURUSD trade. - Closed market looks like a symbol problem but is not. If the symbol exists but its session is closed, the broker answers retcode 10018 (market closed). The server does not check trading hours; the broker does.
// broker names the Dow "DJ30": send the broker's exact name
{"action":"buy","symbol":"DJ30","lot":0.1,"sl":150,"tp":300}
// broker uses EURUSDm or EURUSD.raw: the plain name is enough
{"action":"sell","symbol":"EURUSD","sl":20,"tp":40}
// TradingView ticker placeholder (ticker only, no exchange prefix)
{"action":"buy","symbol":"{{ticker}}","sl":20,"tp":40}Checklist 2: the lot size (and SL/TP units)
The number one cause of “the lot is not the one I sent” is not a bug: it is the position size type of the account. Work down the list:
- Fixed mode ignores the alert's lot. In Dashboard → Execution each account has a position size type: fixed (the default, 0.01), risk % or lot from the signal. Only the last one uses the lot in your alert. In fixed mode,
"lot":0.5still opens the fixed lot. - Use
lotorvolume. Those are the lot fields (plus PineConnector's syntax).lots,qtyandquantityare not read as a lot. That is deliberate: in tools like TradersPost,quantitymeans contracts or shares, and treatingquantity: 1as one MT5 lot could open a position far larger than intended. - Stay between 0.01 and 500. A lot outside that range is rejected by the server with HTTP 422 and never reaches MT5.
- Risk mode needs a stop loss. In risk % mode the EA computes the lot from the stop-loss distance. Without an SL in the signal it falls back to the fixed lot. There is no
riskfield in the alert: the percentage lives in the dashboard, per account. - The broker's volume rules win. The EA adapts the lot to the symbol's minimum, maximum and step: below the minimum it rises to the minimum, above the maximum it is capped, and it is rounded down to the step. Example: with a step of 0.01, 0.257 becomes 0.25; if a broker's minimum for an index is 0.10, a 0.01 alert opens 0.10, ten times what you planned. Check the values in the symbol's Specification window (right-click the symbol in Market Watch).
- Same lot, different money. A lot is a number of contracts, and the contract size is set by each broker. Worked example: if gold's contract size is 100 oz, 1.00 lot moves about $100 for every $1 change in price; at a broker where the contract is smaller, the same 1.00 lot moves proportionally less. Index CFDs vary even more between brokers. Copying a fixed lot from one broker to another can therefore change your risk several times over; the Specification window shows the contract size.
- Match the SL/TP unit mode.
slandtpare plain numbers; what they mean depends on each account's SL/TP mode in the dashboard: pips (default), points, price or units. Sending prices like"sl":2381.5to an account in pips mode produces absurd levels or error 10016 (invalid stops; the EA retries without stops and adds them afterwards). On gold and indices, what one pip means varies by broker: test on demo, or use price mode. - Relative fields have limits.
entry_pct,sl_pct,tp_pctandentry_pipsmust be greater than 0 and no more than 50, otherwise the alert gets HTTP 422.
// account set to "lot from the signal" and SL/TP mode "price"
{"action":"buy","symbol":"XAUUSD","lot":0.5,"sl":2381.5,"tp":2410.0}
// NOT read as a lot: falls back to the account's sizing
{"action":"buy","symbol":"XAUUSD","qty":0.5}
// relative stops: 0.5% below / 1% above the entry
{"action":"buy","symbol":"XAUUSD","lot":0.2,"sl_pct":0.5,"tp_pct":1}To turn a risk amount into lots before you write the alert, use the lot size calculator. Full field reference in the documentation.
Checklist 3: the account
With several MT5 accounts on one plan, routing mistakes are silent: the trade executes, just not where you expected.
- One token, every live account. Your webhook token is per user, not per account. An alert without an
accountfield goes to every live account, meaning every EA with a heartbeat in the last 15 minutes (the EA beats every 30 seconds). A demo terminal you forgot to close counts. - Target with
account. It accepts the MT5 login or the account label and must match exactly; send it as a quoted string. A pluralaccountsfield or a list is not read, so the alert is broadcast to all accounts. - A dead target does not fall back. If the account you name has no heartbeat in the last 15 minutes, the alert is rejected with HTTP 422 (no live broker accounts) and no other account takes it. That is safer than trading the wrong account, but it means a closed terminal silently skips the signal.
- Same login on two servers. Some brokers and prop firms reuse login numbers across servers (a demo and a live account, or two challenge phases). Targeting by login then picks only one of them. Give each account a distinct label and target the label.
- More EAs than your plan allows. If more accounts are connected than the plan covers (Starter 1, Trader 3, Pro 5, Elite 10), only that many receive signals, the ones registered first. Add extra accounts for $3/mo each (up to 3 on Starter, 5 on Trader) or move up a plan: pricing.
- One MT5 account, one terminal with the EA. The same login running the EA on your PC and on a hosted terminal at the same time can execute one webhook twice. See duplicate orders.
- Wrong lot on one account only? Position size type, SL/TP mode and trading hours are per account. If the alert is right and only one account misbehaves, compare its Execution settings with the others.
// every live account on your token
{"action":"buy","symbol":"EURUSD","sl":20,"tp":40}
// only MT5 login 12345678 (quoted string)
{"action":"buy","symbol":"EURUSD","sl":20,"tp":40,"account":"12345678"}
// by label, when two accounts share a login on different servers
{"action":"buy","symbol":"EURUSD","sl":20,"tp":40,"account":"ftmo-phase2"}Running several accounts: hosting multiple MT5 accounts covers terminals, hosting and per-account risk.
Printable checklist
Print this page (the navigation is hidden on paper) or copy the table into your notes. Run it once per MT5 account, with a demo alert, before you go live.
symbol is present, or the EA chart is the instrument you wantlot or volume, between 0.01 and 500account matches a login or label exactly, or broadcast is intended[PROC] line in the Experts tab shows the symbol and lot you expectFAQ
Why does MT5 open 0.01 lots when my alert says 0.5?
Because the account is in fixed lot mode, which is the default and uses 0.01. In fixed mode the lot in the alert is ignored. Switch the position size type to lot from the signal in Dashboard > Execution, and make sure the field is called lot or volume (lots, qty and quantity are not read as a lot).
Do I have to add my broker's suffix (EURUSD.m, EURUSDm) to the alert?
Usually not. The EA tries the exact name, then the name plus common suffixes (.a, .b, .i, .pro, .raw, .std, .stp, m, pro, #), then the first broker symbol that contains the name. Send the broker's exact name when it is a different name altogether (DJ30 for US30, USTEC for NAS100) or when your broker lists several variants of the same instrument.
My broker calls gold GOLD and I get symbol not found: XAUUSD. Why?
The server maps GOLD to XAUUSD by default because most brokers name gold XAUUSD. If your broker literally uses GOLD, that default breaks it. Keep sending GOLD and email [email protected]: support adds a per-account alias so GOLD stays GOLD on that account.
How do I send an alert to only one of my MT5 accounts?
Add an account field with the MT5 login or the account label, for example "account":"12345678". Without it, the signal goes to every live account on your token. If the named account has no heartbeat in the last 15 minutes, the alert is rejected with HTTP 422 and no other account trades it.
Why did one alert open a trade on both my demo and my live account?
Both EAs are connected with the same token and the alert has no account field, so it is broadcast to every live account. Add the account field, or remove the EA from the demo terminal: an account stops counting as live 15 minutes after its last heartbeat.
Can I set the risk percentage inside the alert?
No. There is no risk field in the alert. The risk percentage is set per account in the dashboard, and risk mode needs a stop loss in the signal; without a stop loss the EA falls back to the fixed lot.
Related troubleshooting
Keep reading
The right symbol, lot and account. Every alert.
Suffixes resolved by the EA, lot and SL/TP mode per account, and routing by login or label. 14-day free trial, no card required.
SignalForge AI is an order-execution tool. We do not provide investment advice. Trading involves risk of loss. Test every alert on a demo account before trading live.