A signal fires. You see it, on the chart, in the log, on your phone. Then nothing. No trade lands, no error banner appears, no message tells you what just happened or didn't. On most dashboards that silence is a verdict with no evidence attached, and you're left re-reading the same chart trying to guess whether the bot agreed with the signal or just missed it.
"Show me the rules it's following, not just the result" is the fair version of that complaint. The unfair version shows up a few minutes later, when the same nothing happens twice in a row and it starts to feel less like a gate and more like a bug. Both are really asking for crypto trading bot signal analytics: a record of what the bot decided about a signal, and why, whether or not a trade came out the other side.
The platform I trade on is TradeArmor, self-hosted on a box I own, with a three-year live signal record, 15 real-time indicators, a plain-English AI strategy builder, and every mode from DCA and grid to futures, copy trading, backtesting, paper trading, and tax exports running through one engine. See the full platform before the rest of this post, which is about one specific layer of how a crypto trading bot works: what happens to a signal between the moment it fires and the moment you either see a fill or don't.
What Crypto Trading Bot Signal Analytics Actually Shows
Every signal that reaches a TradeArmor instance gets logged, not just the ones that turn into orders. Two numbers sit at the top of that log: how many signals a source has delivered, and what share of them the bot actually acted on, the acceptance rate. A source running at 40% acceptance isn't underperforming. It usually means the gates around it are doing exactly what you configured them to do.
Underneath that number is the part that actually answers the question people ask when a signal goes quiet: the rejection reason. Every declined signal carries a label, not a shrug. That's a different question from signal latency, which tracks how fast a signal reaches an order. This tracks what the bot decided once it got there.
The Five Reasons a Signal Actually Gets Rejected
TradeArmor names five, and none of them is "the bot felt like it":
- Insufficient balance. The account didn't have enough available to size the trade the signal called for.
- Cooldown. A per-level timer from the last buy on that position hasn't expired yet, the same gated DCA logic that stops a crash from turning into five buys in ninety seconds.
- Strategy gate. In Hybrid or Custom mode, an indicator filter attached to the signal, RSI under a threshold, MACD confirming, didn't line up, so the candidate trade never cleared the second check.
- Keep-balance rule. Executing the trade would have dropped the account below the reserved cash floor you set, the rule built specifically so the bot never goes all-in during a drawdown.
- Price drift. The market moved past an acceptable range in the time between the signal firing and the bot evaluating it, so the fill would no longer match the setup the signal was actually describing.
Every one of those is a specific, checkable fact, not a mood. A signal rejected for cooldown and a signal rejected for insufficient balance point you at completely different problems, and conflating them is how a working gate gets misread as a broken bot.
One Signal, Several Outcomes
The Multi-Instance Signal Proxy means one signal, from cava-signals or from a TradingView webhook, can reach several of your own bots at once. Each instance evaluates that signal against its own balance, its own open positions, and its own gates, so the same signal can be accepted on one instance and correctly rejected on another the same second.
The per-instance delivery log shows this as a row of dots, green for accepted, red for rejected, purple for a delivery that never completed. Read across the row and you get the full picture in about two seconds: which of your bots traded, which declined and why, and which one never got the message at all, which is the one delivery failure actually worth chasing.
The Signal Log, Expanded
Click into any row and the full payload is there, source, timestamp, the exact indicator values or cava-signal parameters that triggered it, and the outcome per instance. It's the same expandable-row pattern the Per-Position Rules Inspector uses for open positions, applied one step earlier in the pipeline, before a position exists at all rather than after.
That distinction matters more than it sounds. The Rules Inspector answers "what does this open position need next." Signal analytics answers "what happened to the thing that might have opened it in the first place." One is downstream of a trade. The other covers every signal that didn't become one.
A Rejected Signal Isn't a Broken Bot
Somewhere in healthcare and industrial safety, there's a well-documented problem called alarm fatigue: expose someone to enough unlabeled alerts and they stop reading any of them carefully, real ones included. An unexplained "nothing happened" from a trading bot is a milder version of the same failure. Without a reason attached, every quiet signal reads as equally suspicious, whether it was a correctly gated non-trade or an actual delivery problem, and eventually you stop checking either way.
A labeled rejection breaks that pattern on purpose. Cooldown means the gate is doing its job. A missing delivery, the purple dot with no reason attached, means something upstream needs attention. Those are not the same category of event, and a dashboard that draws that line does more for your sanity than a support macro that answers every quiet signal with "the system is working as intended" and calls it closed.
What Signal Analytics Won't Tell You
None of this evaluates whether a signal was a good idea. Signals are algorithmic outputs, not personalized investment advice, and a signal that got correctly accepted can still lose money, same as a signal that got correctly rejected can still turn out to have been the right entry you missed. Signal analytics tells you what the bot did with a signal and why. It has no opinion on markets, and past performance is not indicative of future results whether a signal cleared every gate or none of them.
Pair this with the Rules Inspector for positions you already hold and alerts for the moments worth checking in real time, and you get the full loop: what arrived, what happened to it, and what's happening now on anything it actually opened.
Pricing
Signal analytics isn't a Pro-tier upsell bolted onto the log. The acceptance-rate tracking, rejection-reason breakdown, and expandable signal log ship on every plan, since knowing why nothing happened shouldn't cost more than knowing why something did. Starter at $19.99/mo runs it against cava-signals on one live instance. Pro at $49.99/mo adds the strategy-gate reasons that come with Hybrid and Custom mode, plus per-instance delivery across 5 live instances. Enterprise at $89.99/mo extends that same log across 10 live instances and multi-machine deployments, for anyone running enough bots that "check the log" needs to mean all of them at once.
Every mode in this guide, cava-signals, grid, DCA, futures, copy trading, backtesting, paper trading, and tax exports, runs on one self-hosted TradeArmor engine, on hardware you own, backed by a three-year live BTC/USDC signal record. See how the whole platform fits together, or compare the three tiers and go read your own signal log instead of guessing at what a quiet dashboard means.
Past performance is not indicative of future results. Signals are algorithmic outputs, not personalized investment advice.