Charts (deep-dive)

The Workspace shows the trajectory. The deep-dive charts show what the trajectory hides — the shape and stability of the returns behind it.

Distribution of returns

A histogram of daily returns reveals what a single Sharpe number can't: 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.

The histogram, its moments (mean, deviation, skewness, kurtosis) and its VaR / CVaR are computed over the days actually traded — weekends and idle no-position days (a $0 P/L) are excluded. The equity curve is built on a full calendar that zero-fills non-trading days, and a mass of zeros piled at the centre would understate the deviation and inflate the apparent kurtosis. This is the same traded-day basis the account VaR / CVaR on the Metrics page uses.

Stability over time

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.

Time under water

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.

Market convexity

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, with the benchmark's daily move on the x-axis (in %) and the portfolio's daily P/L on the y-axis (in dollars). 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:

  • Concave (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.
  • Convex (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 (b, dollars of daily P/L per +1% index move), the fit's , and the fit sampled at −2% / 0 / +2% for a concrete read. Below the chart, a stress-day table lists the days where the benchmark moved at least ±1.5%, with the realized portfolio P/L on each — the days where the convexity signature shows clearest — plus the hit rate (share of those stress days that still closed positive).

How the benchmark move is computed

The benchmark curve comes from the same /benchmark endpoint the Workspace overlay uses (S&P 500 or SPY, toggled above the chart). It arrives aligned to the session and normalized to the session mode; the chart reconstructs the index's daily return from it (mode-aware) and pairs it with the portfolio's daily P/L on the business-day basis.

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. This is deliberately different from the VaR/CVaR on the Metrics page and the tail-risk attribution below, which keep every business day so they match the engine's bdate_range basis.

Percentile histogram

The histogram shows the full shape of one entity's daily P/L. Pick a strategy (or the portfolio) from the selector and its dollar P/L is drawn as 20 equal-width bins.

A range toggle controls what the bins span:

  • Min–Max (default) — the bins run from the worst single day to the best single day, so a strategy whose biggest winning day is +20,000 actually has bins reaching +20,000. Nothing is hidden: every extreme is a visible bar. The bin width is (Max − Min) / 20. This is the real distribution — read it knowing that one freak day can stretch the axis and squash the central mass to the left.
  • P1–P99 — the bins run from the 1st to the 99th percentile, a zoom on the typical day that ignores the extreme 1% on each side (those days fold into the edge bins, and a note reports how many). Bin width is (P99 − P1) / 20: a strategy whose P1 is −2,000 and P99 is +3,000 gets twenty $250-wide bins. Use this when a handful of outliers make the Min–Max view unreadable.

Either way the readout above the chart always 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 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 dashed markers across the bars, so you can read at a glance where the median sits and how far the quartiles and tails reach.

Daily P/L, traded days

The histogram is 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 and quartiles toward zero. This is the same traded-day basis as the returns distribution above and the account VaR/CVaR on the Metrics page. 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.

Tail-risk attribution

Correlation is unconditional — it averages over all days. But a portfolio of option strategies doesn't die on an average day; it dies on its worst days, and the question that matters is which strategies are in the room when it does. This chart answers it with two numbers per strategy:

  • Standalone CVaR — the mean of that strategy's own worst 5% of days, in isolation. Its private tail.
  • Contribution to portfolio CVaR — the mean of that strategy's P/L on the days the portfolio itself bled worst. Signed: negative means it adds to the tail, positive means it cushions it (a genuine diversifier that tends to be up when everything else is down).

The gap between the two is the whole point. A strategy with a mild standalone CVaR but a deep contribution is bleeding exactly when everything else does — a concentration risk that pairwise correlation, being unconditional, does not surface. Five strategies that look decorrelated day-to-day can still crowd the same tail.

An exact decomposition

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 contributions sum exactly to the portfolio's CVaR — the bars add up to the tail. The tail is measured over the days the portfolio actually traded (N = traded days, idle $0 days excluded, in step with the returns distribution and the account VaR/CVaR); the portfolio's worst days are its bottom k = max(3, ⌊0.05 · N⌋), and the same day set is read across every strategy so the accounting stays honest. A worst-days table lists those days with the single biggest loser on each.

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.