Skip to content

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#

  1. Open the strategy detail page → Webhook log.
  2. Find the matching entry (sorted newest first; filter by status).
  3. Expand to see the raw payload, the matched rule (if any), the translated v2 payload, and the rejection reason.
  4. For mapping issues, click Edit mapping and fix the rule or add a new one.
  5. 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.

See also#