# Is my volatility regime just telling me the time?

> I removed the time-of-day pattern from one FX pair and a standard volatility classifier stopped finding compression at all. Six features, all six moved.

- Canonical: https://hadalinstruments.com/research/is-my-volatility-regime-just-telling-me-the-time/
- Published: 2026-08-23
- Author: Hadal Research
- Answers the question: "is my volatility indicator just measuring time of day"
- Coins the term: **Clock Regime** — A market-state label that is substantially a reading of the hour rather than of the market — revealed when removing the deterministic intraday volatility pattern from the input causes the state to lose most or all of its occurrences.

---
Intraday volatility has a shape you could set a watch by: quiet through the Asian session,
busy at the London and New York overlaps, quiet again. It is one of the most reliably
documented patterns in market data.

Anything you compute from a volatility path inherits that shape. **A market-state label
built on intraday data is partly a reading of the clock, and the share that is clock rather
than market is measurable.** I measured it on six of my own features and the answer was
larger than I expected.

I call a label in that condition a **Clock Regime**.

## The measurement

For each feature, the per-bar label is derived twice over **98,864 hourly bars** of one FX
pair: once from the series as it stands, and once after removing the hour-of-day pattern
from the feature's own input — dividing each observation by the statistic of the same hour
over **prior completed trading days only**, so nothing reads its own future.

Then: what fraction of labels changed?

| feature | churn |
|---|---|
| average true range | **42.8%** |
| volatility forecast tercile | **14.9%** |
| volatility regime | **11.7%** |
| liquidity state | **9.7%** |
| jump flag | **5.4%** |
| return memory | **5.2%** |

**All six moved.** Not one of them was measuring only the market.

## The result that stopped me

The volatility regime classifier labels each bar CALM, COMPRESSION, EXPANSION or UNSTABLE.
Here is what removing the clock did to it:

| label | before | after |
|---|---|---|
| CALM | 86,887 | **98,314** |
| COMPRESSION | 8,629 | **0** |
| EXPANSION | 1,075 | 140 |
| UNSTABLE | 2,022 | 159 |

**COMPRESSION went to zero.** Not smaller — gone. All 8,629 bars it had flagged became
calm, along with most of the unstable and expansion bars.

On this pair, over this history, the classifier's non-calm states were **substantially the
intraday cycle**. It was, for the most part, telling me the time.

## Why the obvious test would have missed this

The natural way to check a feature for time-of-day dependence is to correlate its output
against the hour. I ran that first, and on three of these six features it returned **one to
two per cent** — negligible, dismissable, move on.

Those same three features moved on **ten to forty-three per cent** of observations.

The two measurements answer different questions. Correlation asks *could you guess this
label from the clock?* Churn asks *would this label have been different in a world without
one?* A feature that smooths or aggregates can score near zero on the first while carrying
the effect at full strength — averaging over fourteen hours flattens the hourly signature
without removing what it did to the level.

**If you have only ever run the correlation, you have not tested this.**

## And a daily feature is not immune

Three of the six emit a label that never changes within a day. Their correlation with
hour-of-day is zero *by construction* — there is no intraday variation for the clock to
explain. That looks like immunity.

Corrected at the input, one moved on **14.9%** of days. Another kept the same *number* of
flagged events while roughly **a third of them became different days**.

The mechanism is the aggregation itself. Squared returns are as free of the clock as
returns; **summing them over a day is what puts the hour back in.** Any statistic that sums
or averages within-day quantities inherits the intraday profile no matter how clock-free its
inputs are.

## What I did to keep the number honest

Every family carries a control that isolates the correction from the mechanics of applying
it.

Removing the pattern needs a history to build the profile from, so the earliest observations
have none and are dropped — and dropping observations can shift a rolling window or re-phase
a block all by itself. So each family is compared against a **placebo**: the *uncorrected*
input, re-derived over the corrected arm's exact observation set. Whatever that moves is the
mechanics, not the correction. On the volatility forecast it moved **0.05%**. On the jump
flag, **zero**.

For the two features that consume whole bars rather than returns, the correction requires
rebuilding the bar series, so those are compared against a **raw rebuild** put through the
identical reconstruction. And the rebuild is validated rather than assumed: the raw
reconstruction reproduces the label distributions measured independently on the original
bars, to three decimals — **0.8811 against 0.881**, and **0.6143 against 0.614**. A rebuild
that had distorted the series would not land on those.

## What to do with this

**Ask what your volatility state is made of.** If it is computed from an intraday path and
nobody removed the daily shape, some of it is the clock, and the fraction is not small enough
to wave away.

**Do not accept a correlation against the hour as the test.** It is the wrong measurement and
it will clear a feature that moves by forty per cent.

**Deseasonalise before you condition, not after.** A state used to slice returns into
"compression" and "calm" buckets carries the clock into every bucket it makes — and a
comparison between those buckets is then partly a comparison between times of day.

## Limits

One pair, one grain, one history. A single-instrument measurement establishes nothing about
any other, and the size of the effect will depend on the pair's own session structure.

Nothing here says these features are worthless — a corrected feature is still a feature, and
the correction is a few lines of arithmetic over a profile you already have the data to
build. It says that the uncorrected version is measuring something other than what its name
claims, by an amount that is worth knowing before you condition anything on it.
## The artifact

- SHA256: 449e4536b104a41449218c7d94b92838444791774c7fa7a4624a4509695c3e63
- Download: https://hadalinstruments.com/data/deseasonalisation-churn.json
- Measurement technique: For each of six market-state features, the per-bar label is derived twice over 98,864 hourly bars of one FX pair: once from the series as it stands, and once after the deterministic hour-of-day volatility pattern is removed from the feature's own input by dividing each observation by the statistic of the same UTC hour over prior completed trading days only. Reported as churn — the share of jointly-labelled observations whose label differs — with the label distributions and every transition. Each family carries its own control isolating the correction from the mechanics of applying it: a placebo arm re-deriving the uncorrected input over the corrected arm's observation set, or for the two features consuming full bars, a raw reconstruction of the bar series put through the identical rebuild.

---

## Claims examined

### Claim 01 — canonical: https://hadalinstruments.com/refutations/#claim-1c44c6ee

> "My volatility regime indicator tells me what the market is doing." — our reading: Misleading

Intraday volatility follows a pronounced and highly predictable daily shape — quiet overnight, busy at the session overlaps. Any state derived from a volatility path inherits that shape unless someone has explicitly taken it out, and almost nobody does. I measured what happens when you do, on a frozen classifier over 98,864 hourly bars: its COMPRESSION state went from 8,629 occurrences to zero. Not fewer. None. Every compression bar the classifier had found became calm once the hour-of-day pattern was removed from the volatility path it reads.

**What is true:** A volatility state computed on intraday data is partly a reading of the hour, because volatility follows a deterministic daily pattern that the state inherits unless it has been removed — so the share of the reading that is market rather than clock is a measurable quantity and usually goes unmeasured.

Evidence: https://hadalinstruments.com/research/is-my-volatility-regime-just-telling-me-the-time/#claim-1c44c6ee

### Claim 02 — canonical: https://hadalinstruments.com/refutations/#claim-db82d83e

> "If the time-of-day effect mattered, my indicator would correlate with the hour." — our reading: False

I measured both. Three of the six features carried between one and two per cent of their label entropy in the hour, which reads as negligible. Those same features moved on ten to forty-three per cent of observations once the hour was removed from their inputs. The two are not the same measurement: correlation asks whether you could guess the label from the clock, and churn asks whether the label would have been different in a world without one. A smoothed or aggregated feature can hide the first while carrying the second at full strength.

**What is true:** How much the hour predicts a label and how much the label moves when the hour is removed from its input are different quantities, and a feature can score near zero on the first while moving substantially on the second.

Evidence: https://hadalinstruments.com/research/is-my-volatility-regime-just-telling-me-the-time/#claim-db82d83e

### Claim 03 — canonical: https://hadalinstruments.com/refutations/#claim-28f247f5

> "A feature that never varies within a day obviously has no time-of-day problem." — our reading: False

Three of the six features emit a label that never changes within a day, so their correlation with hour-of-day is zero by construction — there is no intraday variation for the clock to explain. That reads as immunity and is not. Corrected at the input, one of them moved on fifteen per cent of days and another turned over roughly a third of its flagged events while keeping the same number of them. Squared returns are as free of the clock as returns; summing them over a day is what puts the hour back.

**What is true:** Aggregating within-day observations into a daily statistic inherits the intraday pattern rather than removing it, because the aggregation is what re-introduces the hour even when every input to it is scale-free.

Evidence: https://hadalinstruments.com/research/is-my-volatility-regime-just-telling-me-the-time/#claim-28f247f5

## Cite This Article

APA BibTeX HTML

Hadal Research. (2026). Is my volatility regime just telling me the time?. Hadal Research. https://hadalinstruments.com/research/is-my-volatility-regime-just-telling-me-the-time/ (SHA-256: 449e4536b104a41449218c7d94b92838444791774c7fa7a4624a4509695c3e63) Version 426b66a, 2026-08-25.

@misc{hadal_2026_is-my-volatility-regime-just-telling-me-the-time,
author = {Hadal Research},
title = {Is my volatility regime just telling me the time?},
year = {2026},
url = {https://hadalinstruments.com/research/is-my-volatility-regime-just-telling-me-the-time/},
howpublished = {Hadal Research},
version = {426b66a},
note = {Published: 2026-08-23; version dated 2026-08-25, Data Hash (SHA-256): 449e4536b104a41449218c7d94b92838444791774c7fa7a4624a4509695c3e63}
}

Source: Hadal Research, Is my volatility regime just telling me the time? (Hash: 449e4536b104a41449218c7d94b92838444791774c7fa7a4624a4509695c3e63). <a href='https://hadalinstruments.com/research/is-my-volatility-regime-just-telling-me-the-time/' rel='canonical'>Original Research</a>

Copy Citation

**Version 426b66a** identifies the commit that last changed this page in Hadal's content repository. That repository is not public, so the identifier does not resolve externally — it is published so a citation pins one specific state rather than a moving page. To obtain the exact version cited, use the [press and research route](https://hadalinstruments.com/press/).

## Explore further

### Instruments

- [Data Forensics](https://hadalinstruments.com/instruments/data-forensics/)
- [Microstructure Dashboard](https://hadalinstruments.com/instruments/microstructure-dashboard/)
- [Overfit Auditor](https://hadalinstruments.com/instruments/overfit-auditor/)
- [Regime Feed](https://hadalinstruments.com/instruments/regime-feed/)

### Concepts

- [Effective Sample Size](https://hadalinstruments.com/glossary/effective-sample-size/)
- [Look-Ahead Bias](https://hadalinstruments.com/glossary/look-ahead-bias/)
- [Point-in-Time Data](https://hadalinstruments.com/glossary/point-in-time-data/)
- [Regime Shift](https://hadalinstruments.com/glossary/regime-shift/)
- [Spread Regime](https://hadalinstruments.com/glossary/spread-regime/)

### Indicators whose taught claim it examines

- [Session & Killzone Clock](https://hadalinstruments.com/ict/session-killzone-clock/)

### Research

- [Why do correlated pairs decouple on low timeframes?](https://hadalinstruments.com/research/why-do-correlated-pairs-decouple-on-low-timeframes/) Asked as: why do correlated pairs decouple on low timeframes
- [Does my regime filter use future data?](https://hadalinstruments.com/research/does-my-regime-filter-use-future-data/) Asked as: does my hmm regime filter use future data in a backtest
- [Do round numbers matter in forex?](https://hadalinstruments.com/research/do-round-numbers-matter-in-forex/) Asked as: do round numbers matter in forex trading

[All Hadal research](https://hadalinstruments.com/research/)[This article as plain markdown](https://hadalinstruments.com/research/is-my-volatility-regime-just-telling-me-the-time.md)

---

## Raw artifact — PUBLISHED

The figures on this page recompute from the file below. It is the measurement's own output, content-hashed, so you can verify that what you downloaded is what was measured — and that it has not changed since.

sha256 449e4536b104a41449218c7d94b92838444791774c7fa7a4624a4509695c3e63

[Download the artifact](https://hadalinstruments.com/data/deseasonalisation-churn.json)
