Extended fields and short-horizon direction on Hyperliquid perpetuals
We trained the same gradient-boosted model twice, once on raw trades and top-of-book data and once with our extended fields added, then scored both on three months neither had seen. The out-of-sample directional hit rate rose from 51.6% to 54.9%.
Summary
The task is to predict the sign of the mid-price return over the next 500 ms on BTC, ETH and SOL perpetuals on Hyperliquid, sampled every 100 ms. Both models are trained on January to June 2026 and tested on July to September 2026. The model, its hyperparameters and the training window are identical. Only the feature set differs.
With raw trades and L1 quotes the model is right 51.6% of the time on points where the mid moved. With the eight extended fields added it is right 54.9% of the time. The gain is present for each asset, in each test month and at each horizon we tried. A day-level block bootstrap puts the 95% interval for the difference at +2.9 to +3.7 points.
The question
Every extended field we publish costs something to compute: order-level reconstruction, a single clock across streams, careful handling of gaps. Before committing to that work across 20 venues we wanted a direct measurement of whether the fields carry information beyond what a competent researcher would build from trades and the top of the book in an afternoon.
A directional classification at a fixed short horizon is a deliberately narrow test. It isolates the information content of the inputs and keeps modelling choices from doing the work.
Data
All inputs come from our own Hyperliquid capture, which has run from Tokyo (primary) and Ireland (secondary) since November 2025. Streams from both regions are merged by venue sequence number. Gaps that survive the merge are written to the gaps table, and for this study we drop every grid point within 2 seconds of a recorded gap. That removed 0.3% of points.
We start the training window in January 2026. November and December 2025 were captured with an earlier version of the merge logic and have a gap rate roughly four times higher, so we left them out rather than mix two pipelines in one training set.
Every feature and every label is computed on ts_capture, our PTP-disciplined receive clock, using only messages with ts_capture at or before the grid time. Venue timestamps are kept for ordering within a stream and never used to decide what was knowable at time t. Our earlier note on capture and exchange timestamps covers the reasons.
Label construction
The mid at time t is the average of best bid and best ask in our reconstructed L2 book after the last event with ts_capture at or before t. The label is the sign of mid(t + 500 ms) minus mid(t).
On a liquid perpetual the mid often does not move in 500 ms. Those points have no sign, and we drop them from both training and scoring. The hit rate is therefore the share of correct calls among grid points where the mid changed. Dropping is decided by the label alone, so both models are trained and scored on exactly the same set of points and the comparison between them is unaffected. The share dropped was 58.7% for BTC, 55.2% for ETH and 52.4% for SOL.
We also drop points where the book is locked or crossed at t or at t + 500 ms. This happens around fast moves and affects fewer than 1 in 50,000 points.
Feature sets
The baseline set is what we would expect a careful researcher to build from raw trades and L1. It has 22 features:
- Mid returns over trailing 100 ms, 500 ms, 1 s, 5 s and 30 s.
- Spread in ticks, L1 size imbalance and microprice minus mid.
- Signed trade volume and trade count over trailing 100 ms, 500 ms, 1 s and 5 s.
- Time since the last trade, time since the last mid change and 30 s realized variance.
The extended set is the baseline plus 19 columns drawn from the eight extended fields, read from the same pipeline that will populate the extended table:
| Field | Source | Columns | Variants used |
|---|---|---|---|
| OFI-ML | L2 | 3 | Top 10 levels, 100 ms, 500 ms and 1 s windows |
| QUEUE | L3 | 3 | Queue ahead at best bid and ask, order age at best |
| PART | L4 | 2 | Net flow of the 50 most active addresses, 1 s and 10 s |
| CXL/FILL | L3 | 2 | Top 3 levels per side, trailing 5 s |
| MARKOUT | trades | 2 | 1 s and 5 s, by aggressor side |
| RESIL | L2 | 3 | Refill time and refill size after the last sweep |
| LAMBDA | trades | 2 | Trailing 1 min and 5 min |
| VPIN | trades | 2 | 50 and 250 volume buckets |
Feature definitions were frozen on May 28, 2026, more than a month before the first test day. Nothing about the test period informed which columns were included.
Model
Gradient-boosted decision trees (LightGBM), one model per asset, binary log-loss objective. Hyperparameters: 800 trees, learning rate 0.03, 63 leaves, minimum 20,000 samples per leaf, 80% feature subsampling and 70% row subsampling per tree, fixed seeds. A point is called up when the predicted probability exceeds 0.5.
We tuned the hyperparameters on the baseline feature set only and then reused them unchanged for the extended set. If that choice favors either side, it favors the baseline.
Validation design
The test is walk-forward with no overlap between training and test data:
- Hyperparameter search ran entirely inside January to June. It used four expanding folds, each validating on one of March, April, May and June after training on all earlier months.
- Both final models were refit on the full January to June window with the chosen settings, then frozen.
- The frozen models were scored on July 1 to September 30. There was no refitting, threshold adjustment or feature change during the test period.
- The final 500 ms of June 30 were dropped from training so that no training label overlaps the test window.
Labels overlap heavily: with a 500 ms horizon sampled every 100 ms, adjacent labels share up to 400 ms of the same price path. The 105.9 million scored points are far from independent, so we do not report naive standard errors. Intervals come from a block bootstrap that resamples whole test days (92 blocks, 10,000 resamples).
Results
Pooled across assets, the baseline scored 51.6% and the extended model 54.9%. The extended model also improved on log loss (0.6921 to 0.6874) and on AUC (0.528 to 0.571), so the hit-rate gain does not come from a shift in the decision threshold. It beat the baseline on 89 of the 92 test days.
| Asset | Scored points | Unchanged, dropped | Baseline | + Extended | Diff. |
|---|---|---|---|---|---|
BTC-PERP | 32.7M | 58.7% | 51.2% | 54.3% | +3.1 |
ETH-PERP | 35.5M | 55.2% | 51.5% | 54.8% | +3.3 |
SOL-PERP | 37.7M | 52.4% | 52.1% | 55.6% | +3.5 |
| Pooled | 105.9M | 55.4% | 51.6% | 54.9% | +3.3 |
The ordering across assets is what we expected going in. BTC has the tightest book and the most competition at the top of it, and it shows the smallest gain. SOL has the thinnest book of the three and the largest. The pooled figure is weighted by scored points, which is why it sits slightly closer to SOL than a simple average would.
Both models lose a little after July, and the extended model loses slightly more (0.7 points from July to August, against 0.4 for the baseline). Part of that is staleness. In a variant that refits both models at the start of August and again at the start of September on an expanding window, the extended model scores 54.9% in August and 55.1% in September, against 51.5% and 51.6% for the refit baseline. We report the frozen-model numbers as the headline because they involve fewer choices.
Contribution of each field
We ran two ablations, both scored on the same test set. The first adds one field at a time to the baseline. The second removes one field at a time from the full extended set. Every run uses the same hyperparameters.
Multi-level order flow imbalance does the most work on its own, adding 1.6 points to the baseline. Removing it from the full set costs 0.9, less than its standalone gain, because QUEUE and RESIL carry some of the same information about where depth is thinning. The order-level fields come next. QUEUE and CXL/FILL depend on L3 reconstruction, and PART depends on Hyperliquid publishing user addresses, which most venues do not.
The add-one gains sum to 5.7 points and the drop-one losses to 2.5, against a combined gain of 3.3. Both gaps are expected when inputs overlap: the add-one view overstates each field's unique contribution and the drop-one view understates it. VPIN adds little at this horizon. It was designed to measure flow toxicity over minutes to hours, and we kept it in the study because it is part of the published set. We did not expect it to help at 500 ms.
Gain-based importance in the full BTC model points the same way. Baseline columns together account for 36% of total gain, OFI-ML for 21%, QUEUE for 12%, PART for 9%, and the remaining four fields for 22% between them.
Sensitivity checks
Horizon
We retrained both models at 250 ms and 1 s horizons with the same hyperparameters (not re-tuned) and the same train and test windows.
| Horizon | Unchanged, dropped | Baseline | + Extended | Diff. |
|---|---|---|---|---|
| 250 ms | 66.1% | 52.4% | 56.1% | +3.7 |
| 500 ms | 55.4% | 51.6% | 54.9% | +3.3 |
| 1 s | 44.0% | 51.1% | 53.6% | +2.5 |
The gain shrinks as the horizon lengthens, consistent with the fields describing the current state of the book and near-term flow. At 1 s, more of the outcome depends on events that have not yet happened at t.
Month and refit
Figure 1 shows the frozen models by month. The monthly gain was 3.5 points in July and 3.2 points in both August and September. With monthly refits the pooled test result is 51.6% against 55.1%.
Volatility
Splitting test points into terciles of trailing one-hour realized volatility, with tercile boundaries set on training data, gives gains of +2.7 (low), +3.3 (middle) and +3.7 (high). High-volatility periods also contribute more scored points, since fewer of them are dropped as unchanged.
Capture region
Rebuilding features and labels from the Ireland capture alone gives 51.5% against 54.6%. The small drop in the extended model comes mostly from the L3 fields, where Ireland sees more out-of-order arrivals across channels before sequence merging.
Costs, and what this does not show
The median absolute 500 ms mid move on scored points was 0.9 bp for BTC, 1.2 bp for ETH and 1.8 bp for SOL. Hyperliquid's base-tier taker fee is 4.5 bp per side. A strategy that crossed the spread on each signal would pay several times the typical move it is trying to predict, before any allowance for latency. We have not modelled P&L, fills or queue position here, and the result should not be read as a trading strategy. The fields look most useful as inputs to quoting and execution models, where the relevant cost is different and where a few points of directional accuracy change how long to wait and at what price.
Other limits worth stating plainly:
- One venue, three assets and nine months. July to September 2026 was a single broad regime, and the test period contains no large liquidation cascade.
- PART depends on Hyperliquid's on-chain addresses. On venues that publish no participant identity it will not exist, and the expected gain there is the full-set gain minus PART's contribution.
- We designed both the fields and the study. We froze definitions before the test period and report every run listed here, but a third party repeating the work would be a stronger test.
- Our clock is in Tokyo. A researcher capturing from elsewhere would see the same events in a slightly different order and should expect slightly different numbers, as the Ireland check suggests.
Reproducing the study
Features in this study were read from the extended-fields pipeline itself rather than recomputed in a notebook, so the inputs are the same rows that will be published. The run is defined by one configuration file holding the feature list, date boundaries, hyperparameters and seeds. Pre-registered partners in early access can request the evaluation package: that configuration, the per-day hit rates behind every number on this page, and the grid-point identifiers for the test set.
Once Phase 1 opens, the inputs are available through the SDK. Recorded gaps, which the study excludes, come from the gaps dataset.
from fdc import Client
fdc = Client(api_key="fdc_live_...")
# extended fields on the 100 ms grid, test period
ext = fdc.extended(venue="hyperliquid", symbol="BTC-PERP",
start="2026-07-01", end="2026-10-01").to_polars()
# L2 book for mids and labels
book = fdc.book(venue="hyperliquid", symbol="BTC-PERP", depth="L2",
start="2026-07-01", end="2026-10-01").to_polars()Definitions for every column are in the extended fields reference, and timestamp handling is described in timestamps and clocks. Questions about the method go to daniel@financedatacloud.com.
Test the fields on your own models.
Pre-registered partners get early access to Hyperliquid data with extended fields, the evaluation package for this study, and pre-sale pricing.
EARLY ACCESS · PRE-SALE PRICINGPre-register for early access → DANIEL GARCIA · CEO & FOUNDERdaniel@financedatacloud.com →