The Workspace shows the trajectory. The deep-dive charts show what the trajectory hides — the shape and stability of the returns behind it.
The percentile histogram shows the full shape of one entity's daily P/L — what a single Sharpe number can't tell you: how fat the tails are, whether losses cluster, and how symmetric (or not) the strategy is. A long left tail is a warning that average statistics flatter the strategy. Pick a strategy (or the portfolio) from the selector and its dollar P/L is drawn as equal-width bins.
A bins toggle sets the resolution — 20, 40, 60 or 80 bins (default 60). More bins resolve the true shape of the mass; fewer smooth it into a coarse silhouette. The bin width scales automatically so the bars always tile the selected range with no gaps.
A range toggle controls what the bins span:
(P99 − P1) / bins: a strategy whose P1 is −2,000 and P99 is +3,000 split into 60 bins gets
~$83-wide bins. This opens on the central mass so a single freak day doesn't squash the shape from the start.(Max − Min) / bins. This is the real distribution — read it knowing that one freak day
can stretch the axis and squash the central mass to the left.Two outlier toggles (< P5 and > P95) go a step further: where the range toggle only reshapes the bins
and folds the extremes into the edge bars, these actually remove the outlier days from the view. < P5 drops
the days below the 5th percentile (the negative outliers), > P95 drops those above the 95th (the positive
outliers). They are independent, so you can hide one tail, the other, or — with both on — isolate the P5–P95
body and see only the everyday days. The cut points are the P5/P95 of the full distribution, so they stay
fixed no matter what you hide, and a note under the chart reports how many days each toggle removed. When a tail
is clipped, the bins span exactly to its P5/P95 edge; the untouched side still follows the range toggle above.
The readout above the chart lists the true Min and Max alongside P5, P25, the median, P75, P95, the bin width and the number of observations — so the real extremes are never out of sight even in the trimmed or clipped view. Bars are tinted by sign — green where the bin is a gain, red where it is a loss — and five percentile flags (P5, P25, P50, P75, P95) are drawn as markers across the bars.
A second readout row carries the shape of the distribution — the numbers a percentile ladder alone doesn't give you:
Skewness and kurtosis are dimensionless, so they read the same in dollars or percent. The moments are computed on the full traded-day series, independent of the range and outlier toggles above — clipping the outliers reshapes the bars but must not silently deflate the kurtosis or CVaR you are reading.
Every dollar figure in the readout — Min, P5, the median, CVaR, the standard deviation — is measured on the
leg at the size it currently carries in the Workspace, not on a single lot. A strategy set to 10 contracts
has a distribution ten times wider than the same strategy at 1: nothing is wrong, the numbers are simply
denominated in the exposure you chose. So each selector pill carries its exposure as a badge (×10 for a
fixed-contract leg, cap 3.0% for a dynamically sized one, the leg count for the portfolio), and a line under
the selector spells out what the drawn distribution is standing on. If a leg belongs to a group, the group
scale is shown too, together with the effective contracts it produces.
Hovering a pill (tapping the caret on touch) opens the exposure knob, and the knob is the ± contracts editor of the Workspace rail — fixed-size legs only. Changing it does not touch the session: the histogram redraws locally and Apply to Workspace writes the new size to the live session in a single write (only the contracts, one Timeline entry however many strategies you changed), while Discard drops it. An amber strip lists everything not yet applied.
The preview is exact rather than an approximation: the leg contributes contracts × series, so scaling its
equity by new / current is precisely what the server would recompute — manual costs included, since they are
netted per contract before the multiplier. From 0 contracts there is nothing to rescale (the leg is flat), so
that one case only resolves by applying.
Two cases have no knob at all:
weight is ignored by the engine there) — and the Cap is
not previewable, because P/L is not linear in it: contracts are whole numbers, min/max clamps bite, the daily
loss budget interferes and the sizing capital compounds with realised P/L. A knob that can't show you what it
changes doesn't belong in a what-if panel, so the Cap is set in the Workspace and the histogram simply
states the exposure it drew at.Daily P/L, traded days
The histogram and its moments are built on daily P/L (equity[i] − equity[i-1]) over the days the entity
actually traded (P/L ≠ 0) — weekends and idle no-position days are dropped, so a selective strategy doesn't
pile a spike on the $0 bin and drag its median, quartiles and deviation toward zero. Days where a strategy
traded more than once are summed into that day's value: trade-level P/L is aggregated to daily totals at import,
so the histogram bins trading days, not individual trades. For the same tail risk expressed as a percent
return on capital, see the account VaR / CVaR on the Metrics page.
Rolling windows of Sharpe and volatility show whether the edge is steady or drifting. A Sharpe that was earned entirely in one regime — and faded afterwards — looks very different here than in the single headline figure.
Business-day windows
Unlike the distribution above, the rolling Sharpe and volatility keep every business day (weekends
dropped, but idle no-trade days kept). These are time-based, annualised metrics on the 252-trading-day
convention: an idle day legitimately weighs on time-based performance, and dropping it would break the
×√252 annualisation. The windows are counted in trading days.
What to look for
A robust strategy tends to show a roughly stable rolling Sharpe and volatility. Big step-changes often mark a regime the strategy depended on, or a structural break worth investigating.
The underwater view plots how far below the prior peak equity sits, over time — and therefore how long recoveries take. Two strategies with the same max drawdown can feel completely different if one recovers in weeks and the other stays under water for months.
Every other chart on this page looks at the portfolio in isolation. This one plots it against the market:
each dot is a trading day — the benchmark's intraday range on the x-axis, the portfolio's response on the
y-axis. The move is the day's range from open to close (close − open), not the close-to-close return: an
intraday book responds to how far the market travelled within the session, not to the overnight gap. A
% / $ toggle puts both axes in the same unit (so you're never comparing a percentage against a dollar
figure), and either way the two are anchored to the portfolio's own capital at the start of that day:
(close − open) / open, y is the portfolio's daily return (its
P/L over that day's capital). The capital cancels, so this view is capital-independent and the slope reads as a
classic beta.A quadratic least-squares fit y = a·x² + b·x + c is drawn through the cloud, and the sign of its curvature a
is the headline:
a < 0) is a short-gamma signature — the book makes small, steady money in the middle and
loses on both tails, worst of all on big down days. This is the classic shape of a premium seller.a > 0) is long-gamma — flat-to-slightly-negative in calm markets, paying off when the market
moves hard in either direction. This is the shape of a long-option or trend book.The readout also shows the linear beta — the slope of a straight-line fit through the same cloud, computed on
its own (not the quadratic's b coefficient) — dimensionless in both units: in percent it's the portfolio's
return per +1% of index intraday range (≈ market beta), in dollars it's dollars of P/L per $1 of index range (a
capture ratio). Alongside it are the fit's R² and the fit sampled at a −2% / 0 / +2% range day for a concrete
read — in dollars that ±2% range is priced at your latest capital, so it reads as dollars on today's book. Below
the chart, a stress-day table lists the days whose intraday range was at least ±1.5% (the range is always shown
as a percentage there, since that's how the threshold is defined), with the realized portfolio response on each — the
days where the convexity signature shows clearest — plus the hit rate (share of those stress days that still
closed positive).
Every dot is clickable — and so is every row of the stress-day table. Clicking one opens a day-detail panel: the benchmark's move, the portfolio's P/L, and one row per strategy that was in the market that day, worst P/L first, each with a diverging bar and its exact dollar P/L. This is the tail-forensics tool: pick the worst dot in the bottom-left of the cloud and see who was in the room — whether one strategy took the whole hit or several crowded the same tail.
Each traded row also shows the day's percentile rank inside that strategy's own traded-day distribution
(midrank on ties): P05 means the day was among that strategy's 5% worst, P95 among its 5% best. The rank is
what makes the dollar figure readable — a −$400 day is routine for a strategy whose P5 is −$2,000 and an
all-time disaster for one that never lost more than $450. It is hidden (—) when a strategy has fewer than 20
traded days. Strategies with no position that day (an exact $0 P/L, the same rule the scatter uses to drop
no-position days) are listed apart, since sitting a bad day out is a fact worth seeing too.
The per-strategy daily P/L is additive — each is the first difference of its own equity, and they sum to the portfolio's — so the rows sum exactly to the portfolio's P/L for that day: an exact attribution of a single day, on the same business-day basis as the scatter. Clicking the same dot (or row) again, or the ✕, closes the panel.
How the benchmark move is computed
The benchmark data comes from the same /benchmark endpoint the Workspace overlay uses (S&P 500
or SPY, toggled above the chart). Alongside the buy-and-hold curve, the endpoint ships the day's intraday
range (close − open) / open from the raw (unadjusted) OHLC — a per-day quantity, so it needs no previous day.
The range is what lands on the x-axis; the chart pairs it with the portfolio on the business-day basis —
expressing both as returns (percent) or as the dollar P/L of the portfolio's same start-of-day capital (dollars),
per the toggle. Non-trading days carry no real open/close and are dropped. If the OHLC feed is momentarily
unavailable, the chart falls back to the close-to-close return reconstructed from the buy-and-hold curve.
No-position days are excluded
The equity curve is built on a full calendar and zero-fills the days a strategy didn't trade, so a selective
strategy has many business days with an exact $0 P/L. Those are not market-response observations — a day the
book had no position tells you nothing about its convexity — so this chart drops them (a booked trade is never
exactly $0). Keeping them would pile hundreds of dots on the y = 0 line, flatten the fit, and make a big-move day the
strategy sat out look like a $0 reaction. A note under the chart reports how many days were excluded, and the
observation count is the number of days actually traded — the same traded-day basis the account VaR/CVaR on the
Metrics page uses. It is only Annual volatility that keeps every business day, because it is a
time-based annualised figure tied to the engine's bdate_range basis.
Pair it with Monte Carlo
These charts describe the path you got. To see the range of paths you might have got — and typical vs. worst-case drawdowns — run Monte Carlo.