TradingView Webhook Not Working? 12 Reasons Your Alert Never Reached MT4 or MT5
The alert fired. The chart shows the arrow. TradingView says it was sent. And MetaTrader did nothing at all. Almost every one of these turns out to be one of a dozen specific causes — and you can narrow it to a single stage in about two minutes, before you start changing settings. Work the stages in order rather than guessing, because the fixes for stage 4 will never solve a stage 1 problem.
First: Find Out Which Stage Failed
An alert crosses four boundaries between your chart and your broker. Each one can stop it, and each one fails in a way you can observe.
| Stage | Where to look | What it means |
|---|---|---|
| 1. TradingView fired it | Alerts panel → Log tab | No entry: the condition never triggered. The webhook is irrelevant. |
| 2. The server accepted it | Alert log entry exists, no error shown by TradingView | TradingView reports failed deliveries. A clean send means it left. |
| 3. The EA received it | MetaTrader → Experts tab | Every message the EA receives is logged here. This is the key test. |
| 4. The EA agreed to trade it | On-chart comment, then Experts tab | Message logged but no order: an EA filter blocked it. |
The Experts tab is the fork in the road. In MetaTrader, click View → Terminal, then the Experts tab — not Journal. If your message appears there, skip to stage 4; the alert made it all the way to the terminal and something in the EA declined it. If it does not appear, your problem is in stage 1, 2 or 3. The Journal tab is a different log — it records terminal-level events like the EA failing to load, which matters for cause 7 below.
If you want to remove stages 1 and 2 from the picture entirely, use the Test Webhook tool in your dashboard under My Account. It sends a message you type straight to your EA, bypassing TradingView completely. A test message that trades proves stages 3 and 4 are healthy and sends you back to your alert setup. A test message that does nothing proves the opposite, and saves you from re-reading Pine Script that was never the problem.
Stage 1 — TradingView Never Sent It
1. The alert expired
This is the most common cause of the "it worked for weeks and then just stopped" report. Alerts on lower TradingView plans carry an expiry date, and when it passes the alert stops firing without any notification you are likely to see. Open the Alerts panel and look at the alert's status — expired alerts are greyed out and listed separately. Recreate it, or upgrade to a plan with non-expiring alerts.
2. Webhook URL is not enabled on the alert
The webhook is a per-alert setting, not an account setting, and it is easy to lose. Editing an alert, duplicating one, or recreating it after a Pine Script change all produce an alert whose Notifications tab needs checking again. Open the alert, go to the Notifications tab, and confirm Webhook URL is ticked with https://webhook.tradingrouter.com in the field.
Webhook notifications require a paid TradingView plan — Essential or above. On the free plan the option is visible but inert, which is a genuinely confusing failure mode.
3. Wrong condition selected in the dropdown
If you build your message in Pine Script, the condition dropdown decides whether your message is used at all:
- A script using
alert()needs the condition set to Any alert() function call. Leave the Message box alone — your script's text replaces it. - A
strategy()usingalert_messageneeds the condition set to the strategy, and the Message box must contain exactly{{strategy.order.alert_message}}.
Pick the plotted series by mistake and TradingView fires an alert containing its own default text, which is not a valid order message. The Pine Script webhook guide covers both setups in detail.
Stage 2 — The Server Rejected the Message
4. Client token in the alert instead of the Master token
If one cause deserves to be checked before all others, it is this one. The two tokens are not interchangeable:
| Token | Where it goes |
|---|---|
| Master token | Inside the TradingView alert message — token=... |
| Client token | The EA's Inputs tab, in Trading Router Client Token |
Both are on your dashboard, both are case sensitive, and a swapped pair produces exactly the symptom in this article's title. Copy rather than retype, and check you did not bring a trailing space or a line break along with it. If you run multiple tokens, confirm the Master token in the alert belongs to the same pair as the Client token in that terminal's EA.
5. A malformed message
The message is a comma-separated list of key=value pairs. A minimal market buy is:
token=YOUR_MASTER_TOKEN, signal=buy, symbol=EURUSD, risk_lots=0.1
What breaks it in practice:
- A missing separator in a script-built string. Concatenating two fragments without
", "between them silently yieldssymbol=EURUSDsignal=buy. While developing, addlabel.new(bar_index, high, msg)to your script so you can read the exact string it would send. - Smart quotes and non-breaking spaces introduced by pasting through a word processor, a chat app or a notes app. Paste through a plain-text editor instead.
- A misspelled signal.
signal=Buyorsignal=longis notsignal=buy. The alert syntax reference lists every accepted value. - An unresolved placeholder.
{{close}}and{{ticker}}are substituted only in the alert dialog's Message box. Inside a Pine-built string they arrive at the server as literal text.
6. The service is stopped or the trial ended
Tokens stop routing when the service is not running. Open your dashboard and check the service status. If the trial finished without a plan being started, or Stop Service was pressed at some point, alerts are accepted and discarded. Restart from the same Dashboard page with Start A Plan — your tokens and settings are preserved, so nothing needs reconfiguring in the terminal.
Stage 3 — The EA Never Got It
Nothing in the Experts tab points here. Work down this list in order.
7. The EA is not actually running
A running Trading Router EA prints a comment block on the chart showing its version and whether it is active — see check EA status. No comment means the EA is not running, whatever the smiley face in the corner suggests. Things that produce a silently dead EA:
- AutoTrading is off. The toolbar button must be green. It resets on some terminal updates.
- Allow algorithmic trading and Allow DLL imports are unchecked. Tools → Options → Expert Advisors tab. Both are required — see allow DLL imports and algorithmic trading. A terminal update can reset these.
- The terminal restarted and the chart template did not restore the EA. Common on VPS after a Windows update. Reattach and save the template.
- The EA failed to load. Check the Journal tab. The message
'TradingRouterEA.ex4' has newer unsupported version, please update your client terminalmeans exactly what it says: update MetaTrader.
You do not need to whitelist any URL. The EA does not use WebRequest, so the "Allow WebRequest for listed URL" box in Options is irrelevant here — adding the webhook address there fixes nothing. Plenty of general MetaTrader webhook advice online says otherwise; it applies to other tools, not this one.
8. Wrong Client token in the EA
The mirror image of cause 4. The EA runs, shows an active comment, and quietly receives nothing because it is listening on a token that is not the one your alert routes to. Re-copy the Client token from the dashboard into the EA's Inputs tab. If you moved a chart template between terminals, the old token came with it.
Stage 4 — The EA Received It and Declined
Your message is in the Experts tab and no order exists. This is the stage worth knowing well, because every cause here is a setting that is working exactly as designed — just not as you intended. Check the on-chart comment first: a halted EA and an EA blocked by a limit both say so there.
9. Outside the EA's trading hours
The most under-diagnosed cause on this list. Under Miscellaneous Settings, Start Time (Broker Time) and End Time (Broker Time) define when the EA is active. Outside that window every incoming signal is ignored. Two traps sit inside it:
- These are broker times, not your local time and not the chart's exchange time. A broker on GMT+3 while you are on GMT-5 gives you an eight-hour offset against what you assumed you configured.
- To be active around the clock, set Start Time to
00:00and End Time to24:00. Not23:59— that leaves a dead minute, and signals do land in it.
10. The symbol does not exist at your broker
Your alert says EURUSD. Your broker's Market Watch says EURUSDm, EURUSD.raw, EURUSD_i or EURUSD-ECN. The EA looks for the name it was given, does not find it, and stops. Three ways to fix it, in order of preference:
- Prefix / Suffix in Miscellaneous Settings — one setting for a whole broker convention. With Suffix set to
m, an alert forAUDUSDtradesAUDUSDm. - Symbol Map when names differ irregularly rather than by a fixed affix, such as
GOLDagainstXAUUSD. Note that Enable Symbol Map defaults to false — a correct map file does nothing until you switch it on. - Send the broker's name directly from Pine Script. Workable, but it ties each script to one broker.
Also confirm the symbol is visible in Market Watch. Some brokers hide instruments until you add them, and a hidden symbol behaves like a missing one.
11. A position limit is already reached
Max Open Positions and Max Open Positions Per Symbol block new market orders once the count is hit. Both use 0 for unlimited, and both interact with Magic Restriction in a way that surprises people:
- Magic Restriction On — only positions this EA opened are counted.
- Magic Restriction Off — every position on the account counts, including manual trades and other EAs. Nine EA positions plus two you opened by hand equals eleven against a limit of ten, and the next signal is refused.
Note that these limits apply to market buy/sell orders only, so pending orders continuing to work while market orders fail is a strong hint you are looking at this cause.
12. A filter or halt is active
Any of these will consume the message without trading, and each is silent unless you know to look:
- The EA was halted by an eaoff message. The chart comment reads "EA is halted by eaoff message". Send eaon to resume. A stale
eaofffrom a script you were testing last week survives happily until then. - Signal Filter is dropping that signal type. Check the Ignored Signals list. It is easy to forget you excluded
sellmonths ago and then wonder why only longs execute. - The News Impact filter is pausing execution. If you use the news file for a weekend or holiday break, an entry with a stale year range or a wrong broker-time offset can blank out live trading hours.
- A profit or loss limit has halted the session. Daily Loss Management, Daily Profit Management, the cumulative equivalents, and Net TP / Net SL all stop trading once their target is reached. This is the classic "worked this morning, dead this afternoon" pattern.
- accfilter= excluded this account. When you fan one alert across several accounts, an account filter that no longer matches the balance or account number silently skips that terminal — and only that terminal, which is why it looks like one broker is broken.
Bonus: the order was sent and the broker refused it
Sometimes the EA does everything right and the broker declines. These show up in the Experts or Journal tab with a broker error, so you are no longer guessing:
- A risk parameter with no stop.
risk_pct_bal_loss=andrisk_cncy_amt=derive volume from the stop distance. With no stop in the message and none in the EA settings, there is nothing to size against.risk_lots=is a literal volume and has no such requirement. - Volume below the broker's minimum, or off its step. A calculated size of 0.007 lots is rejected outright where the minimum is 0.01.
- Stops inside the broker's minimum distance. Remember
sl_pipsandtp_pipsare points, not pips — on a 5-digit EURUSD,sl_pips=300is 30 pips. Setting30intending 30 pips gives you 3, which most brokers refuse. See pips and points, and use the IdentifyPoints EA on the Downloads page to get the exact point value for any symbol. - Insufficient margin, or the market simply being closed for that instrument at that hour.
A Two-Minute Routine That Finds Most of Them
No comment at all means the EA is not running — go to cause 7. A comment saying the EA is halted names your problem outright. This one glance eliminates several stages.
From your dashboard, send a known-good message through Test Webhook. Arrives and trades: your EA is fine and the fault is in TradingView or the alert message. Arrives and does not trade: stage 4, and the log usually says which filter. Never arrives: stage 3, or the token pair is wrong.
Take the exact string from the Experts tab and check three things against MetaTrader: is the symbol spelled the way Market Watch spells it, is the current broker time inside your Start/End window, and is the token in the message the Master one? That covers causes 4, 9 and 10 — between them, the large majority of real cases.
If all three come back clean, send the exact message and the matching Experts tab lines to support. Those two things together are usually enough to identify the cause without any further back and forth.
Not set up yet? Get a TradingView alert executing on MT4 or MT5 in about ten minutes.
Start Free 7-Day Trial Test Webhook Docs →Next Steps
- Alert syntax reference — every signal, risk, stop and filter parameter
- EA settings explained — the inputs behind causes 9 through 12
- Pine Script webhook alerts — building the message in code, and the mistakes that break it
- TradingView to MT4 guide and TradingView to MT5 guide — clean setups from scratch