Move Significance
Calculate how unusual each move of an investment portfolio or asset is: the return in units of its trailing volatility and of its trailing Value at Risk, its percentile among the earlier moves and the date of the last move at least as large in the same direction.
A return only says how far a price moved, not whether that is a lot for the asset: a 3% day is ordinary for a volatile growth stock and exceptional for a utility or an index. Dividing the return by the volatility of the returns before it (the “sigma” of a move) makes moves comparable across assets and calm or turbulent markets, the percentile says how many earlier moves were smaller, and “largest since” gives the familiar headline (“the biggest one-day fall since March 2020”). The VaR Multiple measures the move against the historic Value at Risk of the same earlier returns instead of their standard deviation, so it does not assume normal returns: a fall with a VaR Multiple below -1 is a VaR exceedance, worse than the loss the trailing VaR expected on all but a share alpha of days.
The formula is as follows:
\[\text{Volatility Multiple} (t) = \operatorname{Return}(t) / \sigma(\operatorname{Return}(t - \text{window}),\; ...,\; \operatorname{Return}(t - 1)),\;\; \text{with ddof=1}\] \[\text{VaR Multiple} (t) = \operatorname{Return}(t) / | \operatorname{VaR}(t) |,\;\; \text{with VaR(t) the historic VaR: the alpha quantile of Return(t - window)},\;\; \text{...},\;\; \text{Return(t - 1)},\;\; \text{interpolated linearly as in get\_value\_at\_risk}\] \[\operatorname{Percentile}(t) = \text{share of the returns before}\; t \;\text{with} | \operatorname{Return}(s) | < | \operatorname{Return}(t) |\] \[\text{Largest Since} (t) = \text{the last date}\; s < t \;\text{with Return} (s) \leq \operatorname{Return}(t) \text{for}\; a \;\text{fall},\;\; \text{or Return} (s) \geq \operatorname{Return}(t) \text{for}\; a \;\text{rise}\]Each measure only uses the returns before the period itself, so a move is never part of the volatility or the history it is measured against (no look-ahead). Largest Since compares falls with falls and rises with rises, as a headline does: a 6% fall is the largest fall since the last fall of 6% or more, whatever the rises in between.
Also known as: sigma move, standardized return, biggest move since, return z-score, worst day since, VaR exceedance, VaR breach ratio.
Move Significance in Python or via the MCP
Install the Finance Toolkit with:
pip install financetoolkit -U
Then call get_move_significance as shown below.
from financetoolkit import Toolkit
toolkit = Toolkit(
["NVDA", "KO"],
api_key="FINANCIAL_MODELING_PREP_KEY",
start_date="2015-01-01",
end_date="2025-12-31",
)
significance = toolkit.risk.get_move_significance()
significance.loc["2025-01-27"].unstack(level=0)
Or, after setting up the Finance Toolkit MCP, ask:
How unusual were the moves of Nvidia and Coca-Cola on 27 January 2025, compared with their history since 2015?
Which returns:
| Return | Volatility Multiple | VaR Multiple | Percentile | Largest Since | |
|---|---|---|---|---|---|
| NVDA | -0.1696 | -5.0657 | -3.4612 | 0.9976 | 2020-03-16 |
| KO | 0.0319 | 3.9007 | 2.343 | 0.9818 | 2022-11-10 |
| Benchmark | -0.0141 | -1.7546 | -1.0217 | 0.8613 | 2025-01-10 |
Parameters
get_move_significance accepts the following parameters.
| Parameter | Type | Description | Example |
|---|---|---|---|
period | str | The data frequency for returns (daily, weekly, monthly, quarterly, or yearly). Defaults to “daily”. | "weekly" |
window | int | None | The number of earlier returns the volatility is measured over, which the percentile also needs at least. Defaults to None, which uses a year of observations with a minimum of 20 (252 daily, 52 weekly and 20 monthly, quarterly or yearly returns). | 20 |
alpha | float | The tail probability of the trailing historic Value at Risk the VaR Multiple divides by (0.05 for the 95% VaR). Defaults to 0.05. | 0.01 |
rounding | int | None | The number of decimals to round the results to. Defaults to None, which uses the rounding of the Toolkit (4 unless set otherwise). | 2 |