> For the complete documentation index, see [llms.txt](https://docs.extended.exchange/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.extended.exchange/extended-resources/trading/rwa-markets/oracle-prices.md).

# Oracle Prices

For RWA perpetual markets, index and mark prices rely on:

* external oracle data during trading hours
* [off-hours pricing](#off-hours-pricing) during non-trading hours

Trading hours are specified for each market below.

### Oracle Price Reference

| Group             | Market   | Oracle Price Reference                                          |
| ----------------- | -------- | --------------------------------------------------------------- |
| Indices           | SPX, NDX | Value of the index                                              |
| Energy            | WTI      | 1 barrel of West Texas Intermediate (WTI) Light Sweet Crude Oil |
| Energy            | NATGAS   | 1 MMBtu of Henry Hub natural gas                                |
| Energy            | XBR      | 1 barrel of Brent Crude Oil                                     |
| Precious Metals   | XAU      | 1 troy ounce of gold                                            |
| Precious Metals   | XAG      | 1 troy ounce of silver                                          |
| Precious Metals   | XPT      | 1 troy ounce of platinum                                        |
| Industrial Metals | XCU      | 1 pound of copper                                               |
| FX                | EUR      | EUR/USD exchange rate                                           |
| FX                | USDJPY   | USD/JPY exchange rate                                           |
| Equities          | All      | Underlying share price                                          |
| ETFs              | EWY      | EWY share price                                                 |
| Pre-IPO           | SPCX     | Trade.xyz SpaceX reference price                                |

### Oracle Price Methodology

The table below outlines the Oracle Price Methodology for all RWA markets, including the provider, calculation methodology, underlying price reference, and oracle availability.

<table><thead><tr><th>Market</th><th>Provider</th><th width="225.08984375">Oracle Price Reference</th><th>Oracle Availability</th></tr></thead><tbody><tr><td>Indices: SPX, NDX</td><td><a href="https://redstone.finance/">RedStone</a></td><td>CME<a href="https://www.cmegroup.com/markets/equities/sp/e-mini-sandp500.contractSpecs.html">¹</a><sup>,</sup><a href="https://www.cmegroup.com/markets/equities/nasdaq/e-mini-nasdaq-100.contractSpecs.html">²</a> futures equivalent* normalised to spot</td><td>23/5**</td></tr><tr><td>Energy: WTI, NATGAS, XBR</td><td><a href="https://redstone.finance/">RedStone</a></td><td>CME<a href="https://www.cmegroup.com/markets/energy/crude-oil/light-sweet-crude.contractSpecs.html">¹</a><sup>,</sup><a href="https://www.cmegroup.com/markets/energy/natural-gas/natural-gas.contractSpecs.html">²</a> and ICE<a href="https://www.ice.com/products/219/Brent-Crude-Futures">¹</a> futures equivalent*</td><td>23/5**</td></tr><tr><td>Precious Metals: XAU, XAG, XPT</td><td><a href="https://redstone.finance/">RedStone</a></td><td><a href="https://massive.com/">Massive</a> (XAU, XAG) and <a href="https://www.lmax.com/">LMAX</a> (XPT) spot with fallbacks***</td><td>23/5**</td></tr><tr><td>Industrial Metals: XCU</td><td><a href="https://redstone.finance/">RedStone</a></td><td><a href="https://www.cmegroup.com/markets/metals/base/copper.contractSpecs.html">CME</a> futures equivalent*</td><td>23/5**</td></tr><tr><td>FX: EUR, USDJPY</td><td><a href="https://redstone.finance/">RedStone</a> (EUR)<br><a href="https://www.stork.network/">Stork</a> (JPY)</td><td>EUR: <a href="https://www.lmax.com/">LMAX</a> spot with fallbacks***<br>JPY: FX broker spot prices</td><td>24/5</td></tr><tr><td>Equities &#x26; ETFs: All</td><td><a href="https://www.stork.network/">Stork</a></td><td><p>Regular, pre-market, and post-market sessions: NYSE/Nasdaq midpoint prices via licensed data providers.</p><p></p><p>Overnight: Blue Ocean ATS</p></td><td>24/5</td></tr><tr><td>Pre-IPO: SPCX</td><td><a href="https://www.stork.network/">Stork</a></td><td>Trade.xyz</td><td>24/7</td></tr></tbody></table>

> \* CME and ICE futures equivalent: a proprietary aggregate of market-maker and broker feeds that has historically shown high correlation with CME and ICE L1 mid-prices. Used as an alternative to direct CME and ICE market data. Expected maximum deviation from CME and ICE L1 mid-prices is 1-2 bps, depending on the market.
>
> \*\* 23/5 = 6:30 PM – 5:30 PM ET, Sunday to Friday, with 1 hour daily gaps.
>
> \*\*\* Fallback is automatically triggered when the primary source is down or significantly deviates from the median of fallback sources.

Outside of Oracle Availability windows, the index and mark prices are calculated based on the [off-hours pricing](#off-hours-pricing) mechanics.

#### Futures-to-spot normalisation

For indices (SPX and NDX), where the price represents a futures-implied spot price, the oracle normalises the futures price to a spot equivalent using the cost-of-carry formula:

```
Spot = Futures / (1 + (r - d) * T / 365)
```

where:

* `r` = risk-free rate (SOFR) sourced from New York Fed
* `d` = annualised dividend yield, derived from major index ETF dividend yields and updated monthly. Current values can be obtained [here](https://github.com/redstone-finance/redstone-oracles-monorepo/blob/main/packages/node-remote-config/dev/other/rollover-time-blend-implied-spot.json).
* `T` = days to futures expiry

#### Roll Schedule for Indices

Index oracles (SPX and NDX) reference quarterly futures contracts. The active contract follows the standard quarterly cycle, with settlement codes corresponding to the contract month:

* H — March
* M — June
* U — September
* Z — December

The active contract rolls to the next quarterly contract before expiry, on the corresponding “Active Until” date. The active and expiry dates for each quarterly contract are shown below:

| Underlying Suffix | Active Until            | Expiration              |
| ----------------- | ----------------------- | ----------------------- |
| H6                | 2026-03-16 14:00:00 UTC | 2026-03-20 13:30:00 UTC |
| M6                | 2026-06-15 14:00:00 UTC | 2026-06-18 13:30:00 UTC |
| U6                | 2026-09-14 14:00:00 UTC | 2026-09-18 13:30:00 UTC |
| Z6                | 2026-12-14 15:00:00 UTC | 2026-12-18 14:30:00 UTC |

#### Roll Schedule for Energy and Industrial Metals

For markets that reference futures-based price feeds (WTI, XBR, NATGAS, XCU), the active contract rolls over a 5-business-day transition window.

The roll period runs from the 5th to the 10th business day of the month. During this period, the oracle price transitions from the front-month contract to the next active contract using a linear weighting model that updates at predefined timestamps aligned with internal pricing sessions.

Updated weightings take effect when the oracle switches back to external pricing at 6:00 PM ET.

Roll Example. If WTI is referencing the M6 contract and rolling into N6, the transition proceeds as follows:

| Timestamp         | Front-month (M6) weight | Next-month (N6) weight |
| ----------------- | ----------------------- | ---------------------- |
| Day 5, 5:30 PM ET | 80%                     | 20%                    |
| Day 6, 5:30 PM ET | 60%                     | 40%                    |
| Day 7, 5:30 PM ET | 40%                     | 60%                    |
| Day 8, 5:30 PM ET | 20%                     | 80%                    |
| Day 9, 5:30 PM ET | 0%                      | 100% (roll complete)   |

#### Active contract schedule

The table below shows the active contract at the start of each month and the corresponding roll target for each energy and industrial metals market.

<table><thead><tr><th>Instrument</th><th width="132.5390625">Apr 2026 roll</th><th width="132.2109375">May 2026 roll</th><th width="132.47265625">Jun 2026 roll</th><th width="134.2109375">Jul 2026 roll</th><th width="134.44921875">Aug 2026 roll</th><th width="134.18359375">Sep 2026 roll</th><th width="136.59765625">Oct 2026 roll</th><th>Nov 2026 roll</th><th>Dec 2026 roll</th></tr></thead><tbody><tr><td>XCU (Copper)</td><td>K6 → N6</td><td>N6</td><td>N6 → U6</td><td>U6</td><td>U6 → Z6</td><td>Z6</td><td>Z6</td><td>Z6 → H7</td><td>H7</td></tr><tr><td>WTI</td><td>K6 → M6</td><td>M6 → N6</td><td>N6 → Q6</td><td>Q6 → U6</td><td>U6 → V6</td><td>V6 → X6</td><td>V6 → X6</td><td>X6 → Z6</td><td>Z6 → F7</td></tr><tr><td>XBR (Brent)</td><td>M6 → N6</td><td>N6 → Q6</td><td>Q6 → U6</td><td>U6 → V6</td><td>V6 → X6</td><td>X6 → Z6</td><td>Z6 → F7</td><td>F7 → G7</td><td>G7 → H7</td></tr><tr><td>NATGAS</td><td>K26 → M26</td><td>M26 → N26</td><td>N26 → Q26</td><td>Q26 → U26</td><td>U26 → V26</td><td>V26 → X26</td><td>X26 → Z26</td><td>Z26 → F27</td><td>F27 → G27</td></tr></tbody></table>

### Off-hours Pricing

During off-trading hours, if the oracle has not been updated for more than 5 minutes, both the Index Price and Mark Price for RWA markets are derived from order book liquidity.

**Index Price Calculation**

The Index Price evolves according to:

```
Index_t = Index_{t-1} + (1 − β) · Adj_t
```

where the index moves from its previous value toward prices implied by the order book, with the speed of adjustment controlled by the smoothing factor `(1 − β)`.

**Adjustment Term**

```
Adj_t = max(Impact_Bid_t − Index_{t-1}, 0) − max(Index_{t-1} − Impact_Ask_t, 0)
```

where:

* `Impact Bid` = average execution price required to fill the market's configured impact notional on the bid side.
* `Impact Ask` = average execution price required to fill the market's configured impact notional on the ask side.

The adjustment term behaves as follows:

* If the Index Price lies between the Impact Bid and Impact Ask, no adjustment is applied.
* If the Impact Bid exceeds the Index Price, the index moves upward.
* If the Impact Ask falls below the Index Price, the index moves downward.
* If either side lacks sufficient liquidity to fill the impact notional, that side contributes zero to the adjustment.

**Smoothing Factor**

The smoothing factor is time-aware, so the index behaves consistently regardless of update cadence and remains robust to irregular updates.

<pre><code>β    = exp(−Δt* / τ)        smoothing factor
Δt*  = min(Δt, c·τ)         capped elapsed time (max 3 min)
τ    = 30 min               time constant
<strong>Δt   = t − t_prev           time since last update
</strong>c    = 0.1                  caps each step at ≤ 9.5% of Adj_t
</code></pre>

Capping the effective elapsed time at `c·τ` (3 minutes) ensures no update can move the index by more than approximately 9.5% of the current adjustment term, even after a prolonged period without updates.

**Maximum Deviation**

To limit off-hours price drift, the maximum deviation of the Index Price and Mark Price from the last known oracle price is capped at `|Index_t − last_oracle_price| ≤ 1 / max_leverage`.
