Building a continuous 10-year Treasury oracle from a market that keeps closing

The Force US10Y Oracle is a continuous price for the on-the-run 10-year US Treasury yield, the benchmark that prices everything. The market behind it keeps closing. A perp never does.

Research note · February 2023 to July 2026

The problem

The 10-year Treasury yield is the interest rate the US government pays to borrow for ten years. It is the most watched number in fixed income, because nearly every other borrowing rate is priced off it, mortgages included.

The 10-year Treasury yield
February 2023 to July 2026, the period studied throughout this note.

A perp on that yield needs a price at every single moment. Someone can always open a position, close one, or be liquidated out of one, and none of that waits for New York to open. So the oracle has to keep publishing whether or not anything underneath it is trading.

And a lot of the time, nothing is. There are three clocks here and they do not line up:

Distances below are quoted in basis points. One basis point is one hundredth of a percentage point, so a yield moving from 4.50% to 4.51% has moved one basis point.

  1. The on-the-run 10-year, meaning the most recently issued note and the one the market prices off, is quoted during Treasury market hours: roughly 8am to 3pm New York time. That is not the same as stock market hours. It opens earlier and closes earlier, which matters because it covers the 8:30am slot where most US economic data is released.
  2. Treasury futures run nearly around the clock, but they still shut for a maintenance hour every evening, 5pm to 6pm New York time, and for the whole weekend.
  3. The perp never stops.
Which session prices each hour of a typical week
A typical week, hour by hour, coloured by the session that prices it. The week runs Sunday to Saturday, so the weekend appears at both ends: it opens on Sunday evening at the far left and closes on Friday evening, running through Saturday on the right. The thin stripe each weekday evening is the futures maintenance close, 5pm to 6pm.

Three sessions, one oracle

Rather than blend everything into one number, the oracle runs three sessions and always uses the most direct one available. Each published value is stamped with the session that produced it, so you can always tell a measured price from a modelled one. The same three colours mark the sessions in every chart that shows them.

Cash

Take the yield as it is. While the bond market is open, roughly 8am to 3pm New York time, the on-the-run 10-year yield is observable directly. No conversion, no modelling. This is also the anchor the other two sessions are calibrated against.

Extended

Infer it from futures. Treasury futures keep trading long after the cash market closes. A futures price is not a yield, so it has to be translated, and the translation leaves a small offset that has to be removed. Both steps below.

Internal

Fall back on the order book. Weekends, holidays, and the 5pm to 6pm maintenance hour each evening. Nothing is trading anywhere, so the oracle follows the only live signal left: the perp's own book.

Extended: turning a futures price into a yield

Futures are quoted as a price, and price and yield move in opposite directions: when a bond gets more expensive, its yield falls. So the first job is a conversion.

The contract settles against real Treasury notes with somewhere between roughly nine and a half and ten years left to run, so it is not tied to one specific bond. It is quoted instead against a standardised one sitting in the middle of that range: a notional bond paying a 6% coupon with 9.75 years remaining. Turning its price into a yield is then a single expression:

Translated yield = (C + (FV − P) / N) ÷ ((FV + P) / 2) × 100 P is the futures price, the only input that changes. C is the coupon, 6%, and FV is the face value, 100: both are standard values written into the futures contract specification. N is the years to maturity, taken as 9.75, the midpoint of the 9.5 to 10 year range the contract accepts for delivery.

What this step is really doing is a rough translation from price into yield, not a precise valuation. The coupon and face value are the contract's own terms, so nothing is being invented there. The one thing that has to be assumed is which bond is cheapest to deliver and how long it has left, which drifts inside the nine and a half to ten year range as the deliverable basket shifts while the conversion holds it at 9.75 years.

The consequence is that the translated yield tracks the shape of the real yield closely but sits at a slightly wrong level. That turns out not to matter, because the level is exactly the part we can measure and correct. The offset is called the basis.

What that looks like

The whole mechanism is visible in a single week of data. The futures price on top, and underneath it the yield that price translates to, against the cash yield. One full week, Sunday to Saturday, shaded by session in the same colours as the chart above: green while the bond market is open, grey while futures carry the oracle alone, blue when nothing is trading at all.

Futures price, the yield it translates to, and the cash yield
Price and yield sit on separate panels, since they are different units and move in opposite directions. The blue bands are empty because nothing is trading in them: no futures price to translate and no cash yield to compare against. What the oracle publishes in those hours is the subject of the next section.

The thing to look at is the translated yield. It runs continuously, but offset, and that offset drifts over time rather than holding still. That offset is the basis. Because both numbers exist at the same time for part of every weekday, it is directly measurable rather than assumed.

The basis, and what is left after correcting for it
Both measured only when cash is publishing, since that is the only time there is something to compare against. Daily averages.

How the correction is made

While the cash market is open both numbers exist, so the system keeps a running average of the distance between them. It is an exponential average with a one hour time constant, which means it tracks a genuine drift in the basis within a few hours but ignores minute-to-minute noise.

basist = w · basist−1 + (1 − w) · (casht − translatedt) w = exp(−Δt / τ), τ = 1 hour, advanced only while cash is quoting

The moment the cash market session ends, the average freezes. Nothing further updates it, and that frozen value is added to the translated yield for as long as Extended lasts.

aligned = translated + basis the value published throughout the Extended session

The handoff into Extended therefore leaves almost no step. The basis is measured right up to the moment cash stops, so the first aligned value published afterwards lands within a fraction of a basis point of the last cash value.

Is it predictive, accurate and robust?

There is a clean way to check. Cash closes in the afternoon and reopens the next morning. Freeze the basis at that afternoon's close, leave it frozen all night, then use it to align the futures yield at the moment cash reopens. If the handoff is sound, that number should land on the first cash yield that prints. Anything left over is error the handoff introduced.

Nothing from the morning being predicted goes into the estimate: the basis is the previous day's, and the futures price is the one quoted at the reopen. That makes this the honest test of the method, and the only one in this note whose result is not fitted on the data it is scored against.

Three things are worth asking of it. Predictiveness: does the move it implied overnight match the move that actually happened? Accuracy: how far did it sit from the number cash went on to print? Robustness: how large is the step when cash takes back over? The last two are the same distance read two ways, since at the reopen the error and the step are the same quantity, so they are reported as a mean and as a median with a tail.

Overnight handoff: what futures implied against what cash printed
One dot per overnight gap. Across the bottom, the move the futures implied. Up the side, the move cash actually printed at the reopen. A perfect handoff puts every dot on the diagonal.

Internal: pricing with no market at all

Cash and Extended between them cover roughly 23 hours a day, five days a week. What is left is the weekend, public holidays, and that 5pm to 6pm maintenance hour every weekday evening. In those windows there is genuinely nothing to observe, and no amount of cleverness changes that.

So the oracle stops looking outward and looks at the perp itself. If traders are willing to buy above where the oracle currently sits, that is information about where the rate has gone, even though no bond has changed hands.

Specifically it watches the impact prices: the average price you would actually get filled at for a reasonably sized order on each side. Two rules follow.

Inside the band, do nothing. While the oracle sits between the impact bid and the impact ask, the market is not disagreeing with it, so it stays put. This is what stops it drifting on thin weekend liquidity.

Outside the band, move toward it, slowly. If the whole book has shifted above the oracle, it drifts up toward the near edge. It does not jump. Each step covers a small fraction of the remaining distance, so moving it takes sustained willingness to trade at the new level rather than one large order.

What that looks like across a weekend

This is easier to judge on an actual weekend than in the abstract, but there is an obvious problem: the Treasury market is shut, so the right answer was never observed. What we can do is reconstruct a plausible one.

Two markets on the same exchange do keep trading through the weekend, a Nasdaq-100 index and crude oil. Both are tied to interest rates, equities inversely and oil directly, so a simple two-factor model fitted on ordinary trading days can project where the yield would plausibly have gone. That projection stands in for where the book would sit, and then the real production code runs against it.

A simulated weekend, and how the oracle responds

This design also answers an obvious worry: whether a trader can simply push the oracle. Moving the oracle a meaningful distance means holding the whole book away from it for hours, with real capital exposed to anyone who disagrees. A single aggressive order does almost nothing, because it is capped twice over: by the step limit, and by the requirement that the impact prices have moved rather than just the last trade.

The last four weeks

Putting all three together, this is what the oracle actually looks like. The shaded band behind the line is the session pricing it at that moment, so you can watch it hand off: cash through the New York day, futures overnight, and the internal fallback across the weekend.

The Force US10Y Oracle over the last four weeks, shaded by session
The Internal segments, in blue, are the reconstruction described above rather than observed data. Everything else is reconstructed from recorded market data the same way the oracle would compute it live.

Putting it together

SessionUsed whenPriced from
CashThe bond market is open, roughly 8am to 3pm New York timeThe on-the-run 10-year yield, taken directly
ExtendedCash is dark, Treasury futures still tradingFutures price converted to a yield, shifted by the measured basis
InternalNeither is open: weekends, holidays, the 5pm to 6pm maintenance closeThe perp's own order book, approached gradually

Falling back happens one step at a time: the oracle only drops to a weaker method when the stronger one has genuinely gone.

Conclusion

Appendix