What a Profitability Dashboard for a Trading Bot Should Actually Show

Most bot dashboards show an equity curve and a win rate, which is another way of saying they show almost nothing about whether the strategy still works.


Pull up ten dashboards built for algorithmic trading bots and nine of them will show you the same three things: an equity curve, a win rate, and a total P&L figure. It’s the trading equivalent of judging a company by its revenue chart. Revenue can climb for years while margins quietly collapse, and by the time that shows up in the top-line number, the business is already in trouble. A bot’s equity curve has the same blind spot, which is why so many strategies look perfectly healthy right up until the week they stop being profitable.

The numbers themselves aren’t wrong. The problem is that they’re the output of everything that happened, not a description of what’s driving it. An equity curve climbing steadily tells you a strategy made money over some stretch of time. It doesn’t tell you whether that came from 400 trades with a thin, repeatable edge or 40 trades where you got lucky on the tail end of a regime that’s already gone. It doesn’t tell you whether a 58% win rate reflects a genuinely calibrated pattern or a parameter set that got walked back and forth against the same historical data until it agreed with you.

What actually belongs on it

A dashboard worth trusting needs to answer one question honestly: is this edge structural, or did I get here by accident. That means tracking expectancy per trade (average win times win rate, minus average loss times loss rate) rather than raw P&L, since expectancy survives position-size changes and P&L doesn’t. It means tracking profit factor, gross profit divided by gross loss, because a strategy can have a mediocre win rate and still be strongly profitable if its winners are structurally larger than its losers. It means tracking the longest streak of consecutive losing trades you’ve actually seen, because that number is what determines whether you can psychologically and financially survive the strategy’s worst stretch, not the average.

None of that shows up on a chart with a single upward line. It requires breaking the backtest apart into pieces and looking at each one separately, which is exactly the part most dashboards skip because it’s less satisfying to look at.

Train vs. test, side by side, always

The single most important number on any real dashboard isn’t a number at all, it’s a comparison: performance on the training window against performance on the out-of-sample test window, shown next to each other, never blended into one combined statistic. This is the only validation that actually means anything for a pattern-based system. A strategy that returns 3.2% expectancy per hundred trades on training data and 3.0% on unseen test data is telling you something real about a repeatable pattern. A strategy that returns 4.1% on training data and 0.4% on test data is telling you that you found a shape in noise, and the dashboard’s job is to make that gap impossible to ignore.

Most dashboards fail here not because the split doesn’t exist somewhere in the codebase, but because the reporting layer collapses both periods into one aggregate figure before it ever reaches the screen. If your dashboard shows one win rate and one P&L number for “the backtest,” you’ve already lost the one piece of information that would have told you the strategy was overfit.

Session segmentation isn’t optional

Forex isn’t one market running on one clock, and a dashboard that reports performance as a single blended figure across all 24 hours is averaging away the most useful information it has. Liquidity, spread, and volatility shift hard across the Asian session (00:00 to 08:00 UTC), the London session (08:00 to 16:00 UTC), the New York session (13:00 to 21:00 UTC), and the London/New York overlap (13:00 to 16:00 UTC), which is usually where the bulk of genuine directional volume actually sits. A pattern that performs well on average but is really only working during the overlap and losing quietly the rest of the day looks fine in an aggregate view and is actively dangerous in a live one.

Session UTC window Typical character
Asian 00:00–08:00 Lower volatility, wider relative spread
London 08:00–16:00 Volatility ramps, spread tightens
New York 13:00–21:00 High volume, news-driven moves
Overlap 13:00–16:00 Peak liquidity, tightest spread

A dashboard should break every metric above out by session, and the strategy config should mirror that reality directly. If your JSON config carries start_hour and end_hour fields, those values should have been chosen because a specific session showed a real, out-of-sample edge, not chosen once at 0 and 23 because nobody bothered to test whether the pattern actually holds across all of them equally. It usually doesn’t.

The cost line nobody wants to see

Every backtest reports a gross result, and almost none of them report it next to what’s left after the real cost of executing it. Spread, slippage, and commission aren’t rounding errors, they’re a structural tax on every single trade, and their weight scales inversely with your stop distance. A pattern with a 15-pip stop and a 2-pip average spread is giving up over 13% of its risk budget before the trade even has a chance to move in its favor. Widen that spread during low-liquidity Asian hours or a fast news tick during the New York session, and the drag gets worse exactly when your sl and tp values in the config were sized for calmer conditions.

A real dashboard shows gross pips and net pips as two separate lines, with the difference between them broken out explicitly as cost drag, ideally as a percentage of gross. Most backtesting engines default to a fixed spread assumption pulled from a single snapshot, which means the number on your screen is quietly underweighting the exact conditions where cost matters most.

Win rate as a diagnostic, not a scoreboard

A dashboard that treats win rate as the headline metric will always push you toward the wrong conclusion, because the instinct is to treat a higher number as a better one. In pattern-based systems it’s frequently the opposite. Win rates north of 70% are, more often than not, the fingerprint of a system that’s been curve-fit to its own history rather than one that’s found something durable. Genuinely validated strategies with a real statistical edge tend to sit in a much less exciting 52% to 62% range, where the edge comes from asymmetric payoff rather than being right most of the time.

The dashboard’s job here is to flag deviation, not celebrate it. A strategy suddenly reporting 74% win rate on new data isn’t a system to get excited about, it’s a system to go check the configuration on.

Building it so you can’t lie to yourself

The uncomfortable truth about dashboards is that the ones people actually build tend to optimize for how good the number looks, not for how much it tells you. A real one is closer to an instrument panel than a highlight reel. It shows the train/test gap, the session breakdown, the cost drag, and the win rate against its healthy range, all in the same view, precisely so that when a pattern’s edge starts to erode as market regime shifts, you see it in the data instead of feeling it in your account balance three weeks later.

That last part matters more than the engineering does. A pattern that worked for eighteen months isn’t guaranteed to work for twenty-four, and a dashboard built to flatter you will let that decay hide behind a still-rising equity curve for far longer than one built to interrogate itself. The whole point of tracking the metrics that are boring to look at is so that when the system finally does need to be retired or retuned, you’re the one who noticed first.