Every price and every derived figure on this site comes from our own market feed. Our methodology sets out how each figure is calculated. This page is about the other half: how we check that it is right.

Running our own feed is a strength and a risk at the same time. There is no second opinion built in β€” if our data is wrong in a way that is internally consistent, nothing about the site would look unusual. A price scaled a hundred times too small, or one instrument serving another’s history, produces charts that draw perfectly and articles that read normally. So the checks below exist, and most of them compare our data against something outside itself.

What we check

Prices are compared against independent outside sources

Our own feed is checked against CoinGecko for cryptocurrencies and the European Central Bank's daily reference rates for foreign exchange. This is the one check that can catch a fault our own systems agree on: a price scaled wrongly, or one symbol serving another's data.

a divergence beyond 5.0% is treated as our fault, rechecked every 6 hours

Every cross rate is checked against the two currencies it is built from

AUD/CHF must equal AUD/USD divided by CHF/USD, because all three come from the same feed at the same moment. A cross quoted upside down draws a perfectly normal chart and passes every other check; this one is the arithmetic that catches it.

a disagreement beyond 2.0% is investigated

Each instrument is checked against its own asset class

A market that closes stops with everything else around it. One symbol that stops alone has dropped out of the feed, and its last price would otherwise sit on the page looking current.

more than 180 minutes behind its class is treated as a dropout

Chart history is checked for instruments that quietly stop updating

The same reasoning applied to the candle data behind every chart, rather than to the live price.

The market feed is checked for silence

Our feed pushes continuously. A gap means the data behind every price on the site has stopped moving, whatever the pages still show.

no tick for 15 minutes is a fault

Chart data is checked for age

Charts are drawn from candles we record ourselves. If those stop arriving the chart keeps drawing the last thing it knew.

The published site is checked for age

A page can be correct when it is built and stale by the time it is read. This compares what the internet is actually serving against when it was last rebuilt.

a published site older than 36 hours is a fault

Figures on the live site are compared against our own data

The site is rebuilt periodically, so a corrected number exists in our data before it reaches a page. This measures that gap rather than assuming it is zero.

a gap beyond 8.0 percentage points is investigated

When each instrument is most active

The hourly activity profile on 76 instrument pages is re-measured from our own H1 bars on every deploy. If the generator stops, the widget removes itself rather than publishing a frozen profile.

reported after 7 days; the page stops showing it at 14

The correlation figures are checked for age

Correlations shown on an instrument page are recomputed from our own price history. If that calculation stops, the page withholds them rather than showing the last set.

reported after 7 days; the page stops showing them at 14

The typical-range and volatility figures are checked for age

Measured from the last sixty daily sessions and recalculated on every publish. If the calculation stops, those figures are withheld.

reported after 14 days; the page withholds them at 30

The economic calendar is checked for age and for events still ahead

A calendar of events that have already happened is worse than no calendar, so both its age and whether anything remains in the future are checked.

older than 30 hours is a fault

The price data behind every page is checked for age

Live prices update in your browser, but every figure baked into a page when it is built - the price a search engine sees, the 52-week range, the performance table - comes from one daily snapshot of our feed. If that stops advancing, those figures freeze while the live ticker keeps moving, so it is checked separately from the feed itself.

a snapshot older than 36 hours is a fault

Futures contract specifications are re-read by a person

Contract sizes, ticks and tick values cannot be checked automatically - we do not fetch the exchange's site. So the age of the last manual review is tracked instead, and printed on every contract page.

a review older than 120 days is reported

Coverage is checked for silence

If the newsroom stops publishing, the most recent article stays at the top of the site looking current.

nothing published for 36 hours is reported

15 of 31 automated checks are described here. The remaining 16 watch the machinery rather than the numbers — backups, certificates, whether a scheduled job is still running — and are not about the data you are reading. Generated from the checks themselves on .

What we cannot check

A page listing only what we catch is half the story, and the less convincing half. These are the limits of the checks above. Every figure in them is measured from our own systems when this page is built, not written out.

We are our own source, and there is no second opinion built in

We run our own market feed rather than reselling a vendor's. That is why the site can say the numbers are its own, and it means a fault our systems agree on has nothing internal to contradict it. The mitigation is outside comparison, not self-consistency.

25 instruments are compared against CoinGecko or the European Central Bank

Cross rates are verified through their two currencies, not directly

A cross such as AUD/CHF has no US dollar leg, and both of our outside references are quoted against the dollar. Each cross is instead checked against the two currencies it is built from, which are themselves compared against an outside source. It is one step removed, and worth saying so.

15 crosses are verified this way rather than directly

An upside-down quote on a pair trading near parity would not be caught

The check that compares a cross against its own legs works because an inverted price differs from the true one. When a pair trades close to 1.0 that difference almost vanishes, and no tolerance can recover it. The gap is self-limiting: the same arithmetic that hides the fault also caps the resulting error below the tolerance, so an inversion we could not see is by construction a small one.

the blind band is 0.9901 to 1.0102; 1 instruments currently trade inside it

We do not publish an instrument we cannot identify

Our feed carries a small number of symbols by ticker alone. Before publishing a page we confirm what each one is by comparing its price against an independent source for the asset it appears to be. Where that comparison fails, the instrument gets no page rather than a guessed name.

1 symbol(s) carried by our feed are not published for this reason

Futures contract specifications are not verified against the exchange

The futures section publishes contract sizes, ticks and tick values compiled from the exchanges' own published specifications. We cannot check them against the exchange directly - CME refuses our requests and its terms do not permit it - so what we check is the arithmetic: a tick value must equal the contract size multiplied by the tick, and if the three disagree one of them is wrong. Every contract page says this too.

41 contracts, all internally consistent; last reviewed by hand on 2026-07-25

Figures are as of the last rebuild, not the last tick

Prices update live in your browser where the market is open. Everything derived from them - performance, ranges, correlations - is computed when the site is built, and every one of those figures carries the time it was measured. If your browser is not running scripts, the price you see is the one from that build, and it says so.

a published site older than 36 hours is treated as a fault

Why these particular checks exist

Most of them were written after something went wrong. That is worth saying plainly, because a list of checks written in advance tells you what someone imagined might happen; a list written after the fact tells you what actually did.

  • An instrument that had stopped trading kept publishing its last price as though it were today’s. A frozen price never decays, so it climbed the biggest-movers list and stayed there. The correction is on our corrections page; the check that now compares every instrument against its own asset class came out of it, and our data refuses to publish a price for any series that has stopped advancing.
  • A year’s performance was measured in trading sessions rather than calendar days, which for a market trading seven days a week made a “1-year” figure cover about thirty-six weeks. Eleven articles were corrected, and the windows are now measured in calendar days β€” which is why our methodology states them as days rather than sessions.
  • Correlation figures had been typed by hand and never recalculated. Of the 177 pairs that could be checked against our own price history, 27 carried the opposite sign β€” they told a reader two markets moved apart where our data showed them moving together. The feature was withdrawn, and returned only once it was computed from the bars and dated. The age check on this page exists so that computation cannot quietly stop.

None of those was found by a reader. All of them could have been.

What we do when a check fails

A figure we cannot stand behind is withheld rather than estimated. That is the single rule these checks serve, and it has consequences a reader can see: an instrument whose price history is too short shows no 52-week range, no typical daily range and no correlations until we have observed enough sessions to measure them. An empty space is an honest answer. An interpolated one is not.

Where something wrong has already been published, we correct it on the article itself and list it on our corrections page, with what was published and what was correct. We do not silently edit the original number.

What this page does not show

It does not show current status. Showing every check passing right now would be a stronger signal and a misleading one: these run every few minutes, the site is rebuilt far less often, and a published status begins going stale the moment it ships. A stale green light is exactly the kind of fault this page exists to describe. What is published here is what we check and to what tolerance β€” both of which are durable, and both of which are read directly from the code that enforces them.

It does not cover our editorial process. How our coverage is produced, who is accountable for it, and what we refuse to publish are in our editorial standards and methodology.

If you believe a number on this site is wrong, please tell us.