← Data catalog

Funding & volatility forecast (daily factors)

Free
gold_positioning_funding_factors_1d

daily scores, partitioned per (coin, month)

A cross-sectional funding-rate and volatility forecast. Each day, every coin is ranked on its forward funding and realized-volatility innovation — the deviation from its own trailing level, i.e. the part that persistence and current funding can't already tell you — plus the orthogonal, beta-stripped factor pack behind the ranking. Built for the markets Pendle Boros lists (BTC, ETH, SOL, HYPE) and the carry / options desks that trade them. Free on BTC, ETH, SOL and HYPE; Pro covers every coin, including HIP-3 markets.

A forecast feature, not a turnkey trade — you stack it into your own model, the way the validation study does. Pair it with current funding (gold_funding_1h) for the base rate; this adds the forecastable 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 numbers are the validation study's out-of-sample incremental IC, measured leave-coins-out so a coin's static funding level can't flatter it — strong and clean on the crypto majors; the HIP-3 commodity markets are not forecastable yet (short history) and are shipped as data, not as a validated signal.

+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

Forecast (percentile) Realized next day

Volatility-innovation forecast vs. realized · BTC

Forecast (percentile) Realized next day

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

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)

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.

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

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

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.