Back to blog
methodology

How to chart a QQ plot of returns to test for normality

15 July 2026 6 min read

Quick answer

A QQ plot tests whether your returns are normally distributed. Sort the returns smallest to largest, plot them against the values a normal distribution would produce at the same positions, and add a 45-degree reference line. Where the points follow the line the returns are normal; an S-shape - points below the line on the left and above it on the right - means both tails are fatter than normal, and a left tail that dips well below the line means negative skew. For financial returns the tails almost always depart the line, which is the visual reason a normal-based Value-at-Risk understates real risk.

A QQ plot answers a question a histogram only hints at: are your returns actually normal, or do the extremes happen more often than a bell curve allows? It sorts your returns, plots them against the values a normal distribution would produce at the same positions, and draws a straight reference line. Where the points hug the line the two distributions agree; where they peel away, they do not - and for financial returns they almost always peel away at the ends.

Plot returns, not prices

The sample side of a QQ plot is just your returns, sorted from smallest to largest. Use returns - the period-to-period percentage change - not price levels, for the same reason every risk chart does: price levels trend and are not comparable across time, while returns are the stationary quantity you can sensibly fit a distribution to. Daily or monthly both work; more observations give a cleaner picture in the tails, which is exactly where you are looking.

Against what: the theoretical quantiles

The other axis is the theoretical one. For each sorted return the plot asks: if this data were perfectly normal, what value would sit at this position? Those are the theoretical normal quantiles, computed from the inverse normal at evenly spaced plotting positions and scaled to your data's mean and standard deviation. Plot sample against theoretical and add the 45-degree line where the two would match exactly. Most tools draw this for you - statsmodels qqplot with line set to 45, or scipy probplot - but the reference line is the whole point, so make sure it is there.

Read the tails, not the middle

The centre of almost any return series will lie on the line; that tells you little. The diagnosis lives at the ends. Points that curve below the line on the left and above it on the right - the classic S-shape - mean both tails are fatter than normal: extreme moves, up and down, happen more often than the bell curve predicts. A left tail that drops well below the line while the right tail stays closer is negative skew, the asymmetry equity indices are known for, where the worst days are worse than the best days are good.

Why this is the chart behind your VaR number

This is not an academic exercise. A parametric Value-at-Risk model assumes returns are normal and reads the loss threshold straight off that assumption. When the left tail of the QQ plot bows away from the line, it is showing you the exact reason that model understates risk: the real losses in the tail are larger and more frequent than the normal it was built on. The S-shape is the picture; the underpriced VaR is the consequence. If your returns fail the QQ plot, treat a normal-based risk number as a floor, not an estimate.

A worked read

Take daily returns for a broad equity index - the S&P 500 is the textbook case. Fit and plot and you get the shape every long sample shows: a tidy line through the middle, a right tail lifting modestly above it, and a left tail dropping sharply below, because single-day crashes are larger than any single-day rally. That is documented behaviour of index returns rather than a live figure, and it is the reason to run the plot before you trust any statistic that assumes normality - Sharpe ratios and parametric VaR included.

[QUADESTO-EMBED: QQ plot of daily returns against normal theoretical quantiles, 45-degree reference line, tails highlighted where they depart the line]

The histogram's companion

A return histogram and a QQ plot show the same fat tails two ways. The histogram makes the shape obvious - the tall narrow peak, the returns poking past the normal overlay. The QQ plot makes the tails precise, turning the tail looks fat into a measured departure you can watch grow point by point. Draw them side by side and the distribution story is complete.

Building it in Quadesto

Feed Quadesto a return series and it plots the QQ diagnostic with the reference line and the tail departures marked, next to the underwater drawdown and rolling Sharpe views that lean on the same normality assumption. The free tier embeds it live with a Made with Quadesto credit; Pro (149 pounds a month) removes the attribution and adds branded themes.

Ready to try Quadesto?

Connect your data. AI builds the charts. Embed anywhere.

Get Started Free
QQ plotnormalityreturn distributionriskfat tails