Rejected trades#
A "rejection" is HookTrader refusing to act on an alert. Different from a Binance error (where Binance refuses our order) — see Binance error codes for those.
Rejections fall into three buckets.
1. Silent ignores (no notification)#
These land in the strategy's webhook log only — they're considered noise.
| Reason | When | Why ignored |
|---|---|---|
stale_alert |
the alert timestamp is older than 30 s | Almost always a replay or queued-up alert. See Stale-alert guard. |
duplicate_entry |
Entry alert while a trade is already open on this webhook | Webhook invariant: one active trade per webhook. |
tp_no_active_trade |
TP / trail / SL alert with no open trade on this webhook | Expected when alerts continue to fire after a manual close. |
webhook_paused |
Strategy is paused |
Intentional state. |
webhook_learning |
Strategy is in learning or configuring state |
Captures are collected; trades are deliberately suppressed. |
tp_source_advisory |
TV tp_hit arrived but tp_source = platform |
Logged as advisory; the platform's own price feed gates the actual TP run. |
2. Rejections that raise a notification#
These look like real problems and surface in Notifications.
| Reason | What it means |
|---|---|
mapping_no_rule_matched |
Incoming payload didn't match any mapping rule. Either you've got an unmapped alert type, or your matcher is broken. |
validation_failed |
Translated v2 payload didn't validate. The error message names the failing field. |
pair_lock_mismatch |
Strategy is locked to a different symbol than the alert sent. See Pair lock. |
symbol_already_active |
Another of your strategies has an open position on the same symbol. Binance one-way mode would combine them. |
sl_required_but_missing |
Entry payload has no sl and allow_no_sl is off. |
quantity_rounded_to_zero |
Computed quantity rounded down to zero after applying Binance's minimum lot-size filter. Tighten SL, raise risk_pct, or use Fixed quantity mode. |
risk_pct_no_sl |
qty_mode = risk_pct selected but the entry has no sl. Risk-based sizing needs an SL. |
unknown_custom_event |
custom alert with a name that doesn't match any key in your strategy's custom-events map. |
3. Rate-limited#
When per-token rate-limits are hit, the receiver returns 429 Too Many Requests. TradingView retries on 5xx but not 429, so the alert is effectively dropped from TV's side.
Visible in webhook log as rate_limited. Adjust the indicator if it's firing too aggressively, or break it into multiple webhooks if you have legitimate high-frequency needs.
How to investigate#
- Open the strategy detail page → Webhook log.
- Find the matching entry (sorted newest first; filter by status).
- Expand to see the raw payload, the matched rule (if any), the translated v2 payload, and the rejection reason.
- For mapping issues, click Edit mapping and fix the rule or add a new one.
- For validation issues, the v2 envelope tells you exactly what's missing.
What rejection does not do#
A rejection does not affect any open trade. The position keeps running with its current SL / TP / trail unchanged. The only thing dropped is the would-be action from this alert.
If you need a rejected trade to take effect retroactively (e.g. you fixed a mapping bug while a trade was open and want to apply the missed TP), you'll need to do it manually — either close on the exchange or fire a move_sl alert with the corrected payload.