Your alert log shows a green checkmark. Your chart shows the entry. Your account shows nothing.
That gap is the most common support ticket in retail trading automation, and almost nobody diagnoses it correctly the first time. Traders assume the alert broke. But in our queue, the alert is the culprit less than a third of the time. The signal usually dies further down the chain, often at the broker, which never tells TradingView anything at all.
So this guide walks the whole path a signal travels, layer by layer, and gives you a fixed order to test them in. By the end you’ll know which of the five layers ate your trade, and what to change so it doesn’t happen again.
Key Takeaways
- Roughly 34% of “alert fired, no trade” cases die at the broker or prop firm, not inside TradingView.
- TradingView cancels any webhook that takes longer than three seconds to respond, and only retries on HTTP 5xx errors.
- Webhooks require 2FA, ports 80 or 443, and IPv4. Miss one and the alert fires but sends nothing.
- Diagnose top-down through five layers. Testing randomly is why this costs people days.

Why Are Your TradingView Alerts Not Executing Trades?
Because “fired” only means TradingView evaluated your condition and queued a notification. It says nothing about whether the message left TradingView’s servers, arrived intact, authenticated with your broker, or survived that broker’s risk checks. Five separate systems have to agree before a contract changes hands. And four of them can fail silently.
Here’s the chain, in order:
- Pine Script logic. Your condition becomes true on a bar.
- Alert configuration. TradingView decides whether to fire, based on frequency, limits, and expiry.
- Delivery. TradingView POSTs your payload to a webhook URL.
- Receiver-to-broker translation. Middleware parses the JSON, authenticates, and places an order.
- Broker or prop firm execution. The venue accepts, rejects, or partially fills it.
So we pulled twelve months of execution-failure tickets from our own support desk. Then we sorted every one by which layer actually broke. The distribution surprised our engineers.
Read that chart the right way and it reframes the problem. Six out of ten failures happen after the webhook was already delivered successfully. So if you’re squinting at Pine Script trying to work out why your entry didn’t fill, you’re inspecting the layer least likely to be broken.
And for a primer on how alerts behave before you automate them, our introduction to TradingView alerts covers the fundamentals this guide assumes.
Layer 1: Did the Alert Actually Fire, or Just Look Like It?
Start here anyway. It takes ninety seconds to clear. Open the Alerts panel, click the alert name, and open the Log tab. Every fire event is stamped there with a timestamp, plus the HTTP response code the receiving server returned. No log entry means no fire, which is a completely different problem from a fire that got dropped.
Three things quietly stop alerts from firing.
Alert frequency. “Once Per Bar” triggers on the first tick where your condition is true, using live, still-forming bar values. But “Once Per Bar Close” waits for confirmation. So if your strategy backtests on closed bars while your alert runs on “Once Per Bar,” the condition can flash true mid-bar, fire, then reverse before the candle closes. Your chart shows no signal. Your log shows a fire. Both are correct.
Alert limits. Free accounts get a single active alert. Essential allows 20, Plus 100, Premium 400, and the top tier runs to a thousand of each type. Hit the ceiling and new alerts fail to activate, often without an obvious error.
Expiry. Alerts don’t live forever. On lower tiers they expire on a fixed schedule, and an expired alert sits in your list looking perfectly healthy while doing nothing at all.
From our support desk: the single most common one-line fix we send is switching alert frequency from “Once Per Bar” to “Once Per Bar Close.” In our experience it resolves the “my chart and my fills disagree” complaint outright, because it forces the alert to use the same non-repainting values your backtest used.
