Build a cone from a dataset you can identify
A volatility cone summarizes rolling historical-volatility estimates at different lookback lengths. This generator works with your local daily closing-price series. The initial prices and downloadable example are synthetic: they represent no named security, verified exchange calendar or investment performance.
- Prepare CSV with exact date and close headers, or a JSON array of objects with those fields. CSV quoted fields are accepted. Dates must be valid, unique YYYY-MM-DD values; prices must be finite and positive. Rows are sorted oldest first. Invalid entries cause an error instead of being silently dropped.
- Upload a file up to 1 MiB containing 50–10,000 rows, or enter all rows manually and apply them. A new input attempt clears the previous displayed dataset, so an error cannot leave old results looking like the new file.
- Select return windows. An n-return window needs n + 1 closes for one estimate and n + 5 closes for the five-estimate display minimum. The minimum does not establish statistical reliability.
- Read the date range and sample count. Current means the estimate ending at the last supplied close, not a live quote. Every window uses all its possible end dates; longer windows have fewer estimates and later starting end dates.
- Export the JSON record to keep the input prices, selected periods, formula convention, sample counts and summary statistics. Browser storage is only a local convenience, not a backup or account sync.
Reproduce the population-volatility convention
For each consecutive pair of closes, calculate r = ln(new close) − ln(previous close). For each n-return window, subtract its mean return, square the deviations, average them using denominator n, then take the square root. Multiply by √252 and by 100 to express annualized volatility as a percentage.
This implementation deliberately retains the population denominator n. A sample estimator using n − 1 gives a different result; neither should be compared without naming the convention. With 30 alternating log returns of +0.01 and −0.01, the mean is zero and this formula gives √(252 × 0.0001) × 100 = 15.8745%. The n − 1 version gives approximately 16.1459%.
The 252 factor assumes daily trading observations. Crypto calendar data, intraday bars and weekly closes require a different annualization convention; this page has no factor selector. Futures rolls, splits, dividends and missing sessions must be resolved consistently in the source data. A low historical estimate does not bound future losses.
Percentiles, ranks and sample coverage
Band percentiles interpolate the sorted rolling values at index (p / 100) × (m − 1). Current percentile counts the fraction of those values strictly below the latest estimate. Ties stay in the denominator, and the latest estimate is included in its own benchmark.
For hypothetical values 10, 12, 16, 20 and 30 percent, a comparison value of 18 percent exceeds three of five observations: its empirical percentile is 60%. Its min-to-max position is (18 − 10) / (30 − 10) = 40%. The latter is a range score, not a percentile. A flat series has no observations strictly below its current zero volatility, so its displayed percentile is 0%, not a cheap-option signal.
With 300 closes, a 30-return window produces 270 estimates while a 180-return window produces 120. Their date coverage differs, and overlapping windows share returns. The table exposes those counts; it does not imply independent samples or statistical confidence bands. For a tool that aligns end dates across windows, see the volatility cone analyzer.
A historical cone cannot price an option
This page does not request or accept option prices or implied volatility. A high historical percentile does not establish that premiums are expensive, and a low percentile does not predict an increase. Earnings events, maturity, strike, skew, spreads and liquidity require separate evidence. No percentile here selects a strategy or supports a claim of profitable mean reversion.
The RealVol cone explanation illustrates historical ranges across horizons; its index conventions are not a specification for this calculator. OIC’s volatility discussion distinguishes historical observations from option-implied volatility. Keep that distinction when using the output for further research.