SPB Git

spb/wp47_uqo

Public
9.0 KB

# Methodology decisions (WP47)

ID Decision Rationale
D-01 Yield day = 15:30 ET (previous FRED date) → 15:30 ET (date t); minute m belongs to the first boundary ≥ ts + 1 min (returns.py). H.15 CMT yields are read near 15:30 ET; aligning futures returns on the same window removes timing error in the daily regression and makes intraday sums comparable to daily changes.
D-02 Returns are close-to-close log changes (%) of consecutive 1-minute bars of the most-traded contract of the session (18:00→17:00 ET; largest session volume), computed only within a session and within segments; a segment breaks at gaps > 5 min and at the 17:00–18:00 ET maintenance break; no return is computed across sessions or across contracts (03_returns.py, rebuilt 2026-11-09). Selecting the contract by session volume removes both the roll splice and the sparse weeks of the vendor's continuous series before expiries (which lost a third of the 08:30 releases in roll months since 2018); intraday analysis needs within-session returns only, so the overnight/roll return is never needed.
D-03 Roll handling: superseded by D-02 (one contract per session, 76 switches per root ≈ one per expiry; contract_switches in returns_diagnostics.json). The earlier rule (roll days from raw vs ratio-adjusted daily continuous series) remains in returns.py:roll_days for the SR3 series only (01b). The vendor continuous series is no longer used for the six roots.
D-04 Bounce filter: a pair of consecutive minute returns both > 0.25 % in absolute value, of opposite sign and netting to < 20 % of the first, is set to missing (03_returns.py). Removes isolated bad prints (0–47 pairs per contract) without touching genuine jumps.
D-05 Active-contract rule: a contract is active at minute m if it traded within the previous 15 minutes; active with no bar → zero return; inactive → NaN and the minute is dropped from the cross-section (06_intraday_factors.py). Resolves the missing-minute ambiguity flagged in the design review; prevents accumulated overnight moves in thin contracts from being released as artificial spikes.
D-06 Daily panel: a contract counts on a yield day only if it has ≥ 100 minute returns (MIN_MIN, lowered from 300 on 2026-11-09 because the raw continuous series of ZT/UB/TN are sparse on the days around rolls); a contract enters a quarter's regression only if it is present on ≥ 85 % of the training window's days (lowered from 95 %). Resulting sets: ZT ZF ZN US (2011Q1–2012Q4), + UB (2013Q1–2018Q4), + TN (2019Q1–). A 300/95 % rule excluded ZT, TN and UB and left three contracts; the relaxed rule keeps every contract once it has three years of history while still dropping days with unreliable daily returns.
D-07 λ = 0.7308 per year fixed (Diebold–Li; curvature loading maximal at 30 months); λ̂ = 0.49 reported as robustness only. Fixed λ keeps the factor map linear and avoids look-ahead in OOS weights.
D-08 Daily factors by OLS on the 11 CMT maturities (1m–30y) with ≥ 8 maturities available; GSW 1–30y and CMT ≥ 1y / ≥ 2y as alternatives. Pre-registered primary target; alternatives isolate the bill segment. The 2–30y fit is ill-conditioned and not used.
D-09 Mimicking weights: OLS of daily factor changes on daily futures returns, re-estimated each calendar quarter on the trailing 3 years, applied to the following quarter only; intercept estimated but not used at minute level. Strictly out-of-sample weights; a daily intercept has no minute-level meaning.
D-10 OOS fidelity = 1 − SSE / Σ(Δβ − mean)² of the intercept-free prediction, with the fitted slope of actual on predicted, by period and year. Pre-registered H1 metric.
D-11 Realized measures at 1, 5 and 30 minutes from consecutive k-minute bins within the yield day; 5 minutes is the main frequency for H4 and for the H5 target. Tick noise inflates 1-minute RV by 50–130 %; 5 minutes is the standard compromise.
D-12 Event windows [−5, +25) minutes (main), [−5, +15), [−5, +90); FOMC release time by rule (14:15 before April 2011; 12:30 on 2011–2012 press-conference meetings, 14:15 otherwise; 14:00 from 2013); CPI/EMP at 08:30; unscheduled FOMC actions flagged and excluded from scheduled statistics. Standard high-frequency windows; +90 covers the press conference.
D-13 Placebo: up to three non-event days per event within ± 200 days, same weekday where possible, same clock window; SD ratios with 2 000-draw i.i.d. bootstrap over events/placebos; shares as mean (bootstrap CI) and median. Replaces the uniform 30/1380 benchmark and the daily-block bootstrap criticized in the review.
D-14 Regimes: 2011-01-01–2015-12-15 (ZLB), 2015-12-16–2019-12-31, 2020–2021, 2022–2026. 2008–2010 has no OOS weights. First rate hike 2015-12-16; OOS weights start 2011Q1.
D-15 HAR on log 5-minute RV (daily, weekly, monthly means), target = log cumulative RV over t+1…t+h, h ∈ {1, 5, 22}; forecast = exp(fit + ½ residual variance); re-estimated monthly on an expanding window from 2016-01; training only uses targets fully observed before the forecast month. Pre-registered H5 with a log-normal bias correction; no look-ahead.
D-16 Benchmarks: GARCH(1,1) (constant mean, normal) re-estimated monthly on daily CMT factor changes (bp), forecast = sum of the h-step conditional variances iterated from the last observed day; 22-day rolling variance × h. Pre-registered daily-data benchmarks.
D-17 Diebold–Mariano on QLIKE and MSE with Bartlett HAC, bandwidth max(h−1, ⌊1.3 T^{1/2}⌋); Holm correction across the DM family in the tables. Overlapping multi-step losses; multiple comparisons.
D-18 ETF cross-check uses fixed approximate durations (SHY 1.9, IEI 4.4, IEF 7.6, TLH 11.0, TLT 17.0) and maturity points (1.9, 4.5, 8.5, 15, 25 years); missing minutes forward-filled within the day. An independent construction without any daily regression; approximations affect scale, not correlation.
D-19 Tick-noise benchmark assumes independent rounding noise of variance 2·tick²/12 per contract with current CME tick sizes. First-order check of whether 1-minute factor correlations are noise-driven.
D-20 Cumulated-intraday fidelity: R² and slope of the daily CMT factor change on Σ_m Δβ̂_t,m over every yield day with factors (all days, ≥ 600 and < 600 complete minutes, by period) in 06_intraday_factors.py → fidelity_cumulated_intraday.json. The cumulated minute series is the object the paper uses; the daily-regression fidelity (D-10) is not a test of it when minutes are dropped for inactivity (D-05).
D-21 Implied-yield fidelity: Δŷ(τ) = ΔL̂ + ΔŜ f₂(τ) + ΔĈ f₃(τ) from cum_d* in factors_daily_realized.csv against the FRED CMT change at τ ∈ {3m, 1y, 2y, 5y, 10y, 30y}, and L̂+Ŝ against the 1-month bill; computed on the laptop in 12_text_macros.py → implied_yield_fidelity.json. Shows which segment of the curve the futures identify (2–30y) and which they do not (bills, NS short rate); decides what is reported as a result.
D-22 Local projections (13_irf.py): shock = change in the implied 2-year yield over [−5, +25) min (bp); outcome = cumulated change of L, S, C, L+S, y2, y10 from −5 min to h ∈ {25, 60, 120, 240 min} (minute series) and h ∈ {0, 1, 2, 5, 10 yield days} (daily futures-based factor changes, the pre-window part of day 0 removed); OLS per horizon across scheduled events, HC0 SEs, 1 000-draw event bootstrap; events need a complete window and 10 subsequent yield days. Persistence vs reversal of announcement moves per basis point of the initial 2-year move; the 2-year is the maturity the futures identify best; coefficients are comparable across releases.
D-23 Five-minute VAR (13_irf.py): variables (ΔL+ΔS, ΔL, ΔC) in bp, US hours 08:00–16:00 ET, lags never cross days (stacked within-day regressions), lag order by BIC with p ≤ 6, generalized IRF and FEVD (Pesaran–Shin) at 12 steps (one hour), Diebold–Yilmaz total/from/to connectedness, by regime; bootstrap bands from resampling the residual covariance only (coefficient uncertainty negligible with n > 46 000). Within-hour cross-factor dynamics and partial reversals; the short-rate rotation reduces the L/S collinearity.
D-24 Volatility connectedness (13_irf.py): VAR on daily log RV (5-minute sampling) of L, S, C from 2011, lag order by BIC with p ≤ 5 (full sample), generalized FEVD at 10 days; rolling estimates with a 250-day window stepped every 5 days use VAR(2). Standard Diebold–Yilmaz design; a fixed low order keeps the rolling estimates stable.
D-25 Robustness checks quoted in the paper are computed, not asserted (04d_robustness_checks.py → robustness_checks.json): expanding-window weights; yield-day boundary at 15:00 and 16:00 ET; event shares with 5-minute denominators; FOMC release minute = largest aggregate return
Files · main
Menu

Theme