Funding & volatility forecast (daily factors)
Freegold_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
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
| 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. |