> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qfex.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Roll Schedules

> Published dated-futures contracts and roll boundaries used by QFEX oracle pricing.

Some QFEX perpetual futures derive their oracle price from a dated futures contract. This page lists all 35 calendar entries returned by the production settlement-calendar API from **2026-01-01 00:00 UTC** onward. The latest published roll boundary in this data is **2027-02-11 22:30 UTC**.

<Note>
  Times are UTC. `active_until` is the boundary through which the listed dated future remains active for the QFEX symbol. Query the API at execution time instead of hardcoding this page because the published calendar can change.
</Note>

## Published calendar

### CL-USD

| Dated future | Active until (UTC)   | Futures expiration (UTC) |
| ------------ | -------------------- | ------------------------ |
| `CLJ6`       | 2026-03-12 21:30 UTC | 2026-03-20 21:30 UTC     |
| `CLK6`       | 2026-04-14 21:30 UTC | 2026-04-21 21:30 UTC     |
| `CLM6`       | 2026-05-13 21:30 UTC | 2026-05-18 21:30 UTC     |
| `CLN6`       | 2026-06-11 21:30 UTC | 2026-06-10 21:30 UTC     |
| `CLQ6`       | 2026-07-14 21:30 UTC | 2026-07-11 21:30 UTC     |
| `CLU6`       | 2026-08-14 21:30 UTC | 2026-08-20 21:30 UTC     |
| `CLV6`       | 2026-09-14 21:30 UTC | 2026-09-22 21:30 UTC     |
| `CLX6`       | 2026-10-14 21:30 UTC | 2026-10-20 21:30 UTC     |
| `CLZ6`       | 2026-11-13 22:30 UTC | 2026-11-20 22:30 UTC     |
| `CLF7`       | 2026-12-14 22:30 UTC | 2026-12-21 22:30 UTC     |
| `CLG7`       | 2027-01-14 22:30 UTC | 2027-01-20 22:30 UTC     |

### COPPER-USD

| Dated future | Active until (UTC)   | Futures expiration (UTC) |
| ------------ | -------------------- | ------------------------ |
| `HGK6`       | 2026-04-14 21:30 UTC | 2026-04-21 21:30 UTC     |
| `HGN6`       | 2026-06-11 21:30 UTC | 2026-06-16 21:30 UTC     |
| `HGU6`       | 2026-08-13 21:30 UTC | 2026-09-28 21:30 UTC     |
| `HGZ6`       | 2026-11-12 22:30 UTC | 2026-12-29 22:30 UTC     |
| `HGH7`       | 2027-02-11 22:30 UTC | 2027-03-29 21:30 UTC     |

### NATGAS-USD

| Dated future | Active until (UTC)   | Futures expiration (UTC) |
| ------------ | -------------------- | ------------------------ |
| `NGJ26`      | 2026-03-12 21:30 UTC | 2026-03-27 21:30 UTC     |
| `NGK26`      | 2026-04-14 21:30 UTC | 2026-04-28 21:30 UTC     |
| `NGM26`      | 2026-05-13 21:30 UTC | 2026-05-27 21:30 UTC     |
| `NGN26`      | 2026-06-11 21:30 UTC | 2026-06-10 21:30 UTC     |
| `NGQ26`      | 2026-07-14 21:30 UTC | 2026-07-20 21:30 UTC     |
| `NGU26`      | 2026-08-14 21:30 UTC | 2026-08-27 21:30 UTC     |
| `NGV26`      | 2026-09-14 21:30 UTC | 2026-09-28 21:30 UTC     |
| `NGX26`      | 2026-10-14 21:30 UTC | 2026-10-28 21:30 UTC     |
| `NGZ26`      | 2026-11-13 22:30 UTC | 2026-11-25 22:30 UTC     |
| `NGF27`      | 2026-12-14 22:30 UTC | 2026-12-29 22:30 UTC     |
| `NGG27`      | 2027-01-14 22:30 UTC | 2027-01-27 22:30 UTC     |

### US100-USD

| Dated future | Active until (UTC)   | Futures expiration (UTC) |
| ------------ | -------------------- | ------------------------ |
| `NQH6`       | 2026-03-13 21:30 UTC | 2026-03-18 13:30 UTC     |
| `NQM6`       | 2026-06-14 21:30 UTC | 2026-06-19 13:30 UTC     |
| `NQU6`       | 2026-09-13 21:30 UTC | 2026-09-18 13:30 UTC     |
| `NQZ6`       | 2026-12-13 21:30 UTC | 2026-12-18 13:30 UTC     |

### US500-USD

| Dated future | Active until (UTC)   | Futures expiration (UTC) |
| ------------ | -------------------- | ------------------------ |
| `ESH6`       | 2026-03-13 21:30 UTC | 2026-03-18 13:30 UTC     |
| `ESM6`       | 2026-06-14 21:30 UTC | 2026-06-19 13:30 UTC     |
| `ESU6`       | 2026-09-13 21:30 UTC | 2026-09-18 13:30 UTC     |
| `ESZ6`       | 2026-12-13 21:30 UTC | 2026-12-18 13:30 UTC     |

## Roll behavior

`US100-USD` and `US500-USD` switch to the next listed contract after the prior contract's `active_until` boundary.

For `CL-USD`, `COPPER-USD`, and `NATGAS-USD`, the oracle blends the front and next contracts over the final five CME business-day boundaries before `active_until`. Weekends and configured CME holidays do not advance the blend.

Each business-day boundary lands at **17:30 America/New\_York**, the same wall-clock time as `active_until`. In the published calendar above that time appears as **21:30 UTC** while US Eastern is on daylight time and **22:30 UTC** while it is on standard time. The blend advances by exactly one row of the table below at each of these daily boundaries, so the changeover to 100% next contract completes at the `active_until` timestamp itself.

| CME business days remaining until `active_until` | Front contract | Next contract |
| -----------------------------------------------: | -------------: | ------------: |
|                                        5 or more |           100% |            0% |
|                                                4 |            80% |           20% |
|                                                3 |            60% |           40% |
|                                                2 |            40% |           60% |
|                                                1 |            20% |           80% |
|                                                0 |             0% |          100% |

The first step off 100% front therefore occurs at the 17:30 ET boundary five CME business days before `active_until`, and each subsequent business day shifts another 20% until the next contract is fully active.

## Query the live calendar

With the [QFEX CLI](/api-reference/cli):

```sh theme={null}
qfex market settlement-calendar --symbol CL-USD
qfex market settlement-calendar --symbol CL-USD --time 2026-09-01T00:00:00Z
```

Or call the production REST endpoint directly:

```sh theme={null}
curl --get 'https://api.qfex.com/settlement-calendar' \
  --data-urlencode 'symbol=CL-USD' \
  --data-urlencode 'time=2026-09-01T00:00:00Z'
```

The response contains `qfex_symbol`, `future_symbol`, `active_until`, and `expiration`. If `time` is omitted, the endpoint uses the current UTC time.
