TradingView webhook fired, but no trade in MT5.
The alert popped up in TradingView, the chart says it triggered, and MetaTrader 5 did nothing. It is the most common frustration in TradingView-to-MT5 automation, and the fastest way out is not guessing. A signal can only stop in one of three places: TradingView, the bridge or the EA and broker. Check them in order and the cause shows up in minutes.
The short answer: find the stage where it stopped
Every automated trade travels the same path. TradingView sends an HTTP POST to your bridge's webhook URL, the bridge validates it and queues it, and an Expert Advisor running inside MT5 picks it up and sends the order to your broker. "No trade" means the signal died at one of those hops, and each hop leaves its own evidence.
Work left to right. There is no point checking lot sizes in MT5 if TradingView never sent the request, and no point re-creating the alert if the bridge accepted it and the EA filtered it on purpose.
Where to look for each stage
[PROC] line (signal received) followed by [SEND] (order sent), or a filter line, or Error: <retcode> - <comment>.The Experts and Journal tabs are in MT5's Toolbox window (Ctrl+T). The Experts tab shows what EAs print; the Journal shows what the terminal does.
Stage 1: did TradingView actually send it?
Open the Alerts panel in TradingView and look at the Log. TradingView adds every triggered alert to it; if there is no entry at the time you expected, the problem is the alert, not the bridge. Triggers older than 30 days, or beyond the latest 100 for one alert, are deleted daily, so export the log to CSV if you need history (TradingView Help Center, verified 4 October 2026).
- Alert status. An alert set to "Only once" stops after its first trigger ("Stopped — Triggered"), and an alert past its expiration date shows "Stopped — Expired". Neither will fire again until you restart it.
- Paid plan. Webhook notifications are not available on TradingView's free Basic plan; Essential, Plus, Premium and Ultimate include them (TradingView pricing table, verified 4 October 2026). A downgraded or expired subscription quietly ends your automation.
- Two-factor authentication. TradingView's own help page says it plainly: "webhook alerts are only allowed when 2-factor authentication is enabled" (verified 4 October 2026). If the Webhook URL box is greyed out, this is usually why.
- The URL. The Webhook URL checkbox must be ticked in the alert's Notifications tab and the URL pasted exactly, with no spaces and no line breaks. TradingView only accepts ports 80 and 443. With SignalForge the token goes in the URL (
https://.../wh/<your-token>), never inside the JSON. - The message is valid JSON. If the alert message is valid JSON, TradingView sends it with an
application/jsonheader; if not, it is sent astext/plain(verified 4 October 2026). A missing comma or a smart quote turns your order into plain text. Paste the message into our webhook tester before you save the alert, and copy working templates from the JSON examples. - Placeholders.
{{ticker}}and similar variables are filled in by TradingView when the alert fires. If one reaches the bridge unresolved (for example a strategy placeholder in an indicator alert), the signal cannot be traded.
TradingView also cancels the request if the receiving server takes longer than three seconds to answer, and it only retries on HTTP 500-599 responses except 504, up to three resends, five seconds apart (TradingView Help Center, verified 4 October 2026). A 4xx answer is never retried: fix the cause and fire the alert again. Step-by-step setup: configure a TradingView webhook for MT5.
Stage 2: did the bridge accept it?
The bridge answers every webhook with an HTTP status code. TradingView does not show you that answer in the chart, so use a tool that does (our webhook tester, or curl from a terminal) with the same URL and message. This is what the SignalForge server returns and what each code means:
{{ticker}}.sl_pct, tp_pct, entry_pct, entry_pips) at 0 or below or above 50, or "no live broker accounts".401, 402 and 400 for an empty body are rejected before a signal exists, so they do not appear in the dashboard's signal log. All other rejections do, with their reason.
The SignalForge EA sends a heartbeat every 30 seconds. An account counts as live if its EA has sent one in the last 15 minutes. If none of your accounts is live, or the "account" in your alert names a login that is not live, the server rejects the signal immediately instead of queueing it for a terminal that is switched off. The cure is in MT5: terminal open, logged in, EA on the chart.
Stage 3: did the EA and the broker execute it?
A 200 "queued" means the server did its part. The signal now waits up to 120 seconds for an EA to collect and execute it. If no EA does in that time, it expires and the dashboard marks it as not delivered. That is deliberate: a price from several minutes ago is no longer the price of the signal, so it is not executed late. When everything is connected, the median from webhook to order confirmed by the broker is about 0.5 s (measured 19 to 23 September 2026; see benchmarks).
- The EA is alive. MT5 open, logged into the right account, the EA attached to one chart. If you closed MT5 or the PC went to sleep, signals expire after 120 s; after 15 minutes without a heartbeat they are rejected straight away with 422.
- Algo Trading is on. The "Algo Trading" button in MT5's toolbar must be enabled, and "Allow Algo Trading" ticked in the EA's properties (F7). If not, the broker returns 10027 (disabled in the terminal) or 10026 (disabled on the broker's server). More in error 4109: trade not allowed.
- The symbol exists at your broker. The EA tries the exact name, then the name with common suffixes (.a, .pro, .raw, m and others), then the first broker symbol that contains it. If nothing matches, the signal fails with "symbol not found". If your broker uses a different name altogether (for example
GOLDfor gold), send the broker's own name in the alert. - The market is open. The server does not check trading hours; the broker does. A signal on a closed market fails with 10018.
- No filter blocked it. Valid signals can be stopped on purpose: Prop Firm Shield already triggered for the day, the time filter, the news filter, the trend filter, or pyramiding (by default one trade per direction per symbol, so a second identical buy is filtered). An opposite position that could not be closed also blocks the new entry.
- The lot is not zero. In risk mode without a stop loss, or with a very small account, the calculated lot can round to zero. In fixed-lot mode the
lotin your alert is ignored, which surprises many users; see wrong symbol, lot size or account. - WebRequest whitelist only for the backup channel. Normal (push) delivery does not need it. The HTTP polling fallback does: add
https://api.signalforge-ai.comunder Tools → Options → Expert Advisors, or the poll fails with error 4014.
Broker return codes you will see
Descriptions from the MQL5 trade server return codes reference (checked 4 October 2026). For MQL5 runtime errors rather than retcodes, see error 4756 (the trade request could not be sent).
Reading the Experts tab
The SignalForge EA writes one short line per event. A healthy trade looks like a [PROC] line (signal received, with its id, action, symbol and lot) followed by a [SEND] line (order sent). If something stops it, you see why:
[PROC] signal received: id, action, symbol, lot
[SEND] order sent to the broker
[DEDUP] same signal id already handled, not repeated
[STOPS] stop loss / take profit handling (e.g. stops added after entry)
[RETRY] order retried
[TIME] blocked by the time filter
[NEWS] blocked by the news filter
[SHIELD] blocked by Prop Firm Shield
Error: <retcode> - <comment>Since EA v4.02 the log is quiet by default: routine detail such as [ACK] lines only appears in verbose mode. No [PROC] line at all for your signal means the EA never received it: go back to the heartbeat and the 120-second queue.
How SignalForge shows the reason for every signal
Most of this page applies to any bridge. The difference with SignalForge is that you rarely need MT5 to answer the question, because the dashboard's signal log keeps a status and a reason for each accepted signal:
If the signal is not in the log at all, the problem is before the bridge: Stage 1, or a 401/402/empty-body rejection. Full field reference in the documentation. If you are coming from another bridge, PineConnector not working covers the equivalent checks there.
A two-minute test on a demo account
- 1. Attach the EA to a chart on a demo account during market hours and confirm Algo Trading is on.
- 2. Send this message to your webhook URL from the webhook tester:
{"action":"buy","symbol":"EURUSD","lot":0.01}(use your broker's symbol name if it differs). - 3. Expect HTTP 200 "queued", then a
[PROC]and a[SEND]line in the Experts tab, then EXECUTED in the signal log. - 4. If the test works but the real alert does not, the difference is in TradingView: the message, the URL or the alert itself.
FAQ
Why does my TradingView alert fire but no trade opens in MT5?
The signal stopped at one of three stages: TradingView did not send the webhook (free plan, 2FA off, wrong URL, invalid JSON), the bridge rejected it (HTTP 4xx), or the EA or broker did not execute it (EA offline, Algo Trading off, symbol not found, market closed, a filter, or a broker return code). Check the TradingView Alerts log, the bridge response and the MT5 Experts tab in that order.
Does TradingView resend a webhook if it fails?
Only if the receiving server answers with an HTTP status between 500 and 599, except 504. Then TradingView resends after 5 seconds, up to 3 times. It also cancels requests that take longer than 3 seconds. 4xx answers are never retried (TradingView Help Center, verified 4 October 2026).
Do I need a paid TradingView plan and 2FA for webhooks?
Yes. Webhook notifications are not included in the free Basic plan (Essential and above include them), and TradingView only allows webhook alerts when two-factor authentication is enabled on the account (both verified on tradingview.com on 4 October 2026).
What does "no live broker accounts" mean?
It is a 422 response from SignalForge: none of your MT5 accounts has an EA that sent a heartbeat in the last 15 minutes, or the account named in the alert is not live. Open MT5, log in and make sure the EA is attached to a chart.
How long does a signal wait if MT5 is offline?
On SignalForge an accepted signal waits 120 seconds for an EA to collect it. After that it expires and is marked as not delivered instead of being executed late at a stale price. If the EA has been silent for more than 15 minutes, new signals are rejected immediately with 422.
Where can I see why a signal was filtered or failed?
In the SignalForge dashboard signal log, every accepted signal has a status (EXECUTED, FILTERED, FAILED, NOT_DELIVERED or PENDING) and a reason, such as the filter that blocked it or the broker return code. The MT5 Experts tab shows the same story as [PROC], [SEND] and Error lines.
Related troubleshooting
Stop guessing. See why every signal did what it did.
SignalForge logs a status and a reason for each TradingView signal, from the webhook to the broker's answer. 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 using it on a live or prop firm account.