Signals Not Received
Troubleshooting when signals aren't arriving from TradingView.
This guide helps when TradingView alerts fire but signals don't appear in PineHook.
Symptoms#
- TradingView shows "Alert triggered"
- PineHook signal logs are empty
- No activity in MT5 Experts tab
Diagnostic Steps#
1. Check TradingView Alert Fired#
In TradingView:
- Click the Alerts icon (clock/bell)
- Find your alert
- Click to see Alert Log
- Look for "Webhook notification sent"
If no webhook sent:
- Alert condition may not have triggered
- Webhook URL may be missing
- TradingView Pro/Pro+ required for webhooks
Read the HTTP status, not just 'sent'
When a webhook fires, TradingView records the HTTP status PineHook returned. Open the failed run in the alert log and read the status code and response body. It tells you the exact problem category:
| Status | Meaning | What to fix |
|---|---|---|
200 {"status":"ok"} | Accepted and queued | Nothing, look in Signal Logs / MT5 next |
200 {"status":"blocked"} | Received but a safety gate blocked it (for example signal auth) | Check the block reason in Signal Logs |
| 400 | Payload format or parameter error | Fix the JSON / parameters (see Rejected Signals) |
401 Authentication failed | License key unknown, inactive, or wrong format | Check the license key in your dashboard |
| 413 | Payload too large (over 2,048 bytes) | Shorten the message, usually the comment value |
| 429 | Rate limit hit (per-minute or per-day) | Slow down or upgrade (see Rate Limiting below) |
A fired alert is not the same as an accepted signal. A blocked signal can still show HTTP 200 in TradingView (with {"status":"blocked"}) while being stopped on our side, and a rate-limited signal returns HTTP 429, so always confirm the status in Signal Logs, not just TradingView's "sent".
2. Check PineHook Signal Logs#
In your dashboard:
- Go to Signal Logs
- Check for any recent entries
- Rejected and blocked signals appear here only if the payload carried a valid, correctly-formatted license key. If the key is missing or malformed, nothing is written to Signal Logs at all
If nothing appears:
- The license key is missing or malformed (nothing reaches the logs, read the TradingView alert log instead, see below)
- Webhook URL may be incorrect
- Network issue between TradingView and PineHook
3. Verify Webhook Configuration#
In TradingView alert settings:
- Webhook URL:
https://relay.pinehook.io/webhook - Message format: Include your license key
{
"license": "YOUR_LICENSE_KEY",
"action": "buy",
"symbol": "{{ticker}}"
}
4. Test with Manual Webhook#
Test the webhook directly using curl:
curl -X POST https://relay.pinehook.io/webhook \
-H "Content-Type: application/json" \
-d '{"license":"YOUR_KEY","action":"buy","symbol":"EURUSD","size_lots":0.01}'
Expected response:
{"status": "ok", "message": "Signal queued", "signal_id": "abc123"}
Common Issues#
Wrong Webhook URL#
Problem: URL is incorrect or has typo.
Solution:
Correct URL: https://relay.pinehook.io/webhook
Common mistakes:
http://instead ofhttps://- Missing
/webhookpath - Extra spaces or characters
- Wrong domain
License Key Not in Message#
Problem: Alert message doesn't contain license.
Solution:
License must be in the alert message body:
{"license": "A1B2-C3D4-E5F6-7890", "action": "buy", "symbol": "EURUSD"}
Not in the webhook URL - it goes in the message!
TradingView Plan Limitation#
Problem: Free TradingView doesn't support webhooks.
Solution:
- Upgrade to TradingView Pro or higher
- Only paid plans support webhook alerts
- Try the 30-day free trial
JSON Syntax Error#
Problem: Alert message has invalid JSON.
Solutions:
- Use double quotes, not single:
"action"not'action' - No trailing commas
- Validate at jsonlint.com
Bad:
{'action': 'buy', 'symbol': 'EURUSD',}
Good:
{"action": "buy", "symbol": "EURUSD"}
Dynamic Fields Not Expanding#
Problem: {{ticker}} appears literally in signal.
Solution:
TradingView placeholders must be in the correct format:
{{ticker}} → EURUSD
{{close}} → 1.08560
{{time}} → 2024-01-15T10:30:00Z
Placeholder Format
Use double curly braces: {{ticker}} not {ticker} or ticker.
Payload Too Large#
Problem: The signal is over 2,048 bytes and is rejected with HTTP 413 before it's parsed, so nothing appears in Signal Logs.
Solution:
- The usual cause is a long
commentvalue. TradingView's{{strategy.order.comment}}placeholder can expand to a large string - Keep the whole JSON message under 2,048 bytes
- The
commentfield is accepted but not applied anyway (the MT5 order comment is reserved for PineHook's tag), so you can shorten or drop it safely
Rate Limiting#
Problem: Too many signals in a short time, or too many in a day.
Solution:
There are two caps, a per-minute rate and a per-day total:
| Tier | Per minute | Per day |
|---|---|---|
| Trial | 60 | 5,000 |
| Standard | 150 | 10,000 |
| Pro | 450 | 30,000 |
| Premium | 1,500 | 100,000 |
Exceeding either cap returns HTTP 429 and the signal is dropped (not queued or retried). You can be well under the per-minute rate yet still be throttled by the daily total partway through a busy session.
Rate-limited signals do appear in your dashboard: they are written as a Blocked row in Signal Logs plus a row in Rejected Signals with the reason. The per-minute message reads "Rate limit exceeded (N/min). Slow down or upgrade your plan." and the daily message reads "Daily signal limit reached (N). Limit resets every 24 hours." So you can confirm throttling positively instead of guessing.
Close and cancel commands are exempt from both caps, your kill-switch is never blocked by rate limiting.
If hitting limits:
- Reduce alert frequency
- Combine alerts where possible
- Upgrade your tier
Alert Not Triggering#
Problem: Alert condition never fires.
Solutions:
- Check alert condition is correct
- Verify alert is enabled (not paused)
- Check "Once per bar close" vs "Once per bar"
- Test with simpler condition first
Testing Checklist#
- Create test alert:
{
"license": "YOUR_KEY",
"action": "buy",
"symbol": "EURUSD",
"size_lots": 0.01,
"comment": "Test signal"
}
- Trigger manually: Click the alert's "Fire" button
- Check signal logs: Should appear within seconds
- Check MT5: Should see trade attempt in Experts tab
TradingView Alert Best Practices#
Alert Message Template#
Use this template:
{
"license": "YOUR_LICENSE_KEY",
"action": "buy",
"symbol": "{{ticker}}",
"size_lots": 0.02,
"sl_pips": 50,
"tp_pips": 100,
"comment": "{{strategy.order.comment}}"
}
Alert Settings#
- Condition: Your strategy entry condition
- Expiration: Open-ended or long duration
- Webhook URL:
https://relay.pinehook.io/webhook - Message: Your JSON signal
Strategy Alerts#
For Pine Script strategies:
strategy.entry("Long", strategy.long, alert_message='{"license":"KEY","action":"buy","symbol":"'+syminfo.ticker+'"}')
Network Issues#
TradingView → PineHook#
If TradingView can't reach PineHook:
- This is rare (TradingView servers are reliable)
- Check PineHook status page
- Wait and retry
Corporate/VPN#
Some networks block outgoing webhooks:
- Try without VPN
- Use mobile data to test
- Contact network admin
Next Steps#
- Connection issues - If EA is disconnected
- Trade errors - If signals arrive but trades fail