Six webhook mistakes that look like bugs but aren't
When a signal doesn't produce the trade someone expected, the cause is almost always one of a handful of repeat offenders. In rough order of how often we see them:
1. The ticker format doesn't match the broker
Options and futures symbols are formatted differently by different providers. Something that looks correct on your chart may not match what the broker's API expects, and a ticker that doesn't resolve is one of the most common rejection reasons.
2. Malformed JSON
A missing comma or an unescaped quote and the entire payload fails validation before anything else is even looked at. Worth pasting your alert message into any JSON validator before you rely on it.
3. Assuming exits inherit the entry's quantity
An exit signal with no quantity specified closes the full position by default. If you meant to close only part of it, the quantity has to be explicit and smaller than what's open — otherwise you'll close more than intended.
4. Two signals arriving close together
Signals that arrive within milliseconds of each other aren't guaranteed to process in the order you intended. If a strategy can produce a flatten-and-reverse in one motion, combining that into a single signal is more reliable than sending two in quick succession.
5. Assuming a rejected order gets retried
Once an order has actually been submitted to a broker, a rejection is not automatically retried. If a broker briefly rejects an order — a connectivity blip, a margin check — that signal is done unless you notice and resend it.
6. Not checking the signal log first
Every signal is recorded with what was received, what was decided, and why — including rejections. Before assuming something is broken, that log almost always shows exactly what happened and why.