Funding & volatility forecast (daily factors)
Freegold_positioning_funding_factors_1d daily scores, partitioned per (coin, month)
gold_positioning_funding_factors_1d is a daily Hyperliquid funding-rate and volatility forecast: each coin is ranked on the part of tomorrow's funding and realized vol that current funding and simple persistence can't explain, plus the beta-stripped factor pack behind the ranking. Free on BTC, ETH, SOL and HYPE.
The free coins — BTC, ETH, SOL and HYPE — are the majors whose funding you can trade directly on Pendle Boros, so the forecast lines up one-to-one with a funding-rate position there. Pro extends the same scores to every coin, including HIP-3 markets.
What you'd use it for: Adding a forecastable funding- or volatility-surprise edge to your own cross-sectional model.
A forecast feature, not a turnkey trade — pair it with current funding (gold_funding_1h) for the base rate; this adds the surprise on top. The factor_* columns are the raw cross-sectional rank-scores; resid_* is the beta-residualized backbone; realized_* lets you score the forecast yourself. The headline IC numbers are out-of-sample and measured leave-coins-out, so a coin's static funding level can't flatter them — strong and clean on the crypto majors; the HIP-3 commodity markets aren't forecastable yet (short history) and ship as data, not as a validated signal.
Timing · day (1d)
`day` is the UTC day the forecast is FOR. The factor_* scores are built only from information available before `day` and predict it forward — treat them as knowable at the start of `day`. The realized_* columns are the CONTEMPORANEOUS outcomes measured ON `day` (the answer key) and are NOT knowable in advance: line factor_* up against a later day's realized_* to grade the forecast, and never use realized_* as a same-day signal. resid_* are the point-in-time feature backbone.
+0.089
funding-1d incremental IC
replicated 5/5 folds (t≈14.6)
+0.024
volatility-1d incremental IC
replicated out-of-window
≈0
forward-return IC (neg. control)
pure funding, no price/beta leak
Funding-innovation forecast vs. realized · BTC
Volatility-innovation forecast vs. realized · BTC
Within-day cross-sectional percentile (0 = lowest forecast / realized innovation across the universe, 100 = highest). When the solid forecast line is high, the dashed realized line tends to follow — that co-movement is the signal. Sample: BTC, 2026-03..2026-05.
Data dictionary
Forecast scores
window starting at timestamp| Column | Type | What it means |
|---|---|---|
day | timestamp[us] | The day the forecast is for (UTC midnight). How it's computed: UTC day (midnight) the factors are scored for. |
coin | string | Which market this row scores. HIP-3 markets carry a deployer prefix. How it's computed: HL coin symbol (HIP-3 prefixed, e.g. xyz:NVDA). |
factor_funding_innov_1d | float64 | Tomorrow's funding-surprise forecast, as a cross-sectional rank: how far above or below its own trend this coin's funding is likely to move. High means the model expects an unusually large funding move — the part you couldn't guess from today's rate. How it's computed: Ridge forecast factor for fwd_funding_1d_innov (rank-score; higher = larger forecast innovation). |
factor_funding_innov_7d | float64 | The same funding-surprise forecast over the next week instead of the next day. How it's computed: Ridge forecast factor for fwd_funding_7d_innov (rank-score; higher = larger forecast innovation). |
factor_rv_innov_1d | float64 | Tomorrow's volatility-surprise forecast, as a cross-sectional rank: which coins are set up to be more (or less) volatile than their recent norm. How it's computed: Ridge forecast factor for fwd_rv_1d_innov (rank-score; higher = larger forecast innovation). |
factor_rv_innov_7d | float64 | The same volatility-surprise forecast over the next week. How it's computed: Ridge forecast factor for fwd_rv_7d_innov (rank-score; higher = larger forecast innovation). |
Backbone factors — resid_<feature> (25 columns, beta/size-residualized rank-z)
snapshot · as of timestampThe cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score.
| Column | Type | What it means |
|---|---|---|
resid_account_ls_ratio nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of account_ls_ratio. |
resid_top10_long_share nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of top10_long_share. |
resid_top10_short_share nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of top10_short_share. |
resid_concentration_skew nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of concentration_skew. |
resid_hhi_gross nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of hhi_gross. |
resid_whale_long_account_share nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of whale_long_account_share. |
resid_whale_net_position nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of whale_net_position. |
resid_n_whale_accounts nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of n_whale_accounts. |
resid_d_open_interest_rel nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of d_open_interest_rel. |
resid_new_long_frac nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of new_long_frac. |
resid_new_short_frac nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of new_short_frac. |
resid_close_long_frac nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of close_long_frac. |
resid_close_short_frac nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of close_short_frac. |
resid_flip_l2s_frac nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of flip_l2s_frac. |
resid_flip_s2l_frac nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of flip_s2l_frac. |
resid_net_taker_open_rel nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of net_taker_open_rel. |
resid_oi_open_close_ratio nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of oi_open_close_ratio. |
resid_flow_vs_snapshot_resid nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of flow_vs_snapshot_resid. |
resid_log_oi nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of log_oi. |
resid_oi_z_30d nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of oi_z_30d. |
resid_funding_rate nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of funding_rate. |
resid_funding_annualized nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of funding_annualized. |
resid_funding_chg_7d nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of funding_chg_7d. |
resid_funding_vol_14d nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of funding_vol_14d. |
resid_cum_funding_30d nullable | float64 | The cleaned-up ingredients behind the forecast: each raw positioning, flow, or funding feature ranked across coins for the day and stripped of its price/size beta, so what's left is the coin-specific signal rather than 'big coins move together'. Nullable when a feature isn't available that day. Feed these into your own model if you want to build on the backbone directly rather than the packaged score. How it's computed: Beta/size-residualized, day-cross-sectional rank-z of cum_funding_30d. |
Realized innovations — to score the forecast yourself
measured over the period| Column | Type | What it means |
|---|---|---|
realized_funding_innov nullable | float64 | What the funding surprise actually turned out to be on this day. Line it up one day later against factor_funding_innov to grade the forecast on your own data. How it's computed: Realized funding innovation at day t (funding_rate − own 7d trailing). |
realized_rv_innov nullable | float64 | What the volatility surprise actually turned out to be — the answer key for the rv forecast. How it's computed: Realized RV innovation at day t (rv_day − own 7d trailing). |
Provenance
key / provenance| Column | Type | What it means |
|---|---|---|
model_version | string | Which frozen model version produced this row, so results are reproducible as the model is refit over time. How it's computed: Version of the frozen ridge model that produced this row (fit cutoff month). |
scored | boolean | True when this row carries a real forecast. The published coin set is fixed for the whole month, so every coin gets a row every day; on days a coin had no data or the cross-section was too thin to rank, the row is kept but marked false and the score columns are null — so you always see the same coins and can tell a genuine forecast from a gap. How it's computed: True if a forecast was computed for this (coin, day). False for a row padded to keep the frozen published universe × day grid dense when the coin had no data / the day's cross-section was too thin — the factor_*, resid_* and realized_* columns are then null. |