PineHookPineHook

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:

  1. Click the Alerts icon (clock/bell)
  2. Find your alert
  3. Click to see Alert Log
  4. 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:

StatusMeaningWhat to fix
200 {"status":"ok"}Accepted and queuedNothing, 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
400Payload format or parameter errorFix the JSON / parameters (see Rejected Signals)
401 Authentication failedLicense key unknown, inactive, or wrong formatCheck the license key in your dashboard
413Payload too large (over 2,048 bytes)Shorten the message, usually the comment value
429Rate 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:

  1. Go to Signal Logs
  2. Check for any recent entries
  3. 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:

  1. Webhook URL: https://relay.pinehook.io/webhook
  2. 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 of https://
  • Missing /webhook path
  • 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:

  1. Use double quotes, not single: "action" not 'action'
  2. No trailing commas
  3. 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 comment value. TradingView's {{strategy.order.comment}} placeholder can expand to a large string
  • Keep the whole JSON message under 2,048 bytes
  • The comment field 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:

TierPer minutePer day
Trial605,000
Standard15010,000
Pro45030,000
Premium1,500100,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:

  1. Check alert condition is correct
  2. Verify alert is enabled (not paused)
  3. Check "Once per bar close" vs "Once per bar"
  4. Test with simpler condition first

Testing Checklist#

  1. Create test alert:
{
  "license": "YOUR_KEY",
  "action": "buy",
  "symbol": "EURUSD",
  "size_lots": 0.01,
  "comment": "Test signal"
}
  1. Trigger manually: Click the alert's "Fire" button
  2. Check signal logs: Should appear within seconds
  3. 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#