When a bot does something surprising, the first question is always the same: why did it take that trade? If your log can’t answer, you’re debugging blind.
A bare log tells you what happened:
14:32:05 ENTRY ES LONG 3 @ 5100.50
A good log tells you why:
14:32:05 SIGNAL ES LONG NR7_breakout · vol z=2.1 · OFI+
14:32:06 FILL ES 3 @ 5100.50 slip +0.5t
That one line — the reason — is the difference between “the bot is broken” and “the bot did exactly what I told it to, and what I told it was wrong.” The setup name, the indicator values that triggered it, the filters that passed: that’s the audit trail your future self needs.
It matters most for the trades that didn’t happen. The strategy you’re proud of is defined as much by what it skips as what it takes. When a textbook setup goes by and the bot stays flat, a good log shows you the filter that vetoed it — a volume z-score that came in at 1.8 instead of 2.0, an order-flow imbalance that flipped. Without that, you’ll “fix” a filter that was working and break the edge.
Three habits pay off:
- Name your setups.
NR7_breakoutbeatssignal_1. - Log the numbers that fired it, not just the verdict.
- Log the vetoes too — a skipped trade with a reason is a data point, not a gap.
ElevateMind streams every signal with its reason to the dashboard, next to the fill and the slippage. The point isn’t to admire the trades that worked. It’s to understand the ones that didn’t — while you can still do something about it.