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

# hip4_hyperliquid.ohlcv_hourly

> Hyperliquid HIP-4 hourly OHLCV candles — one series per outcome token with VWAP, volume, and trade count.

export const TableSample = ({tableName, tableSchema}) => <>
    <div className="hidden dark:block">
      <iframe src={`https://dune.com/embeds/3419983/5785629?table_schema_t6f0df=${tableSchema}&table_name_t6f0df=${tableName}&darkMode=true`} style={{
  width: '100%',
  height: '500px',
  border: 'none',
  marginTop: '10px'
}} />
    </div>
    <div className="dark:hidden">
      <iframe src={`https://dune.com/embeds/3419983/5785629?table_schema_t6f0df=${tableSchema}&table_name_t6f0df=${tableName}`} style={{
  width: '100%',
  height: '500px',
  border: 'none',
  marginTop: '10px'
}} />
    </div>
  </>;

The `hip4_hyperliquid.ohlcv_hourly` table provides hourly OHLCV (Open-High-Low-Close-Volume) candles for Hyperliquid HIP-4 markets. Grain: one row per `(hour, market_id, outcome_id)`. Each market's Yes and No sides have **their own candle**, because each side trades on its own book and neither price can be derived from the other. Filter `outcome_index = 0` for the Yes series.

Hours without trades are a **flat bar at the carried close** with volume and `trade_count` set to zero, flagged by `is_forward_filled`. Some bars have real prices but zero volume and `trade_count`: these hours were priced only by the resting side of a match against the other outcome. Use `is_forward_filled` to tell forward-filled bars from traded ones.

**A settled market pins at its settlement-hour bar.** `close` is pinned to what that side paid: 1 on the winning token, 0 on the losing one, the fraction on a scalar market. `high`/`low` widen to include it. Forward-fill stops at that bar, and real trades after settlement keep their actual prices. Until a market settles, its candles run to its expected expiration without resolving it.

<Note>
  `market_outcome` is **point-in-time per bar**. The other metadata columns (`market_name`, `category`, …) keep the values they were written with. Use [`hip4_hyperliquid.market_details`](/data-catalog/curated/prediction-markets/hip4/market_details) for current market state.
</Note>

## Table Schema

| Column                     | Type        | Description                                                                                                                          |
| -------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `block_month`              | `DATE`      | First day of the UTC month of `hour`. Partition key                                                                                  |
| `hour`                     | `TIMESTAMP` | UTC hour bucket for the candle                                                                                                       |
| `market_id`                | `VARCHAR`   | Market the candle's token belongs to. Joins `hip4_hyperliquid.market_details`                                                        |
| `outcome_id`               | `VARCHAR`   | Outcome token this candle prices                                                                                                     |
| `outcome_index`            | `INTEGER`   | Side of the market: `0` is Yes, `1` is No. Prices are that token's own, not the Yes price                                            |
| `outcome_name`             | `VARCHAR`   | What this side is called: `Yes`/`No` on a plain binary, a team or range on others                                                    |
| `market_name`              | `VARCHAR`   | Readable market question, as written with the bar                                                                                    |
| `event_market_name`        | `VARCHAR`   | Parent event name, as written with the bar. NULL for standalone markets                                                              |
| `category`                 | `VARCHAR`   | Unified prediction-market category, as written with the bar                                                                          |
| `open`                     | `DOUBLE`    | First trade price in the hour. Equal to the carried close on forward-filled hours. Keeps the last traded price on the settlement bar |
| `high`                     | `DOUBLE`    | Highest trade price in the hour. Widened to include the payout on the settlement bar                                                 |
| `low`                      | `DOUBLE`    | Lowest trade price in the hour. Widened to include the payout on the settlement bar                                                  |
| `close`                    | `DOUBLE`    | Last trade price in the hour, carried forward through no-trade hours. Pinned to the payout on the settlement bar                     |
| `vwap`                     | `DOUBLE`    | Volume-weighted average price. NULL on forward-filled hours                                                                          |
| `volume_contracts`         | `DOUBLE`    | Tokens of this outcome taken by aggressors in the hour. A market's Yes and No rows are additive                                      |
| `volume_usd`               | `DOUBLE`    | Cash paid by aggressors for this outcome in the hour, in the quote stablecoin. A market's Yes and No rows are additive               |
| `trade_count`              | `BIGINT`    | Matches in the hour taken by an aggressor on this outcome                                                                            |
| `market_end_time`          | `TIMESTAMP` | End of the candle series: settlement time once known, otherwise the expected expiration                                              |
| `expected_expiration_time` | `TIMESTAMP` | When the market is due to stop trading and resolve                                                                                   |
| `market_outcome`           | `VARCHAR`   | Market state at this hour: `unresolved` before the settlement hour, then `yes`, `no`, `void` or `scalar`                             |
| `is_forward_filled`        | `BOOLEAN`   | TRUE when the bar has no trades and was carried forward                                                                              |
| `_updated_at`              | `TIMESTAMP` | When this row was last written by the pipeline                                                                                       |

## Table sample

<TableSample tableSchema="hip4_hyperliquid" tableName="ohlcv_hourly" />

## Query performance

`block_month` is the partition key. Always include a `block_month` or `hour` filter for time-series queries.

## Example query

```sql theme={null}
-- Hourly Yes price path for a single market
SELECT
  hour,
  open,
  high,
  low,
  close,
  vwap,
  volume_usd
FROM hip4_hyperliquid.ohlcv_hourly
WHERE market_id = '1209'
  AND outcome_index = 0
  AND block_month >= DATE '2026-09-01'
ORDER BY hour
```
