SPB Git

Repository Public Research preview

methodology_decisions.md 9.0 KB 30 lines markdown

1# Methodology decisions (WP47)23| ID | Decision | Rationale |4|---|---|---|5| 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. |6| 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. |7| 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. |8| 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. |9| 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. |10| 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. |11| 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. |12| 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. |13| 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. |14| 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. |15| 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. |16| 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. |17| 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. |18| 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. |19| 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. |20| 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. |21| 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. |22| 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. |23| 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. |24| 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). |25| 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. |26| 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. |27| 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. |28| 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. |29| 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| of ZF/ZN/US in 12:00–14:45 ET (volume peaks at the 15:00 settlement). | Integrity and econometric reports flagged unsupported sentences. |30
Files main
Menu

Theme