---
title: "Read your portfolio's volatility, drawdown and Sharpe"
description: "How to read the Risk screen: volatility, maximum and current drawdown, Sharpe and semi-deviation, and why a deposit cannot hide a fall in the drawdown."
url: "https://stonqs.app/guides/read-portfolio-risk-volatility-drawdown-sharpe/"
lang: "en"
updated: "2026-10-25"
---

Reading the figures · Guide 9 of 10

# Read your portfolio's risk

[By Vladimir Varvorkin](https://stonqs.app/about/) Updated October 14, 2026 6 min read

The Risk screen answers two questions about one window of your past: how much the portfolio moved from day to day (volatility), and how deep its worst fall from a peak was (maximum drawdown). It takes five minutes to read, and it describes what happened, not what will.

## On this page

1. [Before you start](https://stonqs.app/guides/read-portfolio-risk-volatility-drawdown-sharpe/#before-you-start)
2. [Open Risk and pick a period](https://stonqs.app/guides/read-portfolio-risk-volatility-drawdown-sharpe/#open-risk-and-pick-a-period)
3. [Read the figures at the top](https://stonqs.app/guides/read-portfolio-risk-volatility-drawdown-sharpe/#read-the-figures-at-the-top)
4. [Check the drawdown against a deposit](https://stonqs.app/guides/read-portfolio-risk-volatility-drawdown-sharpe/#check-the-drawdown-against-a-deposit)
5. [Look at the volatility and the distribution](https://stonqs.app/guides/read-portfolio-risk-volatility-drawdown-sharpe/#look-at-the-volatility-and-the-distribution)
6. [The measurements](https://stonqs.app/guides/read-portfolio-risk-volatility-drawdown-sharpe/#the-measurements)
7. [If something goes wrong](https://stonqs.app/guides/read-portfolio-risk-volatility-drawdown-sharpe/#if-something-goes-wrong)

Your account can hold more than it did at its highest point and still be in a drawdown of 10 %. That is not a rounding error: the Risk screen measures falls on the return, not on the balance, so a deposit made during a fall does not fill the hole. Everything on the screen is a description of one past window, in your base currency, on prices from the sources you chose.

## Before you start

You need a portfolio with prices ( [sources chosen](https://stonqs.app/guides/choose-price-and-exchange-rate-sources/)) and, ideally, its deposits in the ledger ( [filling the gaps after an import](https://stonqs.app/guides/fill-gaps-after-import/)). A deposit missing from the ledger distorts the daily returns (see the end). With no transactions at all it says there is no risk to compute, and shows no zeros.

## Open Risk and pick a period

Open **Risk** in the sidebar. The account picker applies, so the figures are for the accounts you selected. Two controls sit at the top: the period (1M, 3M, YTD, 1Y, 3Y, 5Y, All, plus any period of your own; it starts on All) and **Window**, which offers 21, 63, 126 or 252 days (it starts on 63 and reads `Window: 63 days`).

The period sets every headline figure. **Window** only changes the rolling-volatility chart. Pick a period of at least a year if you can: the app’s reference says outright that these figures are [unstable over short windows](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/docs/ai-reference/risk-metrics.md), and that a one-month Sharpe is noise.

Days here are weekdays. [The code](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/core/src/calc/series.rs) drops Saturdays and Sundays and carries a weekend deposit to the next weekday.

## Read the figures at the top

Only the first few figures show at first. The control reading `more figures` unfolds the rest, and `Show less` folds them back. Nothing is dropped.

| Label                   | What it says                                           | Basis                                                               |
| ----------------------- | ------------------------------------------------------ | ------------------------------------------------------------------- |
| Volatility (annualized) | How much the value moves, up or down                   | Standard deviation of daily returns, times the square root of 252   |
| Sharpe                  | Return above a risk-free rate, per unit of volatility  | Annualised return minus 2 %, divided by volatility                  |
| Maximum drawdown        | The deepest fall from a peak in the period             | Chained returns, with the date of the trough and its length in days |
| Current drawdown        | How far below the last peak the period ends            | Same index; “at its peak” when it ends on one                       |
| Longest drawdown        | The longest time between a peak and getting back to it | Calendar days; “still open” counts to the period’s end              |
| Semi-deviation          | The share of the movement that came from falling days  | Falling days only, divided over every day                           |
| Winning days            | Days that closed higher                                | Count out of all days in the period                                 |
| Return (annualized)     | The period’s time-weighted return as a yearly rate     | Geometric, per 252 days                                             |
| Best day, Worst day     | The two single-day extremes, with dates                | Flow-adjusted daily return                                          |

Volatility is a width, not a loss. The reference puts it plainly: [a portfolio with 15 % volatility is not expected to fall 15 %](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/docs/ai-reference/risk-metrics.md). The numbers are computed from the formulas in [the measurements](https://stonqs.app/guides/read-portfolio-risk-volatility-drawdown-sharpe/#the-measurements).

Note

The Sharpe line carries the rate it used: `risk-free 2 %`. The Risk screen fixes it at 2 % and offers no field to change it. That is [a constant in the app’s code](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/app/src/screens/Risk/index.tsx), not a published rate. Treat the Sharpe as comparable only with another Sharpe computed the same way over the same window. With zero volatility there is nothing to divide by, and the figure says so instead of showing a number.

## Check the drawdown against a deposit

Look at **Maximum drawdown** and **Current drawdown** together. The first is the worst fall in the period; the second is where you stand now, which is zero only if the period ends at a new high. Then open the **Drawdown from the peak** chart, which stays at or below zero, and the **Deepest drawdowns** table underneath.

The table lists falls deepest first, not latest first. Its columns are Period, Depth, Fall (days from peak to trough), Recovery (days from trough back to the peak, or `not recovered`) and Total. The longest episode is rarely the deepest: a shallow hole that never fills can cost years.

A small example with made-up numbers, in one currency, over three weekdays. The balance starts at 1,000, rises to 1,100, falls to 990, and then you deposit 1,000, ending at 1,980.

| Day | Balance | Deposit | Daily return | Return index | Drawdown  |
| --- | ------- | ------- | ------------ | ------------ | --------- |
| 1   | 1,100   | 0       | +10.00 %     | 1.1000       | 0         |
| 2   | 990     | 0       | \-10.00 %    | 0.9900       | \-10.00 % |
| 3   | 1,980   | 1,000   | \-0.50 %     | 0.9850       | \-10.45 % |

By balance, day 3 is a new high (1,980 against 1,100) and there is no fall at all. By return, the portfolio is 10.45 % below its peak, because the deposit bought no recovery. That is the point of the screen.

## Look at the volatility and the distribution

**Rolling volatility** repeats the volatility over a sliding window, so you can see calm and rough stretches inside the period. **Distribution of daily returns** buckets the days by size; the number of buckets follows the width of the panel and says nothing about the portfolio. Read **Semi-deviation** against volatility. The reference describes the comparison: a semi-deviation close to the volatility means the portfolio [falls about as hard as it moves](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/docs/ai-reference/risk-metrics.md), and one far below means it rose more often than it dropped.

## The measurements

Daily return on a weekday t is the balance divided by yesterday’s balance plus that day’s deposits, minus one: `r = V_t / (V_{t-1} + F_t) - 1`. A day with a zero base is skipped. From the `n` returns [the code](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/core/src/calc/risk/mod.rs) computes:

- Volatility = sample standard deviation (n - 1 in the denominator) of `r`, times `sqrt(252)`. A daily deviation of 1 % becomes 15.87 % a year.
- Annualised return = `(product of (1 + r)) ^ (252 / n) - 1`.
- Sharpe = `(annualised return - 0.02) / volatility`, absent when volatility is zero.
- Semi-deviation = `sqrt(sum of r squared over days with r < 0 / (n - 1))` times `sqrt(252)`. It is measured from zero, not from the mean, and divided by every day, like volatility. Divided by the losing days alone, a portfolio that rarely falls would look riskier.
- Drawdown = return index divided by its running peak, minus one. A recovery is the first day the index is back at the peak.

None of this is a forecast. Market data comes from free third-party sources without warranty, and your broker’s statements are what counts.

## If something goes wrong

**The screen says there is no risk to compute.** The profile has no transactions, or none in the chosen accounts. Import or add some first.

**The drawdown looks too deep, or volatility too high.** Look at the worst day and the best day: a missing price or a deposit not in the ledger shows up as one outsized day. Fix the price source or add the deposit, and the figures move.

## Sources

- [Stonqs: risk](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/docs/user-guide/risk.md)  · The screen, its window control and what each drawdown figure means.
- [Stonqs: risk metrics](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/docs/ai-reference/risk-metrics.md)  · Definitions of volatility, Sharpe, drawdown and semi-deviation, and their stated limits.
- [Stonqs: the risk calculation](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/core/src/calc/risk/mod.rs)  · The 252-day constant, sample variance, the drawdown episodes.
- [Stonqs: flow-adjusted daily returns](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/core/src/calc/series.rs)  · How a deposit is taken out of a day's return, and which days count.
- [Stonqs: the Risk screen](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/app/src/screens/Risk/index.tsx)  · The period and window controls, their defaults and the fixed 2 % risk-free rate.

[  Previous Export a tax year's gains, dividends and costs](https://stonqs.app/guides/realised-gains-dividends-tax-year-csv/) [ Next Compare your portfolio with an index fund or ETF](https://stonqs.app/guides/compare-portfolio-with-index-etf/)

## Read next

- [Read your returns ](https://stonqs.app/guides/read-your-returns-twr-xirr/)
- [Why your two returns disagree ](https://stonqs.app/blog/time-weighted-vs-money-weighted-return/)
- [All guides ](https://stonqs.app/guides/)

---

[ Stonqs](https://stonqs.app/)

A portfolio tracker that runs on your own computer. Free, open source, no account.

## Product

[Download](https://stonqs.app/download/) [Privacy](https://stonqs.app/privacy/)

## Learn

[Guides](https://stonqs.app/guides/) [Blog](https://stonqs.app/blog/) [FAQ](https://stonqs.app/faq/)

## Project

[About](https://stonqs.app/about/) [Source code](https://github.com/vvvlladimir/stonqs) [Changelog](https://github.com/vvvlladimir/stonqs/blob/main/CHANGELOG.md) [Discussions](https://github.com/vvvlladimir/stonqs/discussions) [Report a bug](https://github.com/vvvlladimir/stonqs/issues)

Stonqs is a tool for recording and analysing your own investments. It is not financial, tax or legal advice, and neither are the answers of its assistant. Market data comes from free third-party sources with no guarantee of accuracy. This site sets no cookies and loads nothing from other servers; the only thing it keeps in your browser is the language you pick.

[Legal notice](https://stonqs.app/legal-notice/) [Privacy policy](https://stonqs.app/privacy-policy/)
