The Year Everyone Calls 252 Sessions Long Was 251

Published on: August 29, 2026 | By: Mariusz Skobel

Somewhere in your pipeline there is a 252. It is doing more work than anything that short should, and almost nobody who typed it has checked it against a calendar.

Every weekday of 2026 as a tick: 249 full sessions in dark green, gaps where the market was shut on ten days, and two short green ticks for the one o'clock closes, above the figures 97,530 open minutes against the 98,280 that 252 by 390 assumes.

Annualising a daily volatility means multiplying by the square root of how many days there are in a year. For US equities the number everyone reaches for is 252. It is a good average. It is not a count, it was not true in 2026, and it is the kind of constant that never announces itself when it is wrong.

This is what happens when you count instead.

The part that is pure arithmetic

Before any holiday is subtracted, a year does not contain a fixed number of weekdays. Whether 1 January is a Tuesday or a Saturday, and whether February has an extra day, moves the total by two:

YearWeekdays
2020262
2021261
2022260
2023260
2024262
2025261
2026261
2027261
2028260
2029261
2030261
Weekdays per calendar year. No holiday data involved; this is the calendar alone.

A two-day spread across a decade is not large, but note what it already rules out: there is no single correct answer, only a correct answer per year. Everything after this only widens the spread, because the holidays move as well. Several are pinned to a weekday rather than a date, one follows Easter, and one or two a year fall on a Saturday or Sunday and are observed on an adjacent weekday, or not at all.

2026, counted

US equities closed for ten full days in 2026 and shortened two more. That gives the year the following shape:

Days
Calendar days365
Weekend days104
Weekdays261
Full closures10
Sessions251
of which shortened to 13:002
US equity regular hours, 2026. The ten closures were 1 and 19 January, 16 February, 3 April, 25 May, 19 June, 3 July, 7 September, 26 November and 25 December; the one o'clock closes were 27 November and 24 December.

251, not 252. On its own that is a 0.2% error in an annualised volatility — nothing that changes a decision. It is worth going through anyway, because of how we arrived at the number.

The reading that lands exactly on 252

We took the 2026 calendar from three published descriptions of it rather than deriving it from the rules, because deriving it is precisely the mistake this article is about. Two of the three agreed on every date. The third, read automatically, came back with Friday 3 July as a one o'clock close rather than a full closure — and reading the same page a second time produced a third arrangement, which is a fairly clear sign the error was in our reading rather than in the exchange's publication.

Independence Day falls on a Saturday in 2026, the observed holiday moves to the Friday, and the market does not open. That is settled. What makes the wrong reading worth a section is what it does to the total:

3 July read asSessionsOpen minutes
A full closure (correct)25197,530
A 13:00 early close25297,740
One date, two readings, and the wrong one lands on the number everybody expects.
The wrong answer is the expected answer. Had we taken the misreading, the year would have come out at exactly 252 sessions, matched the constant in every textbook, and been checked by nobody — including us. A wrong value that disagrees with the convention gets investigated. A wrong value that agrees with it gets shipped.

The general form of this is worth stating plainly, because it is not about one date. The exchange publishes its calendar clearly. Between that publication and the constant in your code sits a chain of readings — a page scraped, a library packaged, a spreadsheet copied, a number remembered — and any one weak link produces a figure that looks exactly like the right one.

Sessions are not minutes

Counting sessions is the easy half. A great deal of research is scaled not by how many days the venue opened but by how long it was open, and those are different questions the moment a half-day appears:

BasisMinutesAgainst actual
Open minutes, counted97,530
251 sessions × 39097,890+0.37%
252 sessions × 39098,280+0.77%
A full US equity session is 390 minutes. The two thirteen-hundred closes remove 180 minutes each.

So the conventional figure is high by roughly three quarters of a percent on a minute basis, and the error has two independent parts: one session that did not exist, and 360 minutes of sessions that were shorter than assumed. Neither is visible in the output. Both point the same way.

Whether three quarters of a percent matters depends entirely on what you are doing with it, and we would rather say that than inflate it. On a Sharpe ratio quoted to one decimal place it disappears. On a volatility target that rescales a book every day for a year, it is a persistent tilt in one direction that nothing in the reporting will ever surface, because the constant does not appear in the output — only its effect does.

A holiday looks exactly like an outage

This is the part that costs afternoons rather than basis points, and it has nothing to do with annualisation.

A data-quality check watches for instruments that have stopped updating. The natural way to write one is a threshold: raise an alert if nothing has arrived for longer than some interval. The trouble is that a market which is legitimately shut produces exactly the same silence as a feed that has died, and the length of the legitimate silence is not one number. Here is every distinct gap between one session's close and the next session's open in 2026:

Gap from close to next openTimes in 2026What it is
17.5 hours197an ordinary overnight
41.5 hours1a Thursday closure, back on Friday
64.5 hours1a weekend after an early close
65.5 hours41an ordinary weekend
66.5 hours1a weekend, one side shortened
68.5 hours1a weekend after a Friday half-day
89.5 hours7a three-day weekend
92.5 hours1the Christmas stretch
Nine distinct values in a single year, on a single venue, in a single asset class.
There is no threshold that works. Set it below 92.5 hours and the calendar itself sets off the alarm several times a year, on every instrument at once. Set it above 92.5 hours and an instrument can be dead for three full days without anyone hearing about it. The threshold is not badly tuned; the question is badly posed.

The question becomes answerable the moment the checker knows the venue's calendar, because then the two cases separate cleanly. Silence while the venue was open is a problem. Silence while the venue was shut is not data at all, and there is nothing to raise, fill or measure coverage against.

The failure mode when a holiday is unknown is worse than a false alarm, because the usual response to a day-long hole is not to alert on it — it is to fill it. A flat bar gets carried forward across a closure, and a day of zero return enters the sample. Do that for ten days a year and the measured volatility falls slightly, the autocorrelation structure changes, and every one of those days is a day the strategy will happily trade in a backtest and could not have traded in life.

The three things a half-day breaks quietly

An early close is a smaller event than a holiday and, in our experience, the more expensive one, because it does not produce a hole anyone notices. The venue opens normally. Everything looks routine.

The bar grid keeps counting. A one-minute grid built from a fixed session length generates 390 bars for a day that had 210 of them, and the last 180 are either empty or forward-filled from the close. On the two 2026 half-days that is 360 fabricated bars per instrument, all of them at zero return, all of them in the tail of the day where a great deal of intraday research is concentrated.

Anything scaled by session length is overstated for that day. A volatility annualised on a 6.5-hour session, computed on a day that was open for 3.5, is scaled by a factor that is 36% too large before any market movement is considered. It is one day, so it is not a catastrophe, but it is one day that will show up as unusual and invite an explanation that has nothing to do with the market.

The staleness check fires three hours early, on everything. At 13:00 the entire venue goes quiet at once. A checker that expects trading until 16:00 raises every instrument it follows, simultaneously, three hours before it should — which is the alert pattern most likely to be dismissed as a glitch, and the one that trains people to dismiss the next one too.

What a calendar should refuse to do

We shipped this as a module this week, and the design decision worth writing down is not what it computes but what it declines to answer.

A calendar built from a file covering 2026 knows nothing about 2027. The tempting behaviour is to fall back on the recurring session: it is a Wednesday, no holiday is recorded, therefore the venue was open. That answer is right most of the time, which is what makes it dangerous — it silently converts a missing file into a confident wrong answer on exactly the dates that matter, since a date nobody bothered to add to the file is disproportionately likely to be an unusual one.

>>> cal = read_calendar_csv("us_2026.csv", US_EQUITY_RTH)
>>> cal.is_trading_day(date(2027, 1, 4))
ValueError: 2027-01-04 is outside this calendar (2026-01-01..2026-12-31);
extend the source file rather than assuming the venue was open

This is noisy precisely once, at the moment somebody extends the file, and correct afterwards. The alternative is quiet forever and wrong occasionally, and a research pipeline has more than enough of those already.

The same reasoning produced the rest of the module. There is no default calendar, because a default calendar is a guess about which venue you meant. A day cannot be listed as both a holiday and an early close, because that is a contradiction in the source rather than something to resolve silently. An empty file cannot imply the range it covers. And the count of open minutes is computed from the sessions rather than multiplied out of them, because those two figures differ by exactly the half-days that nobody remembers.

Checking a calendar you were handed

Most teams inherit a calendar rather than build one, and it is usually worth ten minutes before trusting it. Four questions do most of the work.

Does it distinguish a closure from an early close, or is every exception just a date? A file with one column of dates cannot express a half-day, which means the half-days are either missing or recorded as closures, and both are wrong in a way that will not surface. Does it state the range it covers, or only the exceptions inside it? Without a stated range there is no way to tell an absent holiday from an absent year. Does it give closing times in the venue's local timezone rather than a fixed UTC offset? A fixed offset is correct for part of the year and quietly wrong across the daylight-saving boundary. And does asking it about next year produce an answer? If it does, the answer is a guess.

The fifth question is where it came from, and it is the one we would now ask first. Ours came from three sources so that two could disagree with the third, and it was worth the extra hour.

Where this sits

The calendar module is part of our open-source market-data library and it closes the oldest gap in it: the session logic described a recurring window from the start, and nothing described the exceptions to that window, so a holiday and an outage were the same event as far as the code was concerned. The command-line tool now prints the sessions and the open minutes for a year, and prints them in the form the feature layer wants, so the annualisation constant is read out of a file instead of being remembered.

It is also the same failure as the last several of these write-ups, wearing different clothes. A daily value joined at its label is readable before it existed. An index universe taken from today's list was selected using the end of the period. A calendar assumed rather than sourced treats days the market was shut as days it was open. Every one of them produces numbers that are real, correctly dated and unavailable at the time they were used, and none of them fails loudly.

The library is MIT licensed with no runtime dependencies, and what we have deliberately decided against building is written down in the same place as what we have planned. A default annualisation factor is on that list, and this article is more or less the reason. Comments people have left on the work, each linked to its original, are on our community page.

If you run the count for your own venue and year and get something other than what your code assumes, we would like to hear the two numbers. That is a more useful contribution than any argument about which convention is correct.

Frequently asked questions

How many trading days are in a year?

It depends on the year and the venue, which is the whole point. US equities had 251 sessions in 2026: 365 calendar days, less 104 weekend days, less ten full closures. The weekday count alone moves between 260 and 262 across the 2020s before a single holiday is subtracted, and the holidays move too, because several of them are tied to a weekday and one follows Easter. Any single number quoted for all years is an average that has been rounded.

Why does everyone use 252 if it is not the count?

Because it is a reasonable long-run average for US equities and because it has to be typed somewhere. That is a fair reason to use it as a default and a poor reason to leave it unstated. A constant like this rescales every annualised figure in a report while leaving the shape of the result untouched, so a wrong one does not look like an error — it looks like a slightly better or slightly worse strategy.

How many early closes does the US equity market have?

Two in 2026: the day after Thanksgiving and Christmas Eve, both at one o'clock New York time. The count varies by year, because a half-day usually sits next to a holiday and the holidays move. Three is common when Independence Day falls so that the surrounding session is shortened rather than closed.

Is 3 July 2026 a market holiday or an early close?

It is a full closure. Independence Day falls on a Saturday in 2026 and the observed holiday moves to the Friday, so US equities do not trade at all that day. It is worth naming because it is the date we saw read two different ways, and reading it as a one o'clock close rather than a closure produces exactly 252 sessions for the year — the expected number, arrived at wrongly.

How do I tell a market holiday from missing data in a feed?

Without a calendar you cannot, and that is the problem. A holiday and a dead feed both look like a day-long absence of messages, so a quality check will either raise the closure as an outage or, once the threshold is loosened enough to stop that, fail to raise a genuinely dead instrument. In 2026 the gap between one session's close and the next session's open took nine distinct values, from 17.5 hours to 92.5. Anything set above the longest is no longer a staleness check.

Should I annualise volatility on 252 or 365?

On whichever matches the clock your returns were sampled on. Daily equity returns exist only on sessions, so the session count is the right scale and 365 overstates it badly. A 24-hour venue genuinely has 365. The mistake is not picking the wrong one so much as not recording which was picked, because the figure that comes out carries no trace of the constant that produced it.

What should a calendar do when asked about a date it does not cover?

Refuse. A file listing one year's holidays says nothing about the next year, and a calendar that treats an unknown weekday as open converts a missing file into a confident wrong answer — the hardest kind to notice, because nothing is raised and the number that comes out is plausible. Raising instead is noisy exactly once, when someone extends the file.

Do I need a trading calendar if I only trade crypto?

No holidays, but the question does not go away. Perpetual venues have maintenance windows, halted symbols and delistings, and each of those produces the same day-shaped hole a holiday does. What changes is that the closures are unscheduled, so they cannot be read from a file in advance and have to be recorded as they happen. The distinction that matters is the same one: the venue was shut, or the data is missing.

Empowering quantitative research with high-frequency market data and analytics.

AMII LTD
Plac Europejski 1
00-844 Warsaw, Poland

© 2026 HarvestGroup360 — a brand operated by AMII LTD.