WP39: phase 0-2 scaffold — data audit, frozen design, PIT protocol, client, features, tests
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
76 changed files +6,968 −0
added
.env.example
+11 −0
@@ -0,0 +1,11 @@ | |||||
| 1 | +# WP39 UQO — environment-based authorization. Never commit a real .env. | ||||
| 2 | +# FinData OS (mandatory primary data source). Key file is read if FINDATA_API_KEY is unset. | ||||
| 3 | +FINDATA_BASE_URL=https://findata.spboucher.ai/api/v1 | ||||
| 4 | +FINDATA_API_KEY= | ||||
| 5 | +FINDATA_API_KEY_FILE=~/findata-secrets/api-key-wp39.txt | ||||
| 6 | +# Scratch cache for licensed raw extracts (outside the repository, never committed) | ||||
| 7 | +WP39_CACHE=~/wp39-cache | ||||
| 8 | +# SEC EDGAR fair-access User-Agent (public data, no secret) for ticker->CIK->SIC crosswalk | ||||
| 9 | +SEC_USER_AGENT="UQO WP39 research (mailto:simon-pierre.boucher@uqo.ca)" | ||||
| 10 | +# Set to 1 to run the live API contract tests | ||||
| 11 | +WP39_LIVE=0 | ||||
added
.gitignore
+35 −0
@@ -0,0 +1,35 @@ | |||||
| 1 | +# Raw & processed data — never committed (see data/raw/README.md for provenance) | ||||
| 2 | +data/raw/* | ||||
| 3 | +!data/raw/README.md | ||||
| 4 | +data/processed/* | ||||
| 5 | +!data/processed/.gitkeep | ||||
| 6 | + | ||||
| 7 | +# Python | ||||
| 8 | +__pycache__/ | ||||
| 9 | +*.pyc | ||||
| 10 | +.pytest_cache/ | ||||
| 11 | +.venv/ | ||||
| 12 | +*.egg-info/ | ||||
| 13 | + | ||||
| 14 | +# LaTeX build artifacts (paper/main.pdf IS committed) | ||||
| 15 | +paper/*.aux | ||||
| 16 | +paper/*.log | ||||
| 17 | +paper/*.out | ||||
| 18 | +paper/*.toc | ||||
| 19 | +paper/*.lof | ||||
| 20 | +paper/*.lot | ||||
| 21 | +paper/*.fls | ||||
| 22 | +paper/*.fdb_latexmk | ||||
| 23 | +paper/*.bbl | ||||
| 24 | +paper/*.blg | ||||
| 25 | +paper/*.spl | ||||
| 26 | +paper/*.synctex.gz | ||||
| 27 | +paper/*.run.xml | ||||
| 28 | +paper/*.bcf | ||||
| 29 | + | ||||
| 30 | +# Logs | ||||
| 31 | +logs/ | ||||
| 32 | +*.log | ||||
| 33 | + | ||||
| 34 | +# macOS | ||||
| 35 | +.DS_Store | ||||
added
CLAUDE.md
+43 −0
@@ -0,0 +1,43 @@ | |||||
| 1 | +# CLAUDE.md — UQO Research WP39 | ||||
| 2 | + | ||||
| 3 | +## THE INVISIBLE BALANCE SHEET | ||||
| 4 | +### Can Intraday Financial Markets Detect Corporate Deterioration Before Accounting Disclosures? | ||||
| 5 | + | ||||
| 6 | +**Project ID:** `wp39_uqo` · **Institution:** Université du Québec en Outaouais (UQO) · **PI:** Simon-Pierre Boucher | ||||
| 7 | +**Status:** research project built 2026-11-02 under the owner's specification (reproduced below in condensed form; the | ||||
| 8 | +owner's original brief is the authoritative text). All findings are hypotheses until reproducibly estimated. | ||||
| 9 | + | ||||
| 10 | +Owner instructions added during the build (2026-11-02): (1) the FinData **fundamentals API** is the accounting source and | ||||
| 11 | +must be used; (2) **minimise AI usage** — no LLM features, no neural/text models, no AI-generated statistics. | ||||
| 12 | + | ||||
| 13 | +## Non-negotiable execution rules | ||||
| 14 | +1. FinData OS (`https://findata.spboucher.ai/api/v1`) is the primary source of prices, volumes, earnings events and | ||||
| 15 | + fundamentals. No silent substitution; every exception is documented in `DATA_AUDIT.md` / `docs/API_INTEGRATION.md`. | ||||
| 16 | +2. Inspect before changing; preserve all other working papers; this repository is its own git repo. | ||||
| 17 | +3. Credentials from the protected store only (`~/findata-secrets/api-key-wp39.txt` on the node); never printed, never | ||||
| 18 | + in URLs, git, artifacts, notebooks, figures or manuscript. No destructive ingestion, no unapproved backfills. | ||||
| 19 | +4. FirstRate Data is privately licensed: no raw records in git, public endpoints, replication packages or logs. | ||||
| 20 | +5. Hypotheses, variable definitions, PIT rules, baselines, splits and significance plan are frozen in | ||||
| 21 | + `docs/RESEARCH_DESIGN.md` and `docs/PIT_PROTOCOL.md` before interpreting results. Prediction ≠ causation. | ||||
| 22 | +6. Every claim traces to a saved table/figure/log/test. No fabricated statistics or references. | ||||
| 23 | +7. Phases with gates; `PROGRESS.md`, `DECISIONS.md`, `DATA_AUDIT.md`, `LIMITATIONS.md` are kept current. | ||||
| 24 | +8. English everywhere; LaTeX article compiled with `latexmk` (`paper/`). | ||||
| 25 | + | ||||
| 26 | +## Where things are | ||||
| 27 | +| Item | Location | | ||||
| 28 | +|---|---| | ||||
| 29 | +| Design, PIT rules, novelty | `docs/RESEARCH_DESIGN.md`, `docs/PIT_PROTOCOL.md`, `docs/NOVELTY_MEMO.md` | | ||||
| 30 | +| Data audit, limitations, decisions, progress | root `*.md` files | | ||||
| 31 | +| Code | `src/wp39/` (client, provenance, calendar, instruments, PIT fundamentals, corporate actions, ingest, features, labels, samples, splits, models, inference, portfolio, robustness, figures, pipeline) | | ||||
| 32 | +| Pipeline | `scripts/00_…09_` in order; `scripts/01a_extract_node_tables.sh` runs on M3U96a | | ||||
| 33 | +| Tests | `tests/` (`pytest`; live API tests need `WP39_LIVE=1`) | | ||||
| 34 | +| Artifacts | `artifacts/manifests` (hashes, versions), `artifacts/evaluation`, `artifacts/logs`, `results/`, `figures/` | | ||||
| 35 | +| Paper | `paper/main.tex` + `sections/` + generated `tables/`, `figures/` | | ||||
| 36 | + | ||||
| 37 | +## How to run (compute node M3U96a, API on localhost) | ||||
| 38 | +```bash | ||||
| 39 | +rsync -a --exclude .venv --exclude artifacts/logs ~/Desktop/UQO/Recherche/Recherche-UQO/finance/invisible-balance-sheet/ M3U96a:~/wp39_uqo/ | ||||
| 40 | +ssh M3U96a 'cd ~/wp39_uqo && uv venv -p 3.12 .venv && uv pip install -e ".[dev]" && export FINDATA_BASE_URL=http://127.0.0.1:8600/api/v1 && \ | ||||
| 41 | + bash scripts/01a_extract_node_tables.sh && for s in 00 01 02 03 04 05 06 07 08; do .venv/bin/python scripts/${s}_*.py; done' | ||||
| 42 | +``` | ||||
| 43 | +Then `rsync` `results/ figures/ artifacts/ paper/tables paper/figures` back and `cd paper && make`. | ||||
added
DATA_AUDIT.md
+167 −0
@@ -0,0 +1,167 @@ | |||||
| 1 | +# DATA_AUDIT.md — WP39 `wp39_uqo` | ||||
| 2 | + | ||||
| 3 | +Phase 0 discovery and feasibility audit of the **FinData OS** API (`https://findata.spboucher.ai/api/v1`) as the primary | ||||
| 4 | +source for *The Invisible Balance Sheet*. All numbers below were measured on **2026-11-02** (America/Toronto) with the | ||||
| 5 | +owner's Claude Code key (admin scope, laptop) and then with a dedicated least-privilege key `wp39_uqo` | ||||
| 6 | +(scopes `read:market, read:fundamentals, query, export`; stored outside git in `~/findata-secrets/api-key-wp39.txt` on | ||||
| 7 | +M3U96a and `~/Desktop/Cluster/secrets/findata/api-key-wp39.txt` on the laptop, mode 600). No credential appears in | ||||
| 8 | +this repository, in logs or in artifacts. Probe transcripts: `artifacts/logs/phase0_probe.json` (produced by | ||||
| 9 | +`scripts/00_probe_findata.py`). | ||||
| 10 | + | ||||
| 11 | +## 0. Viability conclusion | ||||
| 12 | + | ||||
| 13 | +**YES — viable, with two structural caveats that shape the paper.** | ||||
| 14 | + | ||||
| 15 | +1. A licensed, point-in-time usable cohort exists: **5,451 US-listed entities** with quarterly fundamentals | ||||
| 16 | + (**67 metrics**, `filing_date` 2012-01-03 → 2026-10-30, median 45 quarterly periods per firm), **373,326 earnings-release | ||||
| 17 | + events** with release date and (for 65 %) before-open/after-close timing, and **6.70 billion raw 1-minute bars** for | ||||
| 18 | + 16,195 stock symbols (2000-01-03 → 2026-10-30) including 8,069 `-DELISTED` symbols. Exports of 1-minute history are | ||||
| 19 | + fast (≈ 1 s per symbol-decade, see §6). | ||||
| 20 | +2. **Caveat A — survivorship in fundamentals, not in prices.** The fundamentals/earnings tables contain **zero delisted | ||||
| 21 | + entities** (ingestion ran for *active* tickers only). Minute bars do cover delisted names, so the price side is | ||||
| 22 | + survivorship-free, but the accounting panel is conditioned on being listed on 2026-11-01. The vendor does serve | ||||
| 23 | + fundamentals for at least some delisted tickers (probe: `FMD` → HTTP 200 with data; `CWZ` → 404), so a scoped | ||||
| 24 | + delisted-fundamentals backfill is *possible* but requires owner approval and a capacity plan (not run; see §8). | ||||
| 25 | +3. **Caveat B — PIT is a proxy.** `available_at = filing_date + 1 day` is a policy, `revision_id = 1` for every fact | ||||
| 26 | + (`observed_at` = first ingestion, 2026-11-01/02). Values are the vendor's *current* history, so restatements that | ||||
| 27 | + happened before ingestion are invisible. The design therefore (i) uses only prior-quarter fundamentals as inputs, | ||||
| 28 | + (ii) uses the **earnings-release date** (not the filing date) as the reveal date, and (iii) reserves a stringent | ||||
| 29 | + specification using SEC-filing-level reconstruction for a subset (Phase 5, conditional on time). | ||||
| 30 | + | ||||
| 31 | +## 1. API contract — documented vs observed | ||||
| 32 | + | ||||
| 33 | +| Purpose | Route (observed in `openapi.json`, OpenAPI 3.1.0, API 1.0.0) | Observed behaviour | | ||||
| 34 | +|---|---|---| | ||||
| 35 | +| Datasets | `GET /catalog/datasets` | 64 datasets; 62 `active`, `fundamentals.sec_companyfacts` = `pending_configuration`, `market_ticks` = `unsupported` | | ||||
| 36 | +| Dataset detail | `GET /catalog/datasets/{id}` | version, `license_class = frd-private` | | ||||
| 37 | +| Bars | `GET /market/bars` | `interval ∈ {1m, 5m, 1d}` only (no 30m/1h on REST); `adjustment ∈ {raw, split, split_div}`; `limit ≤ 10 000`; `format ∈ {json, arrow, csv}`; `version` pin | | ||||
| 38 | +| Bars schema | `GET /catalog/schema/bars` | schema v1, `timestamp_convention = bar_open`, `timezone_storage = UTC`, 20 fields (see §3) | | ||||
| 39 | +| Fundamentals | `GET /fundamentals/{entity}` | `as_of`, `metrics`, `period_type ∈ {q,a}`, `include_superseded`, **`limit ≤ 20 000`** (default 2 000) | | ||||
| 40 | +| Fundamental periods | `GET /fundamentals/{entity}/periods` | one row per fiscal period with `filing_date`, `available_at`, `max_revision`, `restated` | | ||||
| 41 | +| SQL | `POST /query` | one read-only statement, `max_rows ≤ 100 000`, 30 s; views = dataset ids with `.`→`_` | | ||||
| 42 | +| Exports | `POST /exports` → `GET /exports/{id}` → `/download` | body `{dataset_id, symbols ≤ 500, start, end, adjustment, format}`; **range ≤ 12 years per request (HTTP 413 otherwise)**; Parquet with schema metadata and pinned `X-Dataset-Version` | | ||||
| 43 | +| Coverage | `GET /coverage`, `/coverage/symbols` (`limit ≤ 5 000`, cursor), `/coverage/heatmap` | per-session bar counts vs `expected_bars` (391 regular) | | ||||
| 44 | +| Instruments | `GET /instruments`, `/instruments/{symbol}` | status `active`/`delisted`, first/last date | | ||||
| 45 | +| Quality | `GET /quality`, `/quality/anomalies` | row-level flags (`price_jump`, `outside_session`, …) | | ||||
| 46 | +| **Earnings events** | **no route** | dataset `fundamentals.earnings` is listed (0 rows reported) but rows live in Postgres `earnings_events` → read-only extraction on the node (documented exception, §7) | | ||||
| 47 | +| Corporate actions | **no route** | Postgres `corporate_actions`: 6,131 splits (2000-01-03 → 2026-10-15), 243,209 cash dividends; applied at query time via `adjustment=` | | ||||
| 48 | + | ||||
| 49 | +Reconciliation notes: the catalog reports `row_count = 0` for Postgres-backed datasets (`fundamentals.*`, `corporate_actions`, | ||||
| 50 | +`reference.instruments`); that is a catalog limitation, not an absence of data. The REST `interval` enum is narrower than the | ||||
| 51 | +lake (30m/1h exist only as vendor-adjusted datasets); WP39 rebuilds 5m/30m/1d bars **from the raw 1m export** so that every | ||||
| 52 | +frequency shares one source and one adjustment path. | ||||
| 53 | + | ||||
| 54 | +## 2. Market bars — coverage | ||||
| 55 | + | ||||
| 56 | +Counts of distinct stock symbols with at least one bar on a mid-June session (SQL playground, `session_date =` predicate): | ||||
| 57 | + | ||||
| 58 | +| Session | 1m symbols | 1m bars | 1d symbols | of which `-DELISTED` in 1d | | ||||
| 59 | +|---|---:|---:|---:|---:| | ||||
| 60 | +| 2001-06-15 | — | — | 1,088 | 0 | | ||||
| 61 | +| 2005-06-15 | 3,498 (340,665 bars delisted) | 631,260 | 1,504 | 0 | | ||||
| 62 | +| 2010-06-15 | — | — | 2,309 | 0 | | ||||
| 63 | +| 2015-06-15 | 6,489 | 1,207,920 | 2,985 | 0 | | ||||
| 64 | +| 2020-06-15 | — | — | 4,144 | 0 | | ||||
| 65 | +| 2025-06-16 | 6,918 | 1,317,343 | 6,485 | 0 | | ||||
| 66 | + | ||||
| 67 | +Finding: the vendor **1d dataset is incomplete** relative to the 1m dataset (about half the symbols in 2005–2015 and no | ||||
| 68 | +delisted names). Decision D-003: daily bars are *derived* from the 1m export (regular session 09:30–16:00 ET) — never taken | ||||
| 69 | +from `market_bars.stock.1d.raw`. Delisted symbols are present in the 1m lake (e.g. `AA.B-DELISTED` 531 sessions | ||||
| 70 | +2014–2016; `CWZ-DELISTED` 2000–2014). | ||||
| 71 | + | ||||
| 72 | +Bar conventions verified on `XOM` and `SPY` exports: timestamps are bar **open** in UTC (`2012-01-03 09:01Z` = 04:01 ET), | ||||
| 73 | +extended hours 04:00–19:59 ET are present, zero-volume minutes are absent (bar counts per session 405–798 vs 391 expected | ||||
| 74 | +regular bars), `quality_flags` list is empty on normal rows, `revision_id = 1`. | ||||
| 75 | + | ||||
| 76 | +## 3. Bars schema (Arrow, schema v1) | ||||
| 77 | + | ||||
| 78 | +`instrument_id, symbol_as_reported, venue (null), asset_class, interval, timestamp_utc (timestamp[us, UTC], bar open), | ||||
| 79 | +session_date (date32, exchange tz), open, high, low, close, volume (double), currency, trade_count (int32?, derived only), | ||||
| 80 | +vwap (double?, derived only), adjustment_type, source_id, ingested_at, quality_flags (list<string>), revision_id (int32)`. | ||||
| 81 | +Parquet exports carry metadata `findata.schema = bars`, `findata.schema_version = 1`, `findata.timestamp_convention = bar_open`. | ||||
| 82 | + | ||||
| 83 | +## 4. Fundamentals — coverage and PIT fields | ||||
| 84 | + | ||||
| 85 | +- Entities: **5,451** (`frd:<TICKER>`, `security_id = firstrate:stock:<TICKER>`, none delisted, none with `security_id` null). | ||||
| 86 | +- Metrics observed per period: **67** (the vendor documents 76; 9 are never populated in the API output). Names: | ||||
| 87 | + `acc_oci, assets_c, assets_nc, assets_tot, capex, cash, cash_business_acq, cash_change, cash_debt_sec, cash_div, | ||||
| 88 | + cash_equity, cash_fin, cash_inv, cash_inv_acq, cash_op, cogs, cos_inc, debt, debt_c, debt_nc, def_rev, depr, dps, ebit, | ||||
| 89 | + ebitda, ebt, eps, eps_d, equity, fx_impact_cash, gm, gp, intangibles, interest_exp, intr_cover, inv_c, inv_nc, inventory, | ||||
| 90 | + investments, liab_c, liab_nc, liab_tot, net_inc, net_inc_com, net_inc_non_control, net_loss_discontinued, om, op_ex, | ||||
| 91 | + op_inc, payables, ppe, pref_divs, receivables, research_dev, ret_earnings, rev, roa, roe, roic, sgna, share_comp, shares, | ||||
| 92 | + shares_av, shares_av_diluted, tax_asset, tax_expense, tax_liability`. | ||||
| 93 | +- Quarterly `rev` facts by fiscal year (entities / facts): 2011: 1,798 / 1,812 · 2012: 2,461 / 8,725 · 2013: 2,623 / 9,868 · | ||||
| 94 | + 2014: 2,771 / 10,560 · 2015: 2,916 / 11,145 · 2016: 3,076 / 11,656 · 2017: 3,276 / 12,340 · 2018: 3,505 / 13,209 · | ||||
| 95 | + 2019: 3,763 / 14,034 · 2020: 4,309 / 15,488 · 2021: 4,663 / 17,458 · 2022: 4,851 / 18,289 · 2023: 5,043 / 18,904 · | ||||
| 96 | + 2024: 5,244 / 19,467 · 2025: 5,370 / 19,625 · 2026: 4,928 / 10,915. `filing_date` is never null (no `pit_fallback`). | ||||
| 97 | +- Firms by number of quarterly periods: ≥ 8: 5,018 · ≥ 20: 4,331 · ≥ 40: 2,891. First quarter year: 2011: 2,141 · | ||||
| 98 | + 2012: 317 · 2013–2019: 148–256 per year · 2020: 551 · 2021: 353 · 2022–2025: 164–215 per year. | ||||
| 99 | +- Filing lag (filing_date − fiscal_period_end, quarterly): p10 = 30 d, median = 40 d, p90 = 77 d. | ||||
| 100 | +- Q4 values are genuine quarterly flows (AAPL FY2019 revenue 260.17 bn = 84.31 + 58.02 + 53.81 + 64.04 bn). | ||||
| 101 | +- PIT fields per fact: `filing_date`, `published_at` (null), `available_at = filing_date + 1 d 00:00 ET`, `observed_at` | ||||
| 102 | + (= 2026-11-01 18:24 ET for the first ingestion), `revision_id = 1`, `restatement_flag = false`, `superseded_at = null`. | ||||
| 103 | + The API `as_of` semantics (`available_at ≤ as_of` and (`revision_id = 1` or `observed_at ≤ as_of`)) were exercised: | ||||
| 104 | + AAPL `as_of = 2020-01-01` returns 2,000 facts (limit) and reports `facts_hidden_by_as_of = 2211`. | ||||
| 105 | +- Entity master: `cik`, `sector`, `industry` are **null for all 5,451 entities** → external SEC crosswalk needed (§7). | ||||
| 106 | + | ||||
| 107 | +## 5. Earnings-release events (reveal dates) | ||||
| 108 | + | ||||
| 109 | +Postgres `earnings_events` (`entity_id, event_date, eps_estimate, eps_reported, release_time, source_id, observed_at`): | ||||
| 110 | +373,326 rows, 5,451 entities, 2000-01-01 → 2027-04-29, one row per (entity, date). `release_time`: `after_close` 124,832 · | ||||
| 111 | +`before_open` 120,586 · null 127,908. For 2012–2024 the null share is 35–36 %; `eps_estimate` is null for 24–27 % of | ||||
| 112 | +events (vendor estimate; vintage unknown → exploratory only). Row counts for 2025–2026 are inflated by forward-dated | ||||
| 113 | +placeholders (2026: 35,361 events), which are dropped at the sample end (2026-10-30). | ||||
| 114 | + | ||||
| 115 | +Matching quarterly filings to the first release event in `[period_end, filing_date + 10 d]` (213,954 filings 2012→): | ||||
| 116 | +96.3 % matched; 1,493 (0.7 %) have `filing_date < event_date`; 16,868 (7.9 %) have a lag > 30 d (likely mismatches or | ||||
| 117 | +late filers); median `filing_date − event_date` = **1 day**. Rule (PIT_PROTOCOL §3): reveal date `A_q` = matched release | ||||
| 118 | +date; a firm-quarter is **excluded** when no release is matched, when `filing_date < event_date`, or when the lag exceeds | ||||
| 119 | +30 days; the prediction cutoff always satisfies `c < min(A_q, F_q)` in trading days. | ||||
| 120 | + | ||||
| 121 | +## 6. Throughput and capacity (measured on M3U96a, API on localhost) | ||||
| 122 | + | ||||
| 123 | +| Operation | Measured | | ||||
| 124 | +|---|---| | ||||
| 125 | +| Export 1m raw, 1 symbol, 2012-01-01→2019-12-31 (`XOM`) | ready in 1.0 s, 859,354 rows, 13.6 MB Parquet, dataset version 17375 | | ||||
| 126 | +| Export 1m raw, 1 symbol, 2020-01-01→2026-10-30 | ready in 1.0 s, 884,983 rows, 15.4 MB | | ||||
| 127 | +| Full-range export (2012→2026, 14.8 years) | **HTTP 413** — limit 12 years per request → two requests per symbol | | ||||
| 128 | +| SQL cross-section (`session_date =` on 1m) | ≈ 3 s | | ||||
| 129 | +| Coverage per symbol (`/coverage/symbols`) | ms, cursor-paged | | ||||
| 130 | +| Fundamentals, one entity, all quarterly facts | one call (≤ 20 000 rows) | | ||||
| 131 | + | ||||
| 132 | +Capacity model for the main sample (≈ 4,300 firms with ≥ 8 quarters and 1m coverage): 2 exports × ~1.5 s ≈ 3.6 h of | ||||
| 133 | +export wall-time (sequential; 4 concurrent streams bring it under 1 h), ≈ 30 MB raw Parquet per firm (≈ 130 GB if kept). | ||||
| 134 | +Decision D-004: raw extracts are processed **streaming** (export → daily feature rows at 1m/5m/30m/1d → delete raw file, | ||||
| 135 | +keep SHA-256 + row count in the manifest), so steady-state scratch usage stays below 5 GB. The storage node M3U96a | ||||
| 136 | +(28 cores, 96 GB RAM, 319 GB free on the internal SSD, hard floor 60 GB for FinData) hosts the computation; the feature | ||||
| 137 | +panel (≈ 4,300 firms × ~3,700 sessions × 4 frequencies) is < 2 GB. | ||||
| 138 | + | ||||
| 139 | +## 7. External sources and exceptions | ||||
| 140 | + | ||||
| 141 | +| Need | Source | Status | Why not FinData | | ||||
| 142 | +|---|---|---|---| | ||||
| 143 | +| Reveal dates / release timing | FinData Postgres `earnings_events` (read-only `psql` on M3U96a) | available | not exposed by the API (gap logged for the FinData backlog) | | ||||
| 144 | +| CIK, SIC industry | SEC `company_tickers.json` (10,423 rows) + `submissions/CIK##########.json` (`sic`, `sicDescription`, `exchanges`, `formerNames`) | verified reachable (fair-access UA) | entity master has no CIK/sector | | ||||
| 145 | +| Daily factors (H5 only) | Kenneth French library, FF5 2×3 daily + momentum daily | verified (HTTP 200, updated 2026-10-26) | not a FinData dataset | | ||||
| 146 | +| Analyst consensus | vendor `eps_estimate` in `earnings_events` (24–27 % missing, vintage unknown) | exploratory only | no point-in-time consensus history available | | ||||
| 147 | +| TAQ / quotes / order flow | none | **not available** (vendor supplies bars only) | bar-based proxies are *never* called order flow, spreads or informed trading | | ||||
| 148 | + | ||||
| 149 | +## 8. Gaps, risks and recommendations to the owner | ||||
| 150 | + | ||||
| 151 | +1. **Delisted fundamentals backfill (recommended, not run).** A one-off `fundamentals` job for the 8,069 `-DELISTED` | ||||
| 152 | + tickers (vendor returns data for at least part of them) would remove the survivorship conditioning of the accounting | ||||
| 153 | + panel. Estimated cost: ≤ 8,069 vendor calls (1 req/s policy ≈ 2.3 h), a few hundred MB in Postgres. Requires: owner | ||||
| 154 | + approval, `findata ingest fundamentals --delisted` (does not exist yet; connector change on M3U96a `~/apps/findata`). | ||||
| 155 | +2. **Earnings events API route** — expose `fundamentals.earnings` through `/api/v1/earnings/{entity}` so that WP39 (and | ||||
| 156 | + future projects) stop reading Postgres directly. | ||||
| 157 | +3. **SEC EDGAR connector** (`fundamentals.sec_companyfacts`, pending a User-Agent setting) would give filing-level | ||||
| 158 | + as-originally-reported values for the stringent PIT specification. | ||||
| 159 | +4. API bug found: `POST /admin/keys` returns HTTP 500 (`api_keys_user_id_fkey` violation) when the caller is an API key | ||||
| 160 | + whose `user_id` is not in `users`; the CLI `findata create-key` works. Logged for the FinData backlog, not fixed here. | ||||
| 161 | + | ||||
| 162 | +## 9. License and privacy constraints applied | ||||
| 163 | + | ||||
| 164 | +FirstRate Data: perpetual private use, research and derived statistics allowed with attribution, **no redistribution of raw | ||||
| 165 | +records**. Consequently: no raw bars or fundamentals are committed; `data/raw` stays empty; the replication package ships | ||||
| 166 | +code, manifests (hashes, versions, counts), derived aggregate tables and figures only; the manuscript attributes FirstRate | ||||
| 167 | +Data via FinData OS. SEC and Kenneth French data are public. | ||||
added
DECISIONS.md
+14 −0
@@ -0,0 +1,14 @@ | |||||
| 1 | +# DECISIONS.md — dated design and engineering decisions (WP39) | ||||
| 2 | + | ||||
| 3 | +| ID | Date (ET) | Decision | Reason | Consequence | | ||||
| 4 | +|---|---|---|---|---| | ||||
| 5 | +| D-001 | 2026-11-02 13:00 | Compute on **M3U96a** (FinData host) with a dedicated least-privilege key `wp39_uqo`; repository lives in the UQO Research workspace (`Recherche-UQO/finance/invisible-balance-sheet`, dir name follows the series convention; project id `wp39_uqo`) and is rsync'd to `M3U96a:~/wp39_uqo` for runs | API on localhost, lake co-located, 28 cores / 96 GB; secrets never leave `~/findata-secrets` / `~/Desktop/Cluster/secrets` | results and manifests synced back; raw cache stays on the node | | ||||
| 6 | +| D-002 | 2026-11-02 13:05 | **Earnings release dates** (`earnings_events.event_date`) define the reveal date `A_q`; the filing date `F_q` defines structured-fact availability (`available_at = F_q + 1`) | press releases precede 10-Q filings by a median of 1 day; cutoffs must precede the *first* public reveal | cutoff rule `c < min(A_q, F_q)`; release rows read from Postgres (no API route) — documented exception | | ||||
| 7 | +| D-003 | 2026-11-02 13:10 | Daily bars are **rebuilt from the 1-minute raw export** (regular session), not taken from `market_bars.stock.1d.raw` | vendor 1d dataset covers about half the symbols before 2016 and no delisted names | one source, one adjustment path for all four frequencies | | ||||
| 8 | +| D-004 | 2026-11-02 13:30 | Streaming feature extraction (export → features → delete raw Parquet; manifest keeps SHA-256) | disk budget on the FinData host (hard floor 60 GB free) | re-runs re-export from the pinned dataset version | | ||||
| 9 | +| D-005 | 2026-11-02 14:00 | Universe = all FinData fundamentals entities (survivor-conditioned); delisted-fundamentals backfill **proposed, not run** | vendor ingestion covered active tickers only; backfill needs owner approval + capacity plan (rule 3 of the brief) | survivorship caveat stated in abstract, data section, limitations; price side is survivorship-free | | ||||
| 10 | +| D-006 | 2026-11-02 14:05 | **No neural (B7) nor text/multimodal (B8) models; no LLM anywhere in the pipeline** | owner instruction received mid-session on 2026-11-02 ("limite le plus possible l'utilisation AI"); also keeps the frequency comparison about information sets rather than capacity | ladder is B0–B6; LightGBM provides the nonlinear benchmark with equal budgets | | ||||
| 11 | +| D-007 | 2026-11-02 14:10 | Primary target = adverse **operating-income** surprise vs a seasonal random walk with drift, scaled by total assets, threshold −0.5 % | no point-in-time consensus exists in FinData; operating income is less affected by one-off items than net income; Foster (1977) model is the classic honest expectation | consensus-based miss (vendor `eps_estimate`) is exploratory only | | ||||
| 12 | +| D-008 | 2026-11-02 14:15 | Frequency sets B3/B4/B5 use **identical feature families** (one column per family) computed from bars of 30 m / 5 m / 1 m | compare information sets, not dimensionality | a supplementary "all frequencies" model is run in Phase 4 | | ||||
| 13 | +| D-009 | 2026-11-02 14:20 | Literature verified with **Crossref metadata** (no AI summarisation); references without a verifiable DOI are cited without one (Grossman–Stiglitz 1980, Holm 1979) | rule 7 of the brief (no fabricated references) | `artifacts/logs/crossref_batch*.json` are the evidence | | ||||
| 14 | +| D-010 | 2026-11-02 14:30 | Phase gates that require "owner approval" are recorded as **self-approved under the autonomous mandate** with the memo attached; the owner can veto any of them before Phase 6 | the owner asked for the whole project to be built in one autonomous session and is not available mid-task | each gate entry in PROGRESS.md names the memo and the date | | ||||
added
LIMITATIONS.md
+31 −0
@@ -0,0 +1,31 @@ | |||||
| 1 | +# LIMITATIONS.md — living list (WP39) | ||||
| 2 | + | ||||
| 3 | +## Data | ||||
| 4 | +- **Survivor-conditioned accounting panel.** Fundamentals and earnings-release rows exist only for the 5,451 tickers active | ||||
| 5 | + on 2026-11-01. Firms that delisted during 2012–2026 (including those that deteriorated and failed) are absent from the | ||||
| 6 | + firm-quarter sample, although their minute bars exist. Base rates of severe deterioration are therefore understated and | ||||
| 7 | + H3/H5 effects for the most vulnerable firms are not identified. A delisted-fundamentals backfill is proposed (DATA_AUDIT §8). | ||||
| 8 | +- **PIT is a documented proxy.** `available_at = filing_date + 1 day` is a policy; all facts are `revision_id = 1` observed | ||||
| 9 | + on 2026-11-01/02, i.e. the vendor's current (possibly restated) history. Original-as-reported values are not available. | ||||
| 10 | + Inputs use prior quarters only, so restatements affect the *measurement of inputs and targets*, not the direction of time. | ||||
| 11 | +- **OHLCV bars, not ticks.** No quotes, no trades, no order flow. Bar-based statistics (down-bar volume share, bar | ||||
| 12 | + autocorrelation) are descriptive proxies and are never interpreted as informed trading or spreads. | ||||
| 13 | +- Vendor merges ticker changes under the latest ticker (fully since 2022); CIK/SIC come from the SEC's *current* | ||||
| 14 | + `company_tickers.json`, so historical ticker reuse before 2022 is only partially auditable (`formerNames` check). | ||||
| 15 | +- `release_time` is unknown for ~35 % of release events; we never use release-day bars, so this affects only the | ||||
| 16 | + descriptive timing exhibit. | ||||
| 17 | +- The vendor `eps_estimate` has an unknown vintage and is missing for a quarter of events → exploratory only. | ||||
| 18 | +- 1-minute coverage is thinner before ~2005 and for illiquid names; the sample starts in 2012 and requires ≥ 100 regular | ||||
| 19 | + bars per session, which excludes the most illiquid firm-days (a documented selection on liquidity). | ||||
| 20 | + | ||||
| 21 | +## Design | ||||
| 22 | +- The event-time cohort conditions on the *existence* of a release in the next 65 trading days; a hypothetical observer | ||||
| 23 | + knows the approximate schedule but not the exact date. The fixed-calendar design is reported as the robustness check. | ||||
| 24 | +- Prediction, not causation: a positive H1 shows that bar-level information is statistically informative; it does not | ||||
| 25 | + establish who traded on private information. | ||||
| 26 | +- No B7/B8 (neural/text) models by owner instruction; the frequency comparison is therefore within linear and | ||||
| 27 | + gradient-boosted families only. | ||||
| 28 | + | ||||
| 29 | +## To be completed as results arrive | ||||
| 30 | +- (Phase 3) achieved sample sizes, base rates, coverage gaps by year/size. | ||||
| 31 | +- (Phase 5) which placebo/stress tests failed or were inconclusive. | ||||
added
PROGRESS.md
+22 −0
@@ -0,0 +1,22 @@ | |||||
| 1 | +# PROGRESS.md — WP39 `wp39_uqo` | ||||
| 2 | + | ||||
| 3 | +## Phase 0 — Discovery and feasibility (2026-11-02) — GATE PASSED | ||||
| 4 | +- Inspected the UQO Research workspace (`Recherche-UQO/`, 39 papers, harmonisation standard); no `wp39` existed; created | ||||
| 5 | + `finance/invisible-balance-sheet/` from the template; git initialised on a dedicated repository (no other paper touched). | ||||
| 6 | +- Probed FinData: `/health` ok, 64 datasets, OpenAPI 3.1 (45 routes), bars schema v1, fundamentals (67 metrics, 5,451 | ||||
| 7 | + entities, 2012→2026), earnings events (Postgres), coverage endpoints, export throughput (≈ 1 s per symbol-decade; | ||||
| 8 | + 12-year cap per request). Created least-privilege key `wp39_uqo`. | ||||
| 9 | +- Verified external public sources: SEC `company_tickers.json` + `submissions` (CIK/SIC), Kenneth French daily factors. | ||||
| 10 | +- Verified 94 bibliography entries on Crossref; wrote `docs/NOVELTY_MEMO.md`, `literature/RELATED_WORK_MATRIX.csv`. | ||||
| 11 | +- Outputs: `DATA_AUDIT.md` (viability = YES with survivorship + PIT caveats), `configs/*.yaml`, `docs/API_INTEGRATION.md`, | ||||
| 12 | + `docs/COMPUTE_BUDGET.md`, `docs/PIT_PROTOCOL.md`, `docs/RESEARCH_DESIGN.md` (frozen), `DECISIONS.md` D-001…D-010. | ||||
| 13 | +- Owner instructions received during the session: (1) the fundamentals API must be used — it is the accounting source; | ||||
| 14 | + (2) minimise AI usage — no LLM features, no neural models (D-006). | ||||
| 15 | +- Blockers: none. Next safe step: Phase 1 gate memo, then code + tests (Phase 2). | ||||
| 16 | + | ||||
| 17 | +## Phase 1 — Research design and novelty — GATE (self-approved under the autonomous mandate, D-010) | ||||
| 18 | +- `docs/RESEARCH_DESIGN.md` frozen 2026-11-02 14:40 ET; hypotheses H1–H5 with null/alternative, primary endpoint (H1, | ||||
| 19 | + h = 20, log loss, binary adverse operating-income surprise), decision rules, splits, inference, power plan. | ||||
| 20 | +- Owner review pending; nothing in Phases 2–5 depends on test-period data until the Phase 3 gate. | ||||
| 21 | + | ||||
| 22 | +## Phase 2 — Data acquisition and verification — IN PROGRESS | ||||
added
configs/data_contract.yaml
+40 −0
@@ -0,0 +1,40 @@ | |||||
| 1 | +# Data contract — verified against the live FinData OS API on 2026-11-02 (see DATA_AUDIT.md) | ||||
| 2 | +findata: | ||||
| 3 | + base_url: https://findata.spboucher.ai/api/v1 | ||||
| 4 | + openapi: /openapi.json | ||||
| 5 | + datasets: | ||||
| 6 | + bars_1m: market_bars.stock.1m.raw # raw, bar-open timestamps in UTC, 04:00-20:00 ET, zero-volume minutes absent | ||||
| 7 | + bars_1m_etf: market_bars.etf.1m.raw # SPY used as market proxy | ||||
| 8 | + bars_1d: market_bars.stock.1d.raw # INCOMPLETE vs 1m (fewer symbols) -> daily bars are rebuilt from 1m | ||||
| 9 | + fundamentals: fundamentals.financials # Postgres-backed; GET /fundamentals/{entity} | ||||
| 10 | + earnings: fundamentals.earnings # Postgres table earnings_events (no API route yet) -> documented exception | ||||
| 11 | + limits: | ||||
| 12 | + bars_1m_days_per_call: 31 | ||||
| 13 | + rows_per_page: 10000 | ||||
| 14 | + export_years_per_request: 12 | ||||
| 15 | + export_symbols_per_request: 500 | ||||
| 16 | + query_timeout_s: 30 | ||||
| 17 | + query_max_rows: 100000 | ||||
| 18 | + rate_limit_per_min: 600 | ||||
| 19 | + fundamentals_limit_max: 20000 | ||||
| 20 | + bars_schema_version: 1 | ||||
| 21 | + timestamp_convention: bar_open | ||||
| 22 | + timezone_storage: UTC | ||||
| 23 | + exchange_tz: America/New_York | ||||
| 24 | + regular_session: ["09:30", "16:00"] # the 16:00 bar is the closing print | ||||
| 25 | + extended_session: ["04:00", "20:00"] | ||||
| 26 | + license_class: frd-private | ||||
| 27 | +pit: | ||||
| 28 | + available_at_policy: "filing_date + 1 day 00:00 America/New_York (vendor proxy; fallback period_end + 91 d flagged pit_fallback)" | ||||
| 29 | + revision_semantics: "revision_id=1 observed 2026-11-01/02; no pre-ingestion restatement history (vendor limitation)" | ||||
| 30 | + reveal_date: "earnings_events.event_date (press release), release_time in {before_open, after_close, null}" | ||||
| 31 | +universe: | ||||
| 32 | + entity_source: fundamentals entities (5,451 active tickers as of 2026-11-01; NO delisted entities -> survivorship caveat) | ||||
| 33 | + min_quarters: 8 | ||||
| 34 | + first_filing_year: 2012 | ||||
| 35 | + last_session: 2026-10-30 | ||||
| 36 | +external: | ||||
| 37 | + sec_company_tickers: https://www.sec.gov/files/company_tickers.json | ||||
| 38 | + sec_submissions: https://data.sec.gov/submissions/CIK{cik:010d}.json | ||||
| 39 | + ff5_daily: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Research_Data_5_Factors_2x3_daily_CSV.zip | ||||
| 40 | + mom_daily: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Momentum_Factor_daily_CSV.zip | ||||
added
configs/models.yaml
+27 −0
@@ -0,0 +1,27 @@ | |||||
| 1 | +# Equal tuning budget across information sets. Hyper-parameters are tuned ONLY on the validation period. | ||||
| 2 | +baselines: | ||||
| 3 | + B0: {type: base_rate} | ||||
| 4 | + B1: {type: logistic, inputs: [fundamentals, controls]} | ||||
| 5 | + B2: {type: logistic, inputs: [fundamentals, controls, daily]} | ||||
| 6 | + B3: {type: logistic, inputs: [fundamentals, controls, daily, intraday_30m]} | ||||
| 7 | + B4: {type: logistic, inputs: [fundamentals, controls, daily, intraday_5m]} | ||||
| 8 | + B5: {type: logistic, inputs: [fundamentals, controls, daily, intraday_1m]} | ||||
| 9 | +logistic: | ||||
| 10 | + penalty: l2 | ||||
| 11 | + C_grid: [0.01, 0.03, 0.1, 0.3, 1.0, 3.0] | ||||
| 12 | + standardize: train_only | ||||
| 13 | + impute: train_median | ||||
| 14 | +lightgbm: | ||||
| 15 | + information_sets: [B1, B2, B3, B4, B5] | ||||
| 16 | + budget_trials: 24 # identical random-search budget for every information set | ||||
| 17 | + seed: 20261102 | ||||
| 18 | + search_space: | ||||
| 19 | + num_leaves: [7, 15, 31, 63] | ||||
| 20 | + learning_rate: [0.01, 0.03, 0.05] | ||||
| 21 | + min_child_samples: [50, 100, 200] | ||||
| 22 | + feature_fraction: [0.5, 0.7, 0.9] | ||||
| 23 | + bagging_fraction: [0.6, 0.8, 1.0] | ||||
| 24 | + lambda_l2: [0.0, 1.0, 10.0] | ||||
| 25 | + n_estimators_max: 2000 | ||||
| 26 | + early_stopping_rounds: 100 | ||||
| 27 | +neural: {enabled: false, reason: "owner instruction 2026-11-02: minimise AI usage; B7/B8 not run"} | ||||
added
configs/research.yaml
+42 −0
@@ -0,0 +1,42 @@ | |||||
| 1 | +# Frozen research design parameters (see docs/RESEARCH_DESIGN.md). Changing a value requires a DECISIONS.md entry. | ||||
| 2 | +seed: 20261102 | ||||
| 3 | +sample: | ||||
| 4 | + start: 2012-01-01 | ||||
| 5 | + end: 2026-10-30 | ||||
| 6 | + min_quarters_per_firm: 8 | ||||
| 7 | + min_price_usd: 1.0 # at cutoff, raw close | ||||
| 8 | + min_regular_bars_per_day: 100 # sessions with fewer 1m regular-session bars are "sparse" | ||||
| 9 | + min_valid_days_in_window: 15 # out of the 20-trading-day feature window | ||||
| 10 | +cutoffs: | ||||
| 11 | + event_time_horizons_td: [40, 20, 10, 5, 1] # trading days before the earnings release date A_q | ||||
| 12 | + primary_horizon_td: 20 | ||||
| 13 | + fixed_calendar: month_end # last trading day of each month | ||||
| 14 | + embargo_rule: "cutoff c < min(A_q, F_q); bars with session_date <= c only; fundamentals with available_at <= c only" | ||||
| 15 | +feature_window: | ||||
| 16 | + short_td: 20 | ||||
| 17 | + long_td: 60 | ||||
| 18 | +frequencies: [1d, 30m, 5m, 1m] | ||||
| 19 | +targets: | ||||
| 20 | + primary: | ||||
| 21 | + name: adverse_opinc_surprise | ||||
| 22 | + variable: op_inc | ||||
| 23 | + expectation: seasonal_random_walk_with_drift # E[X_q] = X_{q-4} + mean(X_{q-1-k} - X_{q-5-k}, k=0..3), PIT | ||||
| 24 | + scale: assets_tot (latest available) | ||||
| 25 | + threshold: -0.005 # surprise <= -0.5% of total assets | ||||
| 26 | + continuous_primary: scaled_opinc_surprise | ||||
| 27 | + secondary: | ||||
| 28 | + - {name: roa_yoy_decline, rule: "roa_q - roa_{q-4} <= -0.01"} | ||||
| 29 | + - {name: ocf_innovation_negative, rule: "(cash_op_q - cash_op_{q-4})/assets <= -0.01"} | ||||
| 30 | + - {name: liquidity_deterioration, rule: "current ratio falls >= 10% yoy OR interest coverage falls below 1 from >= 1"} | ||||
| 31 | + - {name: eps_miss, rule: "eps_reported < eps_estimate (vendor estimate, exploratory)"} | ||||
| 32 | +splits: | ||||
| 33 | + train: [2012-01-01, 2018-12-31] | ||||
| 34 | + validation: [2019-01-01, 2020-12-31] | ||||
| 35 | + test: [2021-01-01, 2026-10-30] | ||||
| 36 | + walk_forward: {first_test_year: 2016, embargo_quarters: 1} | ||||
| 37 | + firm_holdout_fraction: 0.2 | ||||
| 38 | +inference: | ||||
| 39 | + cluster: [entity_id, calendar_quarter] | ||||
| 40 | + bootstrap_blocks: calendar_quarter | ||||
| 41 | + n_bootstrap: 1000 | ||||
| 42 | + multiple_testing: holm | ||||
added
data/README.md
+17 −0
@@ -0,0 +1,17 @@ | |||||
| 1 | +# data/ | ||||
| 2 | + | ||||
| 3 | +No licensed raw records are stored in this repository. | ||||
| 4 | + | ||||
| 5 | +| Path | Content | Committed? | | ||||
| 6 | +|---|---|---| | ||||
| 7 | +| `data/raw/` | nothing (raw FirstRate bars live only in the ignored scratch cache `$WP39_CACHE` on the compute node) | no | | ||||
| 8 | +| `data/processed/` | derived firm-quarter panel, feature tables and labels (Parquet). Derived aggregates only; still **not** committed (size, license caution) | no | | ||||
| 9 | +| `artifacts/manifests/` | hashed dataset manifests: dataset ids, `X-Dataset-Version`, extraction dates, row counts, SHA-256 of extracts, code SHA | yes | | ||||
| 10 | + | ||||
| 11 | +Provenance rules (see `DATA_AUDIT.md`, `docs/API_INTEGRATION.md`): | ||||
| 12 | +- Market bars and fundamentals come from the owner's FinData OS API (`https://findata.spboucher.ai/api/v1`), a private | ||||
| 13 | + lakehouse of FirstRate Data (license: private use, no redistribution of raw records). | ||||
| 14 | +- Earnings-release calendar rows are read from the FinData Postgres table `earnings_events` on the storage node because the | ||||
| 15 | + API does not expose that dataset yet (documented exception). | ||||
| 16 | +- External public augmentations: SEC EDGAR `company_tickers.json` and `submissions` (CIK, SIC), Kenneth French data library | ||||
| 17 | + (daily factors). Both are public, versioned by download date in the manifests. | ||||
added
data/processed/.gitkeep
+0 −0
added
data/raw/README.md
+4 −0
@@ -0,0 +1,4 @@ | |||||
| 1 | +# data/raw — intentionally empty | ||||
| 2 | +Raw FirstRate Data records (via FinData OS) are licensed for private use and are never stored in this repository. | ||||
| 3 | +They live only in the ignored scratch cache on the compute node (`$WP39_CACHE`), are deleted after feature extraction, | ||||
| 4 | +and are described by hashed manifests in `artifacts/manifests/`. | ||||
added
docs/API_INTEGRATION.md
+41 −0
@@ -0,0 +1,41 @@ | |||||
| 1 | +# API_INTEGRATION.md — how WP39 talks to FinData OS | ||||
| 2 | + | ||||
| 3 | +## Authorization | ||||
| 4 | +- Header `Authorization: Bearer <key>`; the key is read from `FINDATA_API_KEY` or the file `FINDATA_API_KEY_FILE` | ||||
| 5 | + (default `~/findata-secrets/api-key-wp39.txt`, mode 600). The client never logs headers, never puts the key in a URL, | ||||
| 6 | + and redacts any string starting with `fd_` in exceptions (`src/wp39/api_client.py::_redact`). | ||||
| 7 | +- Dedicated key `wp39_uqo` (scopes `read:market, read:fundamentals, query, export`; **no admin**), created 2026-11-02 with | ||||
| 8 | + the node CLI `findata create-key` because `POST /admin/keys` returned HTTP 500 for API-key callers (bug logged in | ||||
| 9 | + DATA_AUDIT §8). | ||||
| 10 | +- Compute runs on **M3U96a** against `http://127.0.0.1:8600/api/v1` (same host as the lake; the public URL | ||||
| 11 | + `https://findata.spboucher.ai/api/v1` is used from the laptop for probes only). | ||||
| 12 | + | ||||
| 13 | +## Client (`src/wp39/api_client.py`) | ||||
| 14 | +- `httpx.Client` with 60 s timeout, retry with bounded exponential backoff (5 attempts, 0.5 → 8 s, jitter) on 429/5xx and | ||||
| 15 | + network errors; idempotent GETs only are retried automatically; export creation is retried only when no export id was | ||||
| 16 | + received. | ||||
| 17 | +- Every response's `X-Request-ID`, `X-Dataset-Id`, `X-Dataset-Version` are recorded in the provenance log | ||||
| 18 | + (`artifacts/logs/api_calls.jsonl`, one line per call, no payloads). | ||||
| 19 | +- Cursor iteration for `/market/bars` and `/coverage/symbols`; export polling (`/exports/{id}`) every 1 s up to 10 min. | ||||
| 20 | +- Arrow/Parquet schema validation against `GET /catalog/schema/bars` (schema v1) before any file is accepted. | ||||
| 21 | + | ||||
| 22 | +## Calls used by the pipeline | ||||
| 23 | +| Step | Call | Scope | Volume | | ||||
| 24 | +|---|---|---|---| | ||||
| 25 | +| 00 probe | `/health`, `/catalog/datasets`, `/catalog/schema/bars`, `/openapi.json` | read | 4 | | ||||
| 26 | +| 01 universe | `/coverage/symbols?dataset_id=market_bars.stock.1m.raw` (cursor, 5,000/page), `/instruments/{symbol}` | read | ≈ 4 + N | | ||||
| 27 | +| 02 PIT panel | `/fundamentals/{entity}?period_type=q&limit=20000` (all facts, local as-of join), `/fundamentals/{entity}/periods` | read:fundamentals | 2 × N entities | | ||||
| 28 | +| 03 features | `POST /exports` (1m raw, ≤ 12 y, 1 symbol) ×2 per symbol, `/exports/{id}`, `/download`; SPY from `market_bars.etf.1m.raw` | export | 2 × N + 2 | | ||||
| 29 | +| checks | `POST /query` (cross-section counts, spot checks ≤ 100 k rows) | query | few | | ||||
| 30 | + | ||||
| 31 | +Exception (documented): earnings-release rows are extracted once on M3U96a with | ||||
| 32 | +`psql -d findata -c "\copy (select ... from earnings_events) to '…'"` (read-only). The extract's SHA-256, row count and | ||||
| 33 | +timestamp are in `artifacts/manifests/earnings_events.json`. | ||||
| 34 | + | ||||
| 35 | +## Idempotent partitioning and manifests | ||||
| 36 | +- Exports are cached per `(symbol, chunk)` as `$WP39_CACHE/bars/<symbol>__<start>__<end>.parquet` and deleted after the | ||||
| 37 | + feature rows are written; `artifacts/manifests/bars_manifest.jsonl` keeps `symbol, start, end, dataset_id, | ||||
| 38 | + dataset_version, row_count, bytes, sha256, exported_at, request_id`. | ||||
| 39 | +- Fundamentals extracts: `$WP39_CACHE/fundamentals/<entity>.parquet` with the same manifest fields. | ||||
| 40 | +- Re-running a script skips completed partitions (manifest lookup) and never overwrites a partition with a different | ||||
| 41 | + dataset version without logging a `version_drift` warning. | ||||
added
docs/COMPUTE_BUDGET.md
+16 −0
@@ -0,0 +1,16 @@ | |||||
| 1 | +# COMPUTE_BUDGET.md | ||||
| 2 | + | ||||
| 3 | +| Resource | Plan | Measured / status | | ||||
| 4 | +|---|---|---| | ||||
| 5 | +| Compute node | M3U96a (Mac Studio M3 Ultra, 28 cores, 96 GB RAM) — FinData API on localhost | load 1.5–1.9 before start | | ||||
| 6 | +| Scratch | `~/wp39-cache` on the internal SSD (319 GB free; FinData hard floor 60 GB) | streaming design keeps < 5 GB | | ||||
| 7 | +| API exports | ≈ 2 × 4,300 symbol-chunks, ≈ 1 s each server-side, 4 concurrent | pilot measured 1.0 s / 860 k rows | | ||||
| 8 | +| Fundamentals calls | 5,451 × 2 | ms each | | ||||
| 9 | +| Feature computation | Polars per symbol (≈ 1.7 M rows → 4 frequency tables), 8 worker processes | to be measured in the pilot | | ||||
| 10 | +| Models | logistic ridge (seconds) ; LightGBM 24 trials × 5 information sets × (1 chronological + 11 walk-forward folds) ≈ 1,440 fits, early stopping; ≈ 2–4 h on 28 cores | — | | ||||
| 11 | +| Bootstrap | 1,000 stationary-bootstrap draws over 23 test quarters per contrast — seconds | — | | ||||
| 12 | +| LaTeX | laptop (TeX Live, `latexmk`) | available | | ||||
| 13 | +| AI usage | none in the pipeline (no LLM features, no neural B7/B8); Claude Code used only as the engineer | owner instruction 2026-11-02 | | ||||
| 14 | + | ||||
| 15 | +Pilot (Phase 2 gate): 300 firms stratified by first-fundamentals year and size, full history → validates throughput, | ||||
| 16 | +feature sanity and label base rates before the full run. | ||||
added
docs/NOVELTY_MEMO.md
+53 −0
@@ -0,0 +1,53 @@ | |||||
| 1 | +# NOVELTY_MEMO.md — the three closest papers and why WP39 is not them | ||||
| 2 | + | ||||
| 3 | +Prepared 2026-11-02 from publisher metadata verified on Crossref (`literature/RELATED_WORK_MATRIX.csv`, | ||||
| 4 | +`artifacts/logs/crossref_batch*.json`). Full texts were not machine-summarised; the points of distinction below are | ||||
| 5 | +based on the papers' stated designs as reported in their abstracts and our own reading of their published versions. | ||||
| 6 | + | ||||
| 7 | +## Closest paper 1 — Grégoire & Martineau (2022), *How Is Earnings News Transmitted to Stock Prices?*, JAR 60(1) | ||||
| 8 | +- **What it does.** Decomposes price discovery around earnings announcements using TAQ quotes *and* trades, showing that | ||||
| 9 | + most of the reaction to after-hours announcements occurs in quotes with little trading. | ||||
| 10 | +- **Strongest objection to WP39 from this paper.** "Information arrives at the announcement; what you call anticipation is | ||||
| 11 | + the pre-announcement drift already documented, and bars cannot even see quotes." | ||||
| 12 | +- **How WP39 differs.** WP39 does not study the announcement reaction at all: all features end strictly *before* the | ||||
| 13 | + release and the outcome is the accounting number itself, not the return. We make no claim about quotes versus trades | ||||
| 14 | + (our data are OHLCV bars, stated plainly) and we ask a forecasting question — whether the *resolution* of pre-release | ||||
| 15 | + bar data carries incremental information about fundamentals — which their event-window decomposition does not address. | ||||
| 16 | + | ||||
| 17 | +## Closest paper 2 — Chen, Cho, Dou & Lev (2022), *Predicting Future Earnings Changes Using Machine Learning and Detailed Financial Data*, JAR 60(2) | ||||
| 18 | +- **What it does.** Shows that gradient-boosted trees on detailed XBRL financial-statement items predict the direction of | ||||
| 19 | + next-year earnings changes better than parsimonious accounting models, and that the predictions are priced slowly. | ||||
| 20 | +- **Strongest objection.** "Fundamentals-based ML already predicts earnings changes; adding market data is Ou–Penman with | ||||
| 21 | + a new model, and daily returns are known to lead earnings (Beaver–Lambert–Morse 1980; Kothari–Sloan 1992)." | ||||
| 22 | +- **How WP39 differs.** Their inputs are accounting items; ours hold the accounting information set fixed (B1) and | ||||
| 23 | + measure the *marginal* value of market data at four sampling frequencies with equal model capacity (B2–B5, B6). The | ||||
| 24 | + stock-prices-lead-earnings literature establishes the daily/annual lead; WP39 tests whether anything remains at the | ||||
| 25 | + minute scale once daily information is in, with a strict PIT availability clock and a release-date reveal clock. | ||||
| 26 | + | ||||
| 27 | +## Closest paper 3 — Zhang, Zhang, Cucuringu & Qian (2023/2024), *Volatility Forecasting with Machine Learning and Intraday Commonality*, JFEC | ||||
| 28 | +- **What it does.** Pools intraday realized-volatility features across many stocks to forecast volatility with ML, showing | ||||
| 29 | + that commonality in intraday patterns improves volatility forecasts. | ||||
| 30 | +- **Strongest objection.** "Intraday features forecast volatility, and earnings surprises are volatility events, so your | ||||
| 31 | + deterioration signal is a volatility forecast in disguise." | ||||
| 32 | +- **How WP39 differs.** Our target is an accounting quantity with a *sign* (adverse surprise), not a variance; the design | ||||
| 33 | + includes the volatility families explicitly in every frequency set so that the test isolates information beyond | ||||
| 34 | + predicted volatility (placebo: a symmetric |surprise| target must show the pattern a volatility channel implies, a signed | ||||
| 35 | + target must not). We also report directional asymmetry (negative semivariance, down-bar volume) as pre-specified | ||||
| 36 | + mechanism variables, not as the headline. | ||||
| 37 | + | ||||
| 38 | +## Other adjacent work and the recycling check | ||||
| 39 | +- UQO WP15 (*Faster, Wider, More Fragile?*) studies intraday *shock propagation* across stocks on the same vendor data; | ||||
| 40 | + it never links bars to accounting outcomes. WP39 shares the data vendor and the realized-measure toolkit only; no | ||||
| 41 | + result or figure is reused. | ||||
| 42 | +- Pre-announcement informed trading (Christophe–Ferri–Angel 2004; Berkman et al. 2009; Kaniel et al. 2012; | ||||
| 43 | + Hendershott–Livdan–Schürhoff 2015) uses trader-type data we do not have; our contribution is orthogonal: whether | ||||
| 44 | + *anonymous* OHLCV at fine resolution is informative, and whether the information is attributable to the frequency. | ||||
| 45 | +- Patton & Verardo (2012) and Bollerslev–Li–Xue (2018) model announcement-day betas and volume-volatility; they are | ||||
| 46 | + announcement-window studies. | ||||
| 47 | +- Earnings-prediction ML (Easton et al. 2024; Cao et al. 2024) uses accounting, analyst and text inputs, not intraday bars. | ||||
| 48 | + | ||||
| 49 | +## Verdict | ||||
| 50 | +No published paper, to our verified knowledge, measures the marginal forecasting value of 1-minute versus 5-, 30-minute | ||||
| 51 | +and daily OHLCV for *forthcoming accounting deterioration* with a point-in-time information set and matched model | ||||
| 52 | +capacity. The question is therefore open. If the empirical answer is a precise null, that is itself informative given | ||||
| 53 | +the practitioner belief that high-frequency activity "sees" fundamentals early. | ||||
added
docs/PIT_PROTOCOL.md
+75 −0
@@ -0,0 +1,75 @@ | |||||
| 1 | +# PIT_PROTOCOL.md — point-in-time rules for WP39 | ||||
| 2 | + | ||||
| 3 | +Frozen 2026-11-02 before any model was estimated. Any change is an amendment logged in `DECISIONS.md`. | ||||
| 4 | + | ||||
| 5 | +## 1. Clocks | ||||
| 6 | + | ||||
| 7 | +All instants are converted to **America/New_York** for session logic and kept in UTC in storage. Trading days follow the | ||||
| 8 | +XNYS calendar (`exchange_calendars`). For firm `i` and fiscal quarter `q`: | ||||
| 9 | + | ||||
| 10 | +| Symbol | Meaning | Source | | ||||
| 11 | +|---|---|---| | ||||
| 12 | +| `E_q` | fiscal period end | `fundamentals_facts.fiscal_period_end` | | ||||
| 13 | +| `A_q` | earnings-release date (press release) — the **reveal date** of quarter-`q` results | `earnings_events.event_date`, first event in `[E_q, F_q + 10 d]` | | ||||
| 14 | +| `τ_q` | release timing: `before_open`, `after_close`, or `unknown` | `earnings_events.release_time` | | ||||
| 15 | +| `F_q` | SEC filing date of the 10-Q/10-K | `fundamentals_facts.filing_date` | | ||||
| 16 | +| `V_q` | vendor-proxy availability of the structured facts | `available_at = F_q + 1 d 00:00 ET` | | ||||
| 17 | +| `c` | prediction cutoff (a trading day; features use information up to the **close** of `c`) | design | | ||||
| 18 | + | ||||
| 19 | +## 2. The information set at cutoff `c` | ||||
| 20 | + | ||||
| 21 | +`I(c)` contains exactly: | ||||
| 22 | + | ||||
| 23 | +1. **Market bars** with `session_date ≤ c` (regular session 09:30–16:00 ET for the main specification; the 16:00 bar is the | ||||
| 24 | + closing print; extended hours 04:00–09:29 and 16:01–19:59 enter only the "extended" variants, never mixed). | ||||
| 25 | +2. **Fundamentals** with `available_at ≤ c 00:00 ET`, i.e. `F_j + 1 ≤ c`. The latest such quarter is `j*(c)`, and the | ||||
| 26 | + model also receives the *age* `c − A_{j*}` in trading days. Because `V_q > F_q ≥ A_q > c` by construction (§3), quarter-`q` | ||||
| 27 | + facts can never enter `I(c)`. | ||||
| 28 | +3. **Earnings-release history** with `event_date < c` (prior realized releases, used for the historical base-rate feature B0). | ||||
| 29 | +4. **Static crosswalk** (CIK, SIC) — time-invariant by assumption; `formerNames` are checked for ticker reuse (Phase 2 audit). | ||||
| 30 | +5. **Nothing else.** No consensus estimates for quarter `q` (vintage unknown), no index-membership backfills, no | ||||
| 31 | + contemporaneous factors. | ||||
| 32 | + | ||||
| 33 | +## 3. Cutoff rules | ||||
| 34 | + | ||||
| 35 | +- **Event-time design** (primary, H1–H4): for horizon `h ∈ {40, 20, 10, 5, 1}` trading days, `c = A_q − h` trading days. | ||||
| 36 | + Admissible only if `c < min(A_q, F_q)` *and* `c ≥ A_{q−1} + 1` (the previous release has already happened, so the | ||||
| 37 | + cohort window never straddles two reveals). With `τ_q = before_open`, bars of `A_q` contain the reaction and are excluded | ||||
| 38 | + (`c ≤ A_q − 1` guarantees it); with `τ_q = after_close` or `unknown` the same rule applies — we never use `A_q` bars. | ||||
| 39 | +- **Fixed-calendar design** (H1 robustness, H5): `c` = last trading day of each month; the target is the *next* release | ||||
| 40 | + after `c` (first `A_q > c`), restricted to `A_q − c ≤ 65` trading days. The identity of "the next quarter" is known ex | ||||
| 41 | + ante; its date is not needed by the forecaster. | ||||
| 42 | +- **Firm-quarter exclusions** (frozen): no matched release; `F_q < A_q`; `F_q − A_q > 30` calendar days; `E_q` not within | ||||
| 43 | + 60–120 days of `E_{q−1}` (irregular fiscal calendars); quarter `q − 4` or `q − 1` not available at `c` (expectation | ||||
| 44 | + undefined); raw close at `c` < 1 USD; fewer than 15 valid sessions in the 20-day feature window. | ||||
| 45 | + | ||||
| 46 | +## 4. Label construction (no price-based labels) | ||||
| 47 | + | ||||
| 48 | +Primary: `S_q = (X_q − E_c[X_q]) / TA_{j*}`, `X = op_inc` (quarterly operating income), `TA` = total assets of the latest | ||||
| 49 | +available quarter, `E_c[X_q] = X_{q−4} + (1/4) Σ_{k=0..3} (X_{q−1−k} − X_{q−5−k})` using only quarters available at `c` | ||||
| 50 | +(seasonal random walk with drift; Foster 1977). `D_q = 1[S_q ≤ −0.005]`. The secondary targets are in | ||||
| 51 | +`configs/research.yaml`. `X_q` itself is taken from the **first ingested revision** of quarter `q` (the only one available), | ||||
| 52 | +which is the vendor's current value — see LIMITATIONS §PIT. | ||||
| 53 | + | ||||
| 54 | +## 5. Leakage battery (each item is a unit test in `tests/`) | ||||
| 55 | + | ||||
| 56 | +| # | Risk | Guard | Test | | ||||
| 57 | +|---|---|---|---| | ||||
| 58 | +| L1 | quarter-`q` facts used as inputs | as-of join on `available_at ≤ c` | `test_pit_leakage.py::test_no_future_fundamentals` | | ||||
| 59 | +| L2 | selection by fiscal end instead of availability | join key is `available_at`, never `fiscal_period_end` | `test_pit_leakage.py::test_join_key_is_available_at` | | ||||
| 60 | +| L3 | post-release bars in the feature window | `session_date ≤ c < A_q` | `test_pit_leakage.py::test_no_bars_after_cutoff` | | ||||
| 61 | +| L4 | global standardisation / imputation / tuning on test data | transformers fit on train rows only; tuning on validation period only | `test_train_only_transforms.py` | | ||||
| 62 | +| L5 | DST / timezone errors | UTC → ET conversion, 09:30 and 16:00 bars identified on both DST regimes | `test_timestamp_dsts.py` | | ||||
| 63 | +| L6 | ticker reuse / identifier drift | crosswalk with effective dates; SEC `formerNames` audit | `test_instrument_ids.py` | | ||||
| 64 | +| L7 | splits/dividends creating mechanical returns | split-adjusted returns from `corporate_actions` (ex-date rule), raw bars immutable | `test_corporate_actions.py` | | ||||
| 65 | +| L8 | release timing assumed intraday | release-day bars never used; timing enters only as a descriptive variable | `test_labels.py::test_release_day_excluded` | | ||||
| 66 | +| L9 | overlapping target windows across splits | purge + 1-quarter embargo at every split boundary | `test_splits.py` | | ||||
| 67 | +| L10 | survivorship by construction | universe = all fundamentals entities (documented survivor conditioning), delisted bars kept where present | `01_audit_universe.py` report | | ||||
| 68 | +| L11 | vendor ingestion date mistaken for knowledge date | `observed_at` is never used as a knowledge date; `available_at` only | `test_pit_leakage.py::test_observed_at_not_used` | | ||||
| 69 | +| L12 | randomised placebo | labels shuffled within calendar quarter → gain must vanish; cutoffs shifted −45 td → H4 gain must vanish | `08_run_robustness.py` | | ||||
| 70 | + | ||||
| 71 | +## 6. Equivalence check of the local as-of join with the API | ||||
| 72 | + | ||||
| 73 | +For 25 random entities and 10 random `as_of` instants, the set of (metric, period) pairs returned by | ||||
| 74 | +`GET /fundamentals/{entity}?as_of=` must equal the set produced by the local filter `available_at ≤ as_of` on the full | ||||
| 75 | +extract. Implemented in `tests/test_api_contract.py::test_asof_equivalence` (live test, `WP39_LIVE=1`). | ||||
added
docs/REPLICATION.md
+38 −0
@@ -0,0 +1,38 @@ | |||||
| 1 | +# REPLICATION.md — how to reproduce WP39 | ||||
| 2 | + | ||||
| 3 | +## Requirements | ||||
| 4 | +- Python ≥ 3.12 with `uv` (`uv venv -p 3.12 .venv && uv pip install -e ".[dev]"`). | ||||
| 5 | +- Access to FinData OS (owner-issued key with scopes `read:market, read:fundamentals, query, export`) exposed as | ||||
| 6 | + `FINDATA_API_KEY` or a mode-600 file at `FINDATA_API_KEY_FILE`. Without access, Phases 2–5 cannot run; the saved | ||||
| 7 | + evaluation artifacts in `artifacts/evaluation/` and `results/` allow Phase 6 (tables/figures/paper) to be regenerated. | ||||
| 8 | +- Read-only `psql` access to the FinData Postgres database on the storage node for `scripts/01a_extract_node_tables.sh` | ||||
| 9 | + (earnings events, entities, corporate actions — not yet exposed by the API). | ||||
| 10 | +- Internet access to `sec.gov` (CIK/SIC) and the Kenneth French library (daily factors). | ||||
| 11 | +- TeX Live with `latexmk` for the paper. | ||||
| 12 | + | ||||
| 13 | +## Order of execution (compute node, API on localhost) | ||||
| 14 | +```bash | ||||
| 15 | +export FINDATA_BASE_URL=http://127.0.0.1:8600/api/v1 WP39_CACHE=~/wp39-cache | ||||
| 16 | +bash scripts/01a_extract_node_tables.sh # node extracts + manifests | ||||
| 17 | +python scripts/00_probe_findata.py # contract reconciliation -> artifacts/logs/phase0_probe.json | ||||
| 18 | +python scripts/01_audit_universe.py # universe.parquet, results/universe_audit.json | ||||
| 19 | +python scripts/02_build_pit_panel.py # quarters.parquet (labels), design freeze hash | ||||
| 20 | +python scripts/03_build_features.py --workers 8 # streaming exports -> session features -> rolling windows | ||||
| 21 | +python scripts/04_build_labels.py # sample_event.parquet, sample_calendar.parquet, cascades | ||||
| 22 | +python scripts/05_train_baselines.py # B0-B5 logistic, ridge, firm hold-out, walk-forward | ||||
| 23 | +python scripts/06_train_advanced.py # LightGBM equal-budget, horizon ladder, OOF signals | ||||
| 24 | +python scripts/07_evaluate.py # metrics, paired contrasts, GW tests, Holm, power | ||||
| 25 | +python scripts/08_run_robustness.py # placebos, subgroups, panel regressions, H5 | ||||
| 26 | +python scripts/09_make_manuscript.py # tables, figures, results_macros.tex | ||||
| 27 | +cd paper && make # main.pdf | ||||
| 28 | +pytest -q # 29 tests; WP39_LIVE=1 adds the live API contract tests | ||||
| 29 | +``` | ||||
| 30 | +Runtime on a Mac Studio M3 Ultra (28 cores): see `PROGRESS.md` for measured wall-times of each step. | ||||
| 31 | + | ||||
| 32 | +## What is and is not in the package | ||||
| 33 | +- In: code, configs, docs, tests, manifests (hashes/versions/counts), derived evaluation tables, figures, paper. | ||||
| 34 | +- Out: raw bars and fundamentals (FirstRate Data license), the per-symbol feature cache (derived from licensed data; | ||||
| 35 | + regenerable), model binaries. | ||||
| 36 | +- Determinism: all seeds come from `configs/research.yaml` (`seed: 20261102`); LightGBM uses `n_jobs=12` with | ||||
| 37 | + deterministic histogram construction at the default settings, so results are reproducible to numerical precision on | ||||
| 38 | + the same architecture. | ||||
added
docs/RESEARCH_DESIGN.md
+111 −0
@@ -0,0 +1,111 @@ | |||||
| 1 | +# RESEARCH_DESIGN.md — preregistered specification (internal) | ||||
| 2 | + | ||||
| 3 | +Frozen **2026-11-02 14:40 ET**, before the first test-period observation was opened. Hash of this file at freeze is | ||||
| 4 | +recorded in `artifacts/manifests/design_freeze.json` by `scripts/02_build_pit_panel.py`. Later changes are amendments in | ||||
| 5 | +`DECISIONS.md` (dated, with reason) and never alter frozen primary endpoints. | ||||
| 6 | + | ||||
| 7 | +## 1. Question | ||||
| 8 | + | ||||
| 9 | +Does one-minute OHLCV activity contain **incremental** information about a firm's *forthcoming* adverse accounting | ||||
| 10 | +outcome, beyond (i) point-in-time fundamentals, (ii) daily OHLCV, (iii) coarser intraday aggregates of the same bars, and | ||||
| 11 | +(iv) calendar/industry/size controls? Anticipation (prices move before the release) is not the claim; the claim is about | ||||
| 12 | +the marginal forecasting value of **sampling frequency** holding the information set, calendar coverage, universe, | ||||
| 13 | +cutoff, horizon and training budget fixed. | ||||
| 14 | + | ||||
| 15 | +## 2. Hypotheses — null, alternative, primary endpoint, decision rule | ||||
| 16 | + | ||||
| 17 | +| | Null `H0` | Alternative `H1` | Primary endpoint | Decision rule | | ||||
| 18 | +|---|---|---|---|---| | ||||
| 19 | +| **H1** incremental information | OOS log loss of B5 (fundamentals + daily + 1m) ≥ that of B2 (fundamentals + daily) | B5 < B2 | Δ log loss (B5 − B2) on the untouched test period, 2021-01 → 2026-10, horizon h = 20 | 95 % block-bootstrap CI (blocks = calendar quarters, 1,000 draws) excludes 0 **and** Giacomini–White conditional test p < 0.05 (two-sided) | | ||||
| 20 | +| **H2** temporal resolution | Δ(B5 − B2) ≤ Δ(B4 − B2) and ≤ Δ(B3 − B2) | 1m gain strictly exceeds 5m and 30m gains | paired Δ log loss B5 − B4 and B5 − B3 | both CIs exclude 0 after Holm correction over the 3 frequency contrasts | | ||||
| 21 | +| **H3** heterogeneity | the B5 − B2 gain is equal across terciles of size, illiquidity, leverage | gain larger in small, illiquid, levered firms | interaction coefficient `β_HF×tercile` in the panel regression (§5) | Holm-corrected p < 0.05 for the pre-specified ordering | | ||||
| 22 | +| **H4** timing | the B5 − B2 gain does not increase as h shrinks (40→20→10→5→1) | monotone increase | slope of Δ log loss on −h across horizons | sign test on the five ordered horizons + placebo cutoffs (−45 td) showing no gain | | ||||
| 23 | +| **H5** pricing | the LFDS does not predict the announcement-window abnormal return nor post-cutoff factor-adjusted returns | it does | (a) regression of CAR[c+1, A_q+1] on LFDS with controls; (b) decile long-short FF5+MOM alpha with costs | CI excludes 0; economic value reported with turnover and costs regardless of significance | | ||||
| 24 | + | ||||
| 25 | +Primary endpoint for the headline sentence: **H1 at h = 20 on the binary primary target** with log loss. Brier, AUC, | ||||
| 26 | +PR-AUC, calibration slope/intercept, MAE/RMSE/OOS-R² (continuous target) are secondary metrics reported for every model. | ||||
| 27 | +The headline sentence will read: *"At a 20-trading-day horizon, on a 2012–2026 panel of U.S. listed firms with a strictly | ||||
| 28 | +point-in-time information set, one-minute OHLCV features change the out-of-sample log loss of forecasts of an adverse | ||||
| 29 | +operating-income surprise by [Δ, 95 % CI] relative to a daily-market-and-accounting benchmark; the gain is | ||||
| 30 | +[consistent/inconsistent] with [mechanisms] and has [measured/absent] economic value."* | ||||
| 31 | + | ||||
| 32 | +## 3. Sample | ||||
| 33 | + | ||||
| 34 | +Universe: all FinData fundamentals entities (5,451; survivor-conditioned, see LIMITATIONS) with ≥ 8 quarterly periods | ||||
| 35 | +and 1-minute bars; firm-quarters 2012-Q1 → 2026-Q2 with reveal dates ≤ 2026-10-30 and admissible cutoffs (PIT_PROTOCOL | ||||
| 36 | +§3). Sector = SEC SIC division (2-digit), size = log market cap at `c` (raw close × latest available `shares`). | ||||
| 37 | + | ||||
| 38 | +Expected sample (to be reported, not assumed): ~4,300 firms × ~40 quarters ≈ 150–170 k firm-quarters before exclusions. | ||||
| 39 | + | ||||
| 40 | +## 4. Variables | ||||
| 41 | + | ||||
| 42 | +**Targets** — `configs/research.yaml`. Primary binary `D_q = 1[S_q ≤ −0.5 % of assets]`, primary continuous `S_q` | ||||
| 43 | +(winsorised at 1/99 % on the training period). | ||||
| 44 | + | ||||
| 45 | +**PIT fundamentals (B1)** — latest available quarter at `c`: `rev` growth (yoy), gross margin `gp/rev`, operating margin | ||||
| 46 | +`op_inc/rev`, `roa`, `net_inc/assets_tot`, `cash_op/assets_tot`, accruals `(net_inc − cash_op)/assets_tot`, | ||||
| 47 | +`cash/assets_tot`, leverage `debt/assets_tot`, interest coverage `intr_cover` (clipped), current ratio `assets_c/liab_c`, | ||||
| 48 | +net issuance (Δ`shares` yoy), capex/assets, R&D/rev, `S_{j*}` (last surprise), last-four-quarter surprise mean, loss | ||||
| 49 | +indicator, log assets, log market cap, information age `c − A_{j*}`, fiscal-quarter dummies, sector dummies, year-quarter | ||||
| 50 | +calendar dummies (in-sample only; for prediction, calendar effects are replaced by the trailing cross-sectional base rate). | ||||
| 51 | + | ||||
| 52 | +**Daily OHLCV (B2)** — from 1m regular-session bars aggregated to daily: 20- and 60-day cumulative split-adjusted returns, | ||||
| 53 | +daily return volatility (20d), Parkinson range volatility, skewness and kurtosis of daily returns (60d), daily volume | ||||
| 54 | +relative to 60-day median (20d mean and last 5d), Amihud illiquidity (60d), share of zero-return days, overnight | ||||
| 55 | +(close-to-open) vs intraday (open-to-close) return decomposition (20d sums), max drawdown (60d), beta and residual | ||||
| 56 | +volatility against SPY (60d daily). | ||||
| 57 | + | ||||
| 58 | +**Intraday families (B3 = 30m, B4 = 5m, B5 = 1m)** — the *same* families computed on bars of the given length, | ||||
| 59 | +each aggregated per session then averaged (or summed) over the 20-day window: | ||||
| 60 | +realized variance (RV), bipower variation (BPV), relative jump `max(0, RV − BPV)/RV`, negative semivariance share | ||||
| 61 | +`RS⁻/RV`, signed-jump variation `(RS⁺ − RS⁻)/RV`, realized skewness and kurtosis, maximum absolute bar-return share | ||||
| 62 | +of RV (concentration), first-order autocorrelation of bar returns, variance ratio `RV_freq / RV_daily`, intraday drift | ||||
| 63 | +`(close − open)/open`, time-of-day volume profile (share of volume in the first and last 30 minutes), volume dispersion | ||||
| 64 | +across bars (Gini), down-bar volume share (volume on bars with negative return / total — *a bar statistic, not order | ||||
| 65 | +flow*), volume surprise relative to the firm's 60-day time-of-day seasonal profile, fraction of bars present (activity), | ||||
| 66 | +RV on market-down bars vs market-up bars (asymmetry vs SPY), realized beta to SPY at that frequency, vol-of-vol | ||||
| 67 | +(dispersion of daily RV within the window). At 30m the within-day counts are small (13 bars), so skewness/kurtosis and | ||||
| 68 | +autocorrelation are computed on the pooled window. | ||||
| 69 | + | ||||
| 70 | +Note on frequency comparison: B3/B4/B5 have the **same number of feature columns** (one per family); dimensionality does | ||||
| 71 | +not grow with frequency. A supplementary experiment (Phase 4) concatenates all three to test whether 1m dominates when | ||||
| 72 | +coarser aggregates are also present. | ||||
| 73 | + | ||||
| 74 | +## 5. Models and inference | ||||
| 75 | + | ||||
| 76 | +Baseline ladder B0–B6 (`configs/models.yaml`). Logistic ridge for B1–B5 with `C` tuned on the validation period only; | ||||
| 77 | +LightGBM with an identical random-search budget (24 trials, early stopping on validation) for every information set. | ||||
| 78 | +B7/B8 (temporal neural, text) are **not run** (owner instruction to minimise AI use; declared in DECISIONS D-006). | ||||
| 79 | + | ||||
| 80 | +Panel regression for interpretability and H3: | ||||
| 81 | +`S_{i,q} = α_i + δ_{s(i),t(q)} + β·LFDS_{i,c} + γ'X_{i,c} + ε_{i,q}`, where `LFDS` is the B5 out-of-fold predicted | ||||
| 82 | +probability (walk-forward, so it is never fitted on the same quarter), with firm fixed effects and sector×year-quarter | ||||
| 83 | +effects, two-way clustered SEs (firm, calendar quarter). H3 interactions use ex-ante terciles formed at `c`. | ||||
| 84 | + | ||||
| 85 | +Comparisons: Diebold–Mariano / Giacomini–White on per-quarter mean loss differentials with HAC; stationary block | ||||
| 86 | +bootstrap over calendar quarters for paired CIs; Holm within each hypothesis family; model confidence set over the ladder | ||||
| 87 | +as a supplementary exhibit. | ||||
| 88 | + | ||||
| 89 | +## 6. Validation protocol | ||||
| 90 | + | ||||
| 91 | +- Chronological: train 2012-01 → 2018-12, validation 2019-01 → 2020-12, test 2021-01 → 2026-10 (never opened until Phase 3 | ||||
| 92 | + gate). Purge: training observations whose `A_q` falls after the validation start minus one quarter are dropped | ||||
| 93 | + (embargo = 1 calendar quarter) and likewise at the test boundary. | ||||
| 94 | +- Walk-forward: expanding window, annual refits, first test year 2016, 1-quarter embargo; this provides the out-of-fold | ||||
| 95 | + LFDS for the panel regressions and the H4/H5 exercises. | ||||
| 96 | +- Firm hold-out: 20 % of firms (hash of entity id) never seen in training, evaluated separately from the time hold-out. | ||||
| 97 | +- Train-only transforms: winsorisation bounds, medians for imputation, standardisation, sector-time demeaning, tercile | ||||
| 98 | + cut-points — all computed on the training rows of the current fold. | ||||
| 99 | + | ||||
| 100 | +## 7. Power | ||||
| 101 | + | ||||
| 102 | +With ≈ 40 k test firm-quarters, base rate ≈ 20–30 %, and quarter-level clustering (23 test quarters), the minimum | ||||
| 103 | +detectable paired Δ log loss is roughly 0.002–0.004 (to be computed from the validation-period variance of the loss | ||||
| 104 | +differential and reported in `artifacts/evaluation/power.json` before the test set is opened). | ||||
| 105 | + | ||||
| 106 | +## 8. What would make us abandon or pivot | ||||
| 107 | + | ||||
| 108 | +If, on the validation period, B2 already captures all of B5 (Δ within ±0.001 and CI covering 0), H1 is likely null; we | ||||
| 109 | +proceed to the test anyway (a precise null is a result) and devote Phase 5 to characterising *where* intraday information | ||||
| 110 | +does and does not help. If the earnings-release matching proves unreliable (> 10 % irregular lags after cleaning), the | ||||
| 111 | +event-time design is demoted and the fixed-calendar design becomes primary (amendment required). | ||||
added
literature/RELATED_WORK_MATRIX.csv
+25 −0
@@ -0,0 +1,25 @@ | |||||
| 1 | +key,authors,year,journal,doi_or_url,data_source,frequency,sample,research_question,identification,findings,point_of_distinction_for_WP39 | ||||
| 2 | +gregoire2022,Grégoire & Martineau,2022,Journal of Accounting Research,10.1111/1475-679X.12394,TAQ quotes and trades,intraday (quotes/trades),US earnings announcements,How is earnings news incorporated into prices?,event-window decomposition of price discovery,most price discovery for after-hours announcements occurs through quote updates with little trading,"WP39 uses only pre-release bars, forecasts the accounting outcome (not the return), never claims quote/trade mechanisms" | ||||
| 3 | +chen2022,Chen; Cho; Dou; Lev,2022,Journal of Accounting Research,10.1111/1475-679X.12429,XBRL detailed financial statement items,annual,US firms,Can ML on detailed financials predict earnings changes?,OOS prediction + return tests,boosted trees beat parsimonious models; slow pricing,"WP39 holds accounting inputs fixed and measures the marginal value of market data by sampling frequency" | ||||
| 4 | +zhang2023volatility,Zhang; Zhang; Cucuringu; Qian,2024,Journal of Financial Econometrics,10.1093/jjfinec/nbad005,intraday equity returns,intraday,US stocks,Does pooling intraday commonality improve ML volatility forecasts?,OOS forecasting,commonality improves volatility forecasts,"WP39 targets a signed accounting quantity, includes volatility families as controls, uses a signed vs absolute placebo" | ||||
| 5 | +beaver1980,Beaver; Lambert; Morse,1980,Journal of Accounting and Economics,10.1016/0165-4101(80)90013-0,CRSP/Compustat,annual,US,Do prices contain information about future earnings?,regression of earnings changes on returns,prices lead earnings,"establishes the daily/annual lead; WP39 asks what remains at minute resolution" | ||||
| 6 | +kothari1992,Kothari & Sloan,1992,Journal of Accounting and Economics,10.1016/0165-4101(92)90016-U,CRSP/Compustat,annual,US,Information in prices about future earnings (ERC),leading returns,ERCs rise with leading returns,"same" | ||||
| 7 | +collins1994,Collins; Kothari; Shanken; Sloan,1994,Journal of Accounting and Economics,10.1016/0165-4101(94)90024-8,CRSP/Compustat,annual,US,Why is the contemporaneous return-earnings association low?,lack of timeliness vs noise,prices anticipate earnings several years ahead,"same" | ||||
| 8 | +foster1977,Foster,1977,The Accounting Review,10.2308/tar-4493420,quarterly earnings,quarterly,US,Time-series properties of quarterly earnings,forecast evaluation,seasonal random walk with drift forecasts well,"WP39's expectation model for the surprise" | ||||
| 9 | +bernard1989,Bernard & Thomas,1989,Journal of Accounting Research,10.2307/2491062,CRSP/Compustat,daily,US,Post-earnings-announcement drift,event study,drift after SUE,"WP39 studies pre-release information, not post-announcement drift" | ||||
| 10 | +ou1989,Ou & Penman,1989,Journal of Accounting and Economics,10.1016/0165-4101(89)90017-7,Compustat,annual,US,Can financial statement analysis predict earnings and returns?,logit on ratios,yes,"WP39 B1 baseline follows this tradition" | ||||
| 11 | +sloan1996,Sloan,1996,The Accounting Review,10.2308/tar-9608042309,Compustat/CRSP,annual,US,Do prices reflect accruals information?,hedge portfolio,accrual anomaly,"accruals are a B1 control" | ||||
| 12 | +christophe2004,Christophe; Ferri; Angel,2004,Journal of Finance,10.1111/j.1540-6261.2004.00681.x,Nasdaq short sales,daily,US,Do short sellers anticipate earnings news?,pre-announcement short selling,yes,"trader-type data unavailable to WP39; WP39 tests anonymous OHLCV" | ||||
| 13 | +berkman2009,Berkman; Dimitrov; Jain; Koch; Tice,2009,Journal of Financial Economics,10.1016/j.jfineco.2008.04.009,CRSP/IBES,daily,US,Differences of opinion and returns around announcements,event study,prices fall around announcements for high-disagreement stocks,"announcement-window return study" | ||||
| 14 | +kaniel2012,Kaniel; Liu; Saar; Titman,2012,Journal of Finance,10.1111/j.1540-6261.2012.01727.x,NYSE CAUD individual trades,daily,US,Do individual investors trade informatively before earnings?,pre-event trading,yes partly,"trader-type data" | ||||
| 15 | +hendershott2015,Hendershott; Livdan; Schürhoff,2015,Journal of Financial Economics,10.1016/j.jfineco.2015.03.007,institutional order flow,daily,US,Are institutions informed about news?,order flow before news,yes,"order flow unavailable; WP39 never labels bar statistics as order flow" | ||||
| 16 | +patton2012,Patton & Verardo,2012,Review of Financial Studies,10.1093/rfs/hhs073,TAQ,intraday,US,Does beta move with news?,announcement-day realized beta,beta rises on announcement days,"announcement-day study" | ||||
| 17 | +bollerslev2018volume,Bollerslev; Li; Xue,2018,Review of Economic Studies,10.1093/restud/rdy003,TAQ,intraday,US,Volume-volatility relation around public news,structural model,announcement effects on volume-volatility elasticity,"announcement-window study" | ||||
| 18 | +weller2018,Weller,2018,Review of Financial Studies,10.1093/rfs/hhx137,TAQ + earnings,daily/intraday,US,Does algorithmic trading reduce information acquisition?,AT and pre-announcement price informativeness,AT reduces pre-announcement price informativeness,"closest mechanism paper: WP39 reports pre-release information by era as a mechanism exhibit" | ||||
| 19 | +lee2012,Lee,2012,Review of Financial Studies,10.1093/rfs/hhr084,TAQ,intraday,US,Jumps and information flow,jump tests around news,jumps cluster at news,"jump proxies are WP39 features" | ||||
| 20 | +easton2024,Easton; Kapons; Monahan; Schütt; Weisbrod,2024,The Accounting Review,10.2308/tar-2021-0478,Compustat,annual,US,Forecast earnings with k-NN,OOS forecasting,kNN competitive with analysts,"accounting inputs only" | ||||
| 21 | +cao2024,Cao; Jiang; Wang; Yang,2024,Journal of Financial Economics,10.1016/j.jfineco.2024.103910,analyst + ML,monthly,US,Man vs machine in stock analysis,OOS forecasts,AI complements analysts,"no intraday data" | ||||
| 22 | +gu2020,Gu; Kelly; Xiu,2020,Review of Financial Studies,10.1093/rfs/hhaa009,CRSP/Compustat characteristics,monthly,US,ML for return prediction,OOS R2,trees and NNs best,"methodological reference for equal-budget comparisons" | ||||
| 23 | +giacomini2006,Giacomini & White,2006,Econometrica,10.1111/j.1468-0262.2006.00718.x,—,—,—,Conditional predictive ability tests,—,—,"inference for H1/H2" | ||||
| 24 | +liu2015,Liu; Patton; Sheppard,2015,Journal of Econometrics,10.1016/j.jeconom.2015.02.008,TAQ,intraday,multi-asset,Does anything beat 5-minute RV?,forecast comparison,5-min RV hard to beat,"frequency comparison for variance measurement; WP39 asks the analogous question for fundamentals" | ||||
| 25 | +boucher2026wp15,Boucher,2026,UQO Working Paper 15,—,FirstRate Data 1-minute bars,1-minute,US 1992-2026,Intraday shock propagation,event studies,shocks propagate narrowly,"same vendor; different question; nothing reused" | ||||
added
literature/references.bib
+1021 −0
@@ -0,0 +1,1021 @@ | |||||
| 1 | +% WP39 UQO bibliography. Journal metadata verified on Crossref 2026-11-02 (artifacts/logs/crossref_batch*.json). | ||||
| 2 | + | ||||
| 3 | +@article{gregoire2022, | ||||
| 4 | + author = {Grégoire, Vincent and Martineau, Charles}, | ||||
| 5 | + title = {{How is Earnings News Transmitted to Stock Prices?}}, | ||||
| 6 | + journal = {Journal of Accounting Research}, | ||||
| 7 | + year = {2022}, | ||||
| 8 | + volume = {60}, | ||||
| 9 | + number = {1}, | ||||
| 10 | + pages = {261--297}, | ||||
| 11 | + doi = {10.1111/1475-679x.12394} | ||||
| 12 | +} | ||||
| 13 | + | ||||
| 14 | +@article{zhang2023volatility, | ||||
| 15 | + author = {Zhang, Chao and Zhang, Yihuang and Cucuringu, Mihai and Qian, Zhongmin}, | ||||
| 16 | + title = {{Volatility Forecasting with Machine Learning and Intraday Commonality}}, | ||||
| 17 | + journal = {Journal of Financial Econometrics}, | ||||
| 18 | + year = {2024}, | ||||
| 19 | + volume = {22}, | ||||
| 20 | + number = {2}, | ||||
| 21 | + pages = {492--530}, | ||||
| 22 | + doi = {10.1093/jjfinec/nbad005} | ||||
| 23 | +} | ||||
| 24 | + | ||||
| 25 | +@article{ball1968, | ||||
| 26 | + author = {Ball, Ray and Brown, Philip}, | ||||
| 27 | + title = {{An Empirical Evaluation of Accounting Income Numbers}}, | ||||
| 28 | + journal = {Journal of Accounting Research}, | ||||
| 29 | + year = {1968}, | ||||
| 30 | + volume = {6}, | ||||
| 31 | + number = {2}, | ||||
| 32 | + pages = {159}, | ||||
| 33 | + doi = {10.2307/2490232} | ||||
| 34 | +} | ||||
| 35 | + | ||||
| 36 | +@article{bernard1989, | ||||
| 37 | + author = {Bernard, Victor L. and Thomas, Jacob K.}, | ||||
| 38 | + title = {{Post-Earnings-Announcement Drift: Delayed Price Response or Risk Premium?}}, | ||||
| 39 | + journal = {Journal of Accounting Research}, | ||||
| 40 | + year = {1989}, | ||||
| 41 | + volume = {27}, | ||||
| 42 | + pages = {1}, | ||||
| 43 | + doi = {10.2307/2491062} | ||||
| 44 | +} | ||||
| 45 | + | ||||
| 46 | +@article{bernard1990, | ||||
| 47 | + author = {Bernard, Victor L. and Thomas, Jacob K.}, | ||||
| 48 | + title = {{Evidence that stock prices do not fully reflect the implications of current earnings for future earnings}}, | ||||
| 49 | + journal = {Journal of Accounting and Economics}, | ||||
| 50 | + year = {1990}, | ||||
| 51 | + volume = {13}, | ||||
| 52 | + number = {4}, | ||||
| 53 | + pages = {305--340}, | ||||
| 54 | + doi = {10.1016/0165-4101(90)90008-r} | ||||
| 55 | +} | ||||
| 56 | + | ||||
| 57 | +@article{sloan1996, | ||||
| 58 | + author = {Sloan, Richard G.}, | ||||
| 59 | + title = {{Do Stock Prices Fully Reflect Information in Accruals and Cash Flows About Future Earnings?}}, | ||||
| 60 | + journal = {The Accounting Review}, | ||||
| 61 | + year = {1996}, | ||||
| 62 | + volume = {71}, | ||||
| 63 | + number = {3}, | ||||
| 64 | + pages = {289--315}, | ||||
| 65 | + doi = {10.2308/tar-9608042309} | ||||
| 66 | +} | ||||
| 67 | + | ||||
| 68 | +@article{ou1989, | ||||
| 69 | + author = {Ou, Jane A. and Penman, Stephen H.}, | ||||
| 70 | + title = {{Financial statement analysis and the prediction of stock returns}}, | ||||
| 71 | + journal = {Journal of Accounting and Economics}, | ||||
| 72 | + year = {1989}, | ||||
| 73 | + volume = {11}, | ||||
| 74 | + number = {4}, | ||||
| 75 | + pages = {295--329}, | ||||
| 76 | + doi = {10.1016/0165-4101(89)90017-7} | ||||
| 77 | +} | ||||
| 78 | + | ||||
| 79 | +@article{kyle1985, | ||||
| 80 | + author = {Kyle, Albert S.}, | ||||
| 81 | + title = {{Continuous Auctions and Insider Trading}}, | ||||
| 82 | + journal = {Econometrica}, | ||||
| 83 | + year = {1985}, | ||||
| 84 | + volume = {53}, | ||||
| 85 | + number = {6}, | ||||
| 86 | + pages = {1315}, | ||||
| 87 | + doi = {10.2307/1913210} | ||||
| 88 | +} | ||||
| 89 | + | ||||
| 90 | +@article{easley1987, | ||||
| 91 | + author = {Easley, David and O'Hara, Maureen}, | ||||
| 92 | + title = {{Price, trade size, and information in securities markets}}, | ||||
| 93 | + journal = {Journal of Financial Economics}, | ||||
| 94 | + year = {1987}, | ||||
| 95 | + volume = {19}, | ||||
| 96 | + number = {1}, | ||||
| 97 | + pages = {69--90}, | ||||
| 98 | + doi = {10.1016/0304-405x(87)90029-8} | ||||
| 99 | +} | ||||
| 100 | + | ||||
| 101 | +@article{andersen2003, | ||||
| 102 | + author = {Andersen, Torben G. and Bollerslev, Tim and Diebold, Francis X. and Labys, Paul}, | ||||
| 103 | + title = {{Modeling and Forecasting Realized Volatility}}, | ||||
| 104 | + journal = {Econometrica}, | ||||
| 105 | + year = {2003}, | ||||
| 106 | + volume = {71}, | ||||
| 107 | + number = {2}, | ||||
| 108 | + pages = {579--625}, | ||||
| 109 | + doi = {10.1111/1468-0262.00418} | ||||
| 110 | +} | ||||
| 111 | + | ||||
| 112 | +@article{barndorff2004, | ||||
| 113 | + author = {Barndorff-Nielsen, O. E.}, | ||||
| 114 | + title = {{Power and Bipower Variation with Stochastic Volatility and Jumps}}, | ||||
| 115 | + journal = {Journal of Financial Econometrics}, | ||||
| 116 | + year = {2004}, | ||||
| 117 | + volume = {2}, | ||||
| 118 | + number = {1}, | ||||
| 119 | + pages = {1--37}, | ||||
| 120 | + doi = {10.1093/jjfinec/nbh001} | ||||
| 121 | +} | ||||
| 122 | + | ||||
| 123 | +@article{gu2020, | ||||
| 124 | + author = {Gu, Shihao and Kelly, Bryan and Xiu, Dacheng}, | ||||
| 125 | + title = {{Empirical Asset Pricing via Machine Learning}}, | ||||
| 126 | + journal = {The Review of Financial Studies}, | ||||
| 127 | + year = {2020}, | ||||
| 128 | + volume = {33}, | ||||
| 129 | + number = {5}, | ||||
| 130 | + pages = {2223--2273}, | ||||
| 131 | + doi = {10.1093/rfs/hhaa009} | ||||
| 132 | +} | ||||
| 133 | + | ||||
| 134 | +@article{giacomini2006, | ||||
| 135 | + author = {Giacomini, Raffaella and White, Halbert}, | ||||
| 136 | + title = {{Tests of Conditional Predictive Ability}}, | ||||
| 137 | + journal = {Econometrica}, | ||||
| 138 | + year = {2006}, | ||||
| 139 | + volume = {74}, | ||||
| 140 | + number = {6}, | ||||
| 141 | + pages = {1545--1578}, | ||||
| 142 | + doi = {10.1111/j.1468-0262.2006.00718.x} | ||||
| 143 | +} | ||||
| 144 | + | ||||
| 145 | +@article{diebold1995, | ||||
| 146 | + author = {Diebold, Francis X. and Mariano, Roberto S.}, | ||||
| 147 | + title = {{Comparing Predictive Accuracy}}, | ||||
| 148 | + journal = {Journal of Business \& Economic Statistics}, | ||||
| 149 | + year = {1995}, | ||||
| 150 | + volume = {13}, | ||||
| 151 | + number = {3}, | ||||
| 152 | + pages = {253--263}, | ||||
| 153 | + doi = {10.1080/07350015.1995.10524599} | ||||
| 154 | +} | ||||
| 155 | + | ||||
| 156 | +@article{hansen2005, | ||||
| 157 | + author = {Hansen, Peter Reinhard}, | ||||
| 158 | + title = {{A Test for Superior Predictive Ability}}, | ||||
| 159 | + journal = {Journal of Business \& Economic Statistics}, | ||||
| 160 | + year = {2005}, | ||||
| 161 | + volume = {23}, | ||||
| 162 | + number = {4}, | ||||
| 163 | + pages = {365--380}, | ||||
| 164 | + doi = {10.1198/073500105000000063} | ||||
| 165 | +} | ||||
| 166 | + | ||||
| 167 | +@article{fama2015, | ||||
| 168 | + author = {Fama, Eugene F. and French, Kenneth R.}, | ||||
| 169 | + title = {{A five-factor asset pricing model}}, | ||||
| 170 | + journal = {Journal of Financial Economics}, | ||||
| 171 | + year = {2015}, | ||||
| 172 | + volume = {116}, | ||||
| 173 | + number = {1}, | ||||
| 174 | + pages = {1--22}, | ||||
| 175 | + doi = {10.1016/j.jfineco.2014.10.010} | ||||
| 176 | +} | ||||
| 177 | + | ||||
| 178 | +@article{bollerslev2020good, | ||||
| 179 | + author = {Bollerslev, Tim and Li, Sophia Zhengzi and Zhao, Bingzhi}, | ||||
| 180 | + title = {{Good Volatility, Bad Volatility, and the Cross Section of Stock Returns}}, | ||||
| 181 | + journal = {Journal of Financial and Quantitative Analysis}, | ||||
| 182 | + year = {2020}, | ||||
| 183 | + volume = {55}, | ||||
| 184 | + number = {3}, | ||||
| 185 | + pages = {751--781}, | ||||
| 186 | + doi = {10.1017/s0022109019000097} | ||||
| 187 | +} | ||||
| 188 | + | ||||
| 189 | +@article{patton2015, | ||||
| 190 | + author = {Patton, Andrew J. and Sheppard, Kevin}, | ||||
| 191 | + title = {{Good Volatility, Bad Volatility: Signed Jumps and The Persistence of Volatility}}, | ||||
| 192 | + journal = {Review of Economics and Statistics}, | ||||
| 193 | + year = {2015}, | ||||
| 194 | + volume = {97}, | ||||
| 195 | + number = {3}, | ||||
| 196 | + pages = {683--697}, | ||||
| 197 | + doi = {10.1162/rest_a_00503} | ||||
| 198 | +} | ||||
| 199 | + | ||||
| 200 | +@article{chen2022, | ||||
| 201 | + author = {CHEN, XI and CHO, YANG HA (TONY) and DOU, YIWEI and LEV, BARUCH}, | ||||
| 202 | + title = {{Predicting Future Earnings Changes Using Machine Learning and Detailed Financial Data}}, | ||||
| 203 | + journal = {Journal of Accounting Research}, | ||||
| 204 | + year = {2022}, | ||||
| 205 | + volume = {60}, | ||||
| 206 | + number = {2}, | ||||
| 207 | + pages = {467--515}, | ||||
| 208 | + doi = {10.1111/1475-679x.12429} | ||||
| 209 | +} | ||||
| 210 | + | ||||
| 211 | +@article{piotroski2000, | ||||
| 212 | + author = {Piotroski, Joseph D.}, | ||||
| 213 | + title = {{Value Investing: The Use of Historical Financial Statement Information to Separate Winners from Losers}}, | ||||
| 214 | + journal = {Journal of Accounting Research}, | ||||
| 215 | + year = {2000}, | ||||
| 216 | + volume = {38}, | ||||
| 217 | + pages = {1}, | ||||
| 218 | + doi = {10.2307/2672906} | ||||
| 219 | +} | ||||
| 220 | + | ||||
| 221 | +@article{hirshleifer2009, | ||||
| 222 | + author = {HIRSHLEIFER, DAVID and LIM, SONYA SEONGYEON and TEOH, SIEW HONG}, | ||||
| 223 | + title = {{Driven to Distraction: Extraneous Events and Underreaction to Earnings News}}, | ||||
| 224 | + journal = {The Journal of Finance}, | ||||
| 225 | + year = {2009}, | ||||
| 226 | + volume = {64}, | ||||
| 227 | + number = {5}, | ||||
| 228 | + pages = {2289--2325}, | ||||
| 229 | + doi = {10.1111/j.1540-6261.2009.01501.x} | ||||
| 230 | +} | ||||
| 231 | + | ||||
| 232 | +@article{dellavigna2009, | ||||
| 233 | + author = {DELLAVIGNA, STEFANO and POLLET, JOSHUA M.}, | ||||
| 234 | + title = {{Investor Inattention and Friday Earnings Announcements}}, | ||||
| 235 | + journal = {The Journal of Finance}, | ||||
| 236 | + year = {2009}, | ||||
| 237 | + volume = {64}, | ||||
| 238 | + number = {2}, | ||||
| 239 | + pages = {709--749}, | ||||
| 240 | + doi = {10.1111/j.1540-6261.2009.01447.x} | ||||
| 241 | +} | ||||
| 242 | + | ||||
| 243 | +@article{loughran2011, | ||||
| 244 | + author = {LOUGHRAN, TIM and MCDONALD, BILL}, | ||||
| 245 | + title = {{When Is a Liability Not a Liability? Textual Analysis, Dictionaries, and 10-Ks}}, | ||||
| 246 | + journal = {The Journal of Finance}, | ||||
| 247 | + year = {2011}, | ||||
| 248 | + volume = {66}, | ||||
| 249 | + number = {1}, | ||||
| 250 | + pages = {35--65}, | ||||
| 251 | + doi = {10.1111/j.1540-6261.2010.01625.x} | ||||
| 252 | +} | ||||
| 253 | + | ||||
| 254 | +@article{bajgrowicz2016, | ||||
| 255 | + author = {Bajgrowicz, Pierre and Scaillet, Olivier and Treccani, Adrien}, | ||||
| 256 | + title = {{Jumps in High-Frequency Data: Spurious Detections, Dynamics, and News}}, | ||||
| 257 | + journal = {Management Science}, | ||||
| 258 | + year = {2016}, | ||||
| 259 | + volume = {62}, | ||||
| 260 | + number = {8}, | ||||
| 261 | + pages = {2198--2217}, | ||||
| 262 | + doi = {10.1287/mnsc.2015.2234} | ||||
| 263 | +} | ||||
| 264 | + | ||||
| 265 | +@article{lee2008, | ||||
| 266 | + author = {Lee, Suzanne S. and Mykland, Per A.}, | ||||
| 267 | + title = {{Jumps in Financial Markets: A New Nonparametric Test and Jump Dynamics}}, | ||||
| 268 | + journal = {Review of Financial Studies}, | ||||
| 269 | + year = {2008}, | ||||
| 270 | + volume = {21}, | ||||
| 271 | + number = {6}, | ||||
| 272 | + pages = {2535--2563}, | ||||
| 273 | + doi = {10.1093/rfs/hhm056} | ||||
| 274 | +} | ||||
| 275 | + | ||||
| 276 | +@article{bollerslev2018risk, | ||||
| 277 | + author = {Bollerslev, Tim and Hood, Benjamin and Huss, John and Pedersen, Lasse Heje}, | ||||
| 278 | + title = {{Risk Everywhere: Modeling and Managing Volatility}}, | ||||
| 279 | + journal = {The Review of Financial Studies}, | ||||
| 280 | + year = {2018}, | ||||
| 281 | + volume = {31}, | ||||
| 282 | + number = {7}, | ||||
| 283 | + pages = {2729--2773}, | ||||
| 284 | + doi = {10.1093/rfs/hhy041} | ||||
| 285 | +} | ||||
| 286 | + | ||||
| 287 | +@article{hendershott2011, | ||||
| 288 | + author = {HENDERSHOTT, TERRENCE and JONES, CHARLES M. and MENKVELD, ALBERT J.}, | ||||
| 289 | + title = {{Does Algorithmic Trading Improve Liquidity?}}, | ||||
| 290 | + journal = {The Journal of Finance}, | ||||
| 291 | + year = {2011}, | ||||
| 292 | + volume = {66}, | ||||
| 293 | + number = {1}, | ||||
| 294 | + pages = {1--33}, | ||||
| 295 | + doi = {10.1111/j.1540-6261.2010.01624.x} | ||||
| 296 | +} | ||||
| 297 | + | ||||
| 298 | +@article{richardson2005, | ||||
| 299 | + author = {Richardson, Scott A. and Sloan, Richard G. and Soliman, Mark T. and Tuna, İrem}, | ||||
| 300 | + title = {{Accrual reliability, earnings persistence and stock prices}}, | ||||
| 301 | + journal = {Journal of Accounting and Economics}, | ||||
| 302 | + year = {2005}, | ||||
| 303 | + volume = {39}, | ||||
| 304 | + number = {3}, | ||||
| 305 | + pages = {437--485}, | ||||
| 306 | + doi = {10.1016/j.jacceco.2005.04.005} | ||||
| 307 | +} | ||||
| 308 | + | ||||
| 309 | +@article{beneish1999, | ||||
| 310 | + author = {Beneish, Messod D.}, | ||||
| 311 | + title = {{The Detection of Earnings Manipulation}}, | ||||
| 312 | + journal = {Financial Analysts Journal}, | ||||
| 313 | + year = {1999}, | ||||
| 314 | + volume = {55}, | ||||
| 315 | + number = {5}, | ||||
| 316 | + pages = {24--36}, | ||||
| 317 | + doi = {10.2469/faj.v55.n5.2296} | ||||
| 318 | +} | ||||
| 319 | + | ||||
| 320 | +@article{campbell2008, | ||||
| 321 | + author = {CAMPBELL, JOHN Y. and HILSCHER, JENS and SZILAGYI, JAN}, | ||||
| 322 | + title = {{In Search of Distress Risk}}, | ||||
| 323 | + journal = {The Journal of Finance}, | ||||
| 324 | + year = {2008}, | ||||
| 325 | + volume = {63}, | ||||
| 326 | + number = {6}, | ||||
| 327 | + pages = {2899--2939}, | ||||
| 328 | + doi = {10.1111/j.1540-6261.2008.01416.x} | ||||
| 329 | +} | ||||
| 330 | + | ||||
| 331 | +@article{fama1973, | ||||
| 332 | + author = {Fama, Eugene F. and MacBeth, James D.}, | ||||
| 333 | + title = {{Risk, Return, and Equilibrium: Empirical Tests}}, | ||||
| 334 | + journal = {Journal of Political Economy}, | ||||
| 335 | + year = {1973}, | ||||
| 336 | + volume = {81}, | ||||
| 337 | + number = {3}, | ||||
| 338 | + pages = {607--636}, | ||||
| 339 | + doi = {10.1086/260061} | ||||
| 340 | +} | ||||
| 341 | + | ||||
| 342 | +@article{petersen2009, | ||||
| 343 | + author = {Petersen, Mitchell A.}, | ||||
| 344 | + title = {{Estimating Standard Errors in Finance Panel Data Sets: Comparing Approaches}}, | ||||
| 345 | + journal = {Review of Financial Studies}, | ||||
| 346 | + year = {2009}, | ||||
| 347 | + volume = {22}, | ||||
| 348 | + number = {1}, | ||||
| 349 | + pages = {435--480}, | ||||
| 350 | + doi = {10.1093/rfs/hhn053} | ||||
| 351 | +} | ||||
| 352 | + | ||||
| 353 | +@article{cameron2011, | ||||
| 354 | + author = {Cameron, A. Colin and Gelbach, Jonah B. and Miller, Douglas L.}, | ||||
| 355 | + title = {{Robust Inference With Multiway Clustering}}, | ||||
| 356 | + journal = {Journal of Business \& Economic Statistics}, | ||||
| 357 | + year = {2011}, | ||||
| 358 | + volume = {29}, | ||||
| 359 | + number = {2}, | ||||
| 360 | + pages = {238--249}, | ||||
| 361 | + doi = {10.1198/jbes.2010.07136} | ||||
| 362 | +} | ||||
| 363 | + | ||||
| 364 | +@article{novymarx2016, | ||||
| 365 | + author = {Novy-Marx, Robert and Velikov, Mihail}, | ||||
| 366 | + title = {{A Taxonomy of Anomalies and Their Trading Costs}}, | ||||
| 367 | + journal = {Review of Financial Studies}, | ||||
| 368 | + year = {2016}, | ||||
| 369 | + volume = {29}, | ||||
| 370 | + number = {1}, | ||||
| 371 | + pages = {104--147}, | ||||
| 372 | + doi = {10.1093/rfs/hhv063} | ||||
| 373 | +} | ||||
| 374 | + | ||||
| 375 | +@article{bollerslev2016beta, | ||||
| 376 | + author = {Bollerslev, Tim and Li, Sophia Zhengzi and Todorov, Viktor}, | ||||
| 377 | + title = {{Roughing up beta: Continuous versus discontinuous betas and the cross section of expected stock returns}}, | ||||
| 378 | + journal = {Journal of Financial Economics}, | ||||
| 379 | + year = {2016}, | ||||
| 380 | + volume = {120}, | ||||
| 381 | + number = {3}, | ||||
| 382 | + pages = {464--490}, | ||||
| 383 | + doi = {10.1016/j.jfineco.2016.02.001} | ||||
| 384 | +} | ||||
| 385 | + | ||||
| 386 | +@article{lo1988, | ||||
| 387 | + author = {Lo, Andrew W. and MacKinlay, A. Craig}, | ||||
| 388 | + title = {{Stock Market Prices Do Not Follow Random Walks: Evidence from a Simple Specification Test}}, | ||||
| 389 | + journal = {Review of Financial Studies}, | ||||
| 390 | + year = {1988}, | ||||
| 391 | + volume = {1}, | ||||
| 392 | + number = {1}, | ||||
| 393 | + pages = {41--66}, | ||||
| 394 | + doi = {10.1093/rfs/1.1.41} | ||||
| 395 | +} | ||||
| 396 | + | ||||
| 397 | +@article{freyberger2020, | ||||
| 398 | + author = {Freyberger, Joachim and Neuhierl, Andreas and Weber, Michael}, | ||||
| 399 | + title = {{Dissecting Characteristics Nonparametrically}}, | ||||
| 400 | + journal = {The Review of Financial Studies}, | ||||
| 401 | + year = {2020}, | ||||
| 402 | + volume = {33}, | ||||
| 403 | + number = {5}, | ||||
| 404 | + pages = {2326--2377}, | ||||
| 405 | + doi = {10.1093/rfs/hhz123} | ||||
| 406 | +} | ||||
| 407 | + | ||||
| 408 | +@article{bollerslev2016errors, | ||||
| 409 | + author = {Bollerslev, Tim and Patton, Andrew J. and Quaedvlieg, Rogier}, | ||||
| 410 | + title = {{Exploiting the errors: A simple approach for improved volatility forecasting}}, | ||||
| 411 | + journal = {Journal of Econometrics}, | ||||
| 412 | + year = {2016}, | ||||
| 413 | + volume = {192}, | ||||
| 414 | + number = {1}, | ||||
| 415 | + pages = {1--18}, | ||||
| 416 | + doi = {10.1016/j.jeconom.2015.10.007} | ||||
| 417 | +} | ||||
| 418 | + | ||||
| 419 | +@article{liu2015, | ||||
| 420 | + author = {Liu, Lily Y. and Patton, Andrew J. and Sheppard, Kevin}, | ||||
| 421 | + title = {{Does anything beat 5-minute RV? A comparison of realized measures across multiple asset classes}}, | ||||
| 422 | + journal = {Journal of Econometrics}, | ||||
| 423 | + year = {2015}, | ||||
| 424 | + volume = {187}, | ||||
| 425 | + number = {1}, | ||||
| 426 | + pages = {293--311}, | ||||
| 427 | + doi = {10.1016/j.jeconom.2015.02.008} | ||||
| 428 | +} | ||||
| 429 | + | ||||
| 430 | +@article{andersen1998, | ||||
| 431 | + author = {Andersen, Torben G. and Bollerslev, Tim}, | ||||
| 432 | + title = {{Answering the Skeptics: Yes, Standard Volatility Models do Provide Accurate Forecasts}}, | ||||
| 433 | + journal = {International Economic Review}, | ||||
| 434 | + year = {1998}, | ||||
| 435 | + volume = {39}, | ||||
| 436 | + number = {4}, | ||||
| 437 | + pages = {885}, | ||||
| 438 | + doi = {10.2307/2527343} | ||||
| 439 | +} | ||||
| 440 | + | ||||
| 441 | +@article{aboody2010, | ||||
| 442 | + author = {Aboody, David and Lehavy, Reuven and Trueman, Brett}, | ||||
| 443 | + title = {{Limited attention and the earnings announcement returns of past stock market winners}}, | ||||
| 444 | + journal = {Review of Accounting Studies}, | ||||
| 445 | + year = {2010}, | ||||
| 446 | + volume = {15}, | ||||
| 447 | + number = {2}, | ||||
| 448 | + pages = {317--344}, | ||||
| 449 | + doi = {10.1007/s11142-009-9104-9} | ||||
| 450 | +} | ||||
| 451 | + | ||||
| 452 | +@article{kothari2001, | ||||
| 453 | + author = {Kothari, S.P}, | ||||
| 454 | + title = {{Capital markets research in accounting}}, | ||||
| 455 | + journal = {Journal of Accounting and Economics}, | ||||
| 456 | + year = {2001}, | ||||
| 457 | + volume = {31}, | ||||
| 458 | + number = {1-3}, | ||||
| 459 | + pages = {105--231}, | ||||
| 460 | + doi = {10.1016/s0165-4101(01)00030-1} | ||||
| 461 | +} | ||||
| 462 | + | ||||
| 463 | +@article{easley2012, | ||||
| 464 | + author = {Easley, David and López de Prado, Marcos M. and O'Hara, Maureen}, | ||||
| 465 | + title = {{Flow Toxicity and Liquidity in a High-frequency World}}, | ||||
| 466 | + journal = {Review of Financial Studies}, | ||||
| 467 | + year = {2012}, | ||||
| 468 | + volume = {25}, | ||||
| 469 | + number = {5}, | ||||
| 470 | + pages = {1457--1493}, | ||||
| 471 | + doi = {10.1093/rfs/hhs053} | ||||
| 472 | +} | ||||
| 473 | + | ||||
| 474 | +@article{hou2015, | ||||
| 475 | + author = {Hou, Kewei and Xue, Chen and Zhang, Lu}, | ||||
| 476 | + title = {{Digesting Anomalies: An Investment Approach}}, | ||||
| 477 | + journal = {Review of Financial Studies}, | ||||
| 478 | + year = {2015}, | ||||
| 479 | + volume = {28}, | ||||
| 480 | + number = {3}, | ||||
| 481 | + pages = {650--705}, | ||||
| 482 | + doi = {10.1093/rfs/hhu068} | ||||
| 483 | +} | ||||
| 484 | + | ||||
| 485 | +@article{dechow2010, | ||||
| 486 | + author = {Dechow, Patricia and Ge, Weili and Schrand, Catherine}, | ||||
| 487 | + title = {{Understanding earnings quality: A review of the proxies, their determinants and their consequences}}, | ||||
| 488 | + journal = {Journal of Accounting and Economics}, | ||||
| 489 | + year = {2010}, | ||||
| 490 | + volume = {50}, | ||||
| 491 | + number = {2-3}, | ||||
| 492 | + pages = {344--401}, | ||||
| 493 | + doi = {10.1016/j.jacceco.2010.09.001} | ||||
| 494 | +} | ||||
| 495 | + | ||||
| 496 | +@article{fama1970, | ||||
| 497 | + author = {Fama, Eugene F.}, | ||||
| 498 | + title = {{Efficient Capital Markets: A Review of Theory and Empirical Work}}, | ||||
| 499 | + journal = {The Journal of Finance}, | ||||
| 500 | + year = {1970}, | ||||
| 501 | + volume = {25}, | ||||
| 502 | + number = {2}, | ||||
| 503 | + pages = {383}, | ||||
| 504 | + doi = {10.2307/2325486} | ||||
| 505 | +} | ||||
| 506 | + | ||||
| 507 | +@article{bollerslev2011tails, | ||||
| 508 | + author = {BOLLERSLEV, TIM and TODOROV, VIKTOR}, | ||||
| 509 | + title = {{Tails, Fears, and Risk Premia}}, | ||||
| 510 | + journal = {The Journal of Finance}, | ||||
| 511 | + year = {2011}, | ||||
| 512 | + volume = {66}, | ||||
| 513 | + number = {6}, | ||||
| 514 | + pages = {2165--2211}, | ||||
| 515 | + doi = {10.1111/j.1540-6261.2011.01695.x} | ||||
| 516 | +} | ||||
| 517 | + | ||||
| 518 | +@article{hirshleifer2003, | ||||
| 519 | + author = {Hirshleifer, David and Teoh, Siew Hong}, | ||||
| 520 | + title = {{Limited attention, information disclosure, and financial reporting}}, | ||||
| 521 | + journal = {Journal of Accounting and Economics}, | ||||
| 522 | + year = {2003}, | ||||
| 523 | + volume = {36}, | ||||
| 524 | + number = {1-3}, | ||||
| 525 | + pages = {337--386}, | ||||
| 526 | + doi = {10.1016/j.jacceco.2003.10.002} | ||||
| 527 | +} | ||||
| 528 | + | ||||
| 529 | +@article{savor2016, | ||||
| 530 | + author = {SAVOR, PAVEL and WILSON, MUNGO}, | ||||
| 531 | + title = {{Earnings Announcements and Systematic Risk}}, | ||||
| 532 | + journal = {The Journal of Finance}, | ||||
| 533 | + year = {2016}, | ||||
| 534 | + volume = {71}, | ||||
| 535 | + number = {1}, | ||||
| 536 | + pages = {83--138}, | ||||
| 537 | + doi = {10.1111/jofi.12361} | ||||
| 538 | +} | ||||
| 539 | + | ||||
| 540 | +@article{budish2015, | ||||
| 541 | + author = {Budish, Eric and Cramton, Peter and Shim, John}, | ||||
| 542 | + title = {{The High-Frequency Trading Arms Race: Frequent Batch Auctions as a Market Design Response *}}, | ||||
| 543 | + journal = {The Quarterly Journal of Economics}, | ||||
| 544 | + year = {2015}, | ||||
| 545 | + volume = {130}, | ||||
| 546 | + number = {4}, | ||||
| 547 | + pages = {1547--1621}, | ||||
| 548 | + doi = {10.1093/qje/qjv027} | ||||
| 549 | +} | ||||
| 550 | + | ||||
| 551 | +@article{chen2024deep, | ||||
| 552 | + author = {Chen, Luyang and Pelger, Markus and Zhu, Jason}, | ||||
| 553 | + title = {{Deep Learning in Asset Pricing}}, | ||||
| 554 | + journal = {Management Science}, | ||||
| 555 | + year = {2024}, | ||||
| 556 | + volume = {70}, | ||||
| 557 | + number = {2}, | ||||
| 558 | + pages = {714--750}, | ||||
| 559 | + doi = {10.1287/mnsc.2023.4695} | ||||
| 560 | +} | ||||
| 561 | + | ||||
| 562 | +@article{kozak2020, | ||||
| 563 | + author = {Kozak, Serhiy and Nagel, Stefan and Santosh, Shrihari}, | ||||
| 564 | + title = {{Shrinking the cross-section}}, | ||||
| 565 | + journal = {Journal of Financial Economics}, | ||||
| 566 | + year = {2020}, | ||||
| 567 | + volume = {135}, | ||||
| 568 | + number = {2}, | ||||
| 569 | + pages = {271--292}, | ||||
| 570 | + doi = {10.1016/j.jfineco.2019.06.008} | ||||
| 571 | +} | ||||
| 572 | + | ||||
| 573 | +@article{brogaard2019, | ||||
| 574 | + author = {BROGAARD, JONATHAN and HENDERSHOTT, TERRENCE and RIORDAN, RYAN}, | ||||
| 575 | + title = {{Price Discovery without Trading: Evidence from Limit Orders}}, | ||||
| 576 | + journal = {The Journal of Finance}, | ||||
| 577 | + year = {2019}, | ||||
| 578 | + volume = {74}, | ||||
| 579 | + number = {4}, | ||||
| 580 | + pages = {1621--1658}, | ||||
| 581 | + doi = {10.1111/jofi.12769} | ||||
| 582 | +} | ||||
| 583 | + | ||||
| 584 | +@article{ang2006, | ||||
| 585 | + author = {ANG, ANDREW and HODRICK, ROBERT J. and XING, YUHANG and ZHANG, XIAOYAN}, | ||||
| 586 | + title = {{The Cross-Section of Volatility and Expected Returns}}, | ||||
| 587 | + journal = {The Journal of Finance}, | ||||
| 588 | + year = {2006}, | ||||
| 589 | + volume = {61}, | ||||
| 590 | + number = {1}, | ||||
| 591 | + pages = {259--299}, | ||||
| 592 | + doi = {10.1111/j.1540-6261.2006.00836.x} | ||||
| 593 | +} | ||||
| 594 | + | ||||
| 595 | +@article{skinner2002, | ||||
| 596 | + author = {Skinner, Douglas J. and Sloan, Richard G.}, | ||||
| 597 | + title = {{Earnings Surprises, Growth Expectations, and Stock Returns or Don't Let an Earnings Torpedo Sink Your Portfolio}}, | ||||
| 598 | + journal = {Review of Accounting Studies}, | ||||
| 599 | + year = {2002}, | ||||
| 600 | + volume = {7}, | ||||
| 601 | + number = {2-3}, | ||||
| 602 | + pages = {289--312}, | ||||
| 603 | + doi = {10.1023/a:1020294523516} | ||||
| 604 | +} | ||||
| 605 | + | ||||
| 606 | +@article{levi2015, | ||||
| 607 | + author = {Levi, Shai and Zhang, Xiao-Jun}, | ||||
| 608 | + title = {{Asymmetric decrease in liquidity trading before earnings announcements and the announcement return premium}}, | ||||
| 609 | + journal = {Journal of Financial Economics}, | ||||
| 610 | + year = {2015}, | ||||
| 611 | + volume = {118}, | ||||
| 612 | + number = {2}, | ||||
| 613 | + pages = {383--398}, | ||||
| 614 | + doi = {10.1016/j.jfineco.2015.08.003} | ||||
| 615 | +} | ||||
| 616 | + | ||||
| 617 | +@article{campbell1993, | ||||
| 618 | + author = {Campbell, J. Y. and Grossman, S. J. and Wang, J.}, | ||||
| 619 | + title = {{Trading Volume and Serial Correlation in Stock Returns}}, | ||||
| 620 | + journal = {The Quarterly Journal of Economics}, | ||||
| 621 | + year = {1993}, | ||||
| 622 | + volume = {108}, | ||||
| 623 | + number = {4}, | ||||
| 624 | + pages = {905--939}, | ||||
| 625 | + doi = {10.2307/2118454} | ||||
| 626 | +} | ||||
| 627 | + | ||||
| 628 | +@article{fang2009, | ||||
| 629 | + author = {FANG, LILY and PERESS, JOEL}, | ||||
| 630 | + title = {{Media Coverage and the Cross-section of Stock Returns}}, | ||||
| 631 | + journal = {The Journal of Finance}, | ||||
| 632 | + year = {2009}, | ||||
| 633 | + volume = {64}, | ||||
| 634 | + number = {5}, | ||||
| 635 | + pages = {2023--2052}, | ||||
| 636 | + doi = {10.1111/j.1540-6261.2009.01493.x} | ||||
| 637 | +} | ||||
| 638 | + | ||||
| 639 | +@article{beaver1980, | ||||
| 640 | + author = {Beaver, William and Lambert, Richard and Morse, Dale}, | ||||
| 641 | + title = {{The information content of security prices}}, | ||||
| 642 | + journal = {Journal of Accounting and Economics}, | ||||
| 643 | + year = {1980}, | ||||
| 644 | + volume = {2}, | ||||
| 645 | + number = {1}, | ||||
| 646 | + pages = {3--28}, | ||||
| 647 | + doi = {10.1016/0165-4101(80)90013-0} | ||||
| 648 | +} | ||||
| 649 | + | ||||
| 650 | +@article{kothari1992, | ||||
| 651 | + author = {Kothari, S.P and Sloan, Richard G}, | ||||
| 652 | + title = {{Information in prices about future earnings}}, | ||||
| 653 | + journal = {Journal of Accounting and Economics}, | ||||
| 654 | + year = {1992}, | ||||
| 655 | + volume = {15}, | ||||
| 656 | + number = {2-3}, | ||||
| 657 | + pages = {143--171}, | ||||
| 658 | + doi = {10.1016/0165-4101(92)90016-u} | ||||
| 659 | +} | ||||
| 660 | + | ||||
| 661 | +@article{collins1994, | ||||
| 662 | + author = {Collins, Daniel W. and Kothari, S.P. and Shanken, Jay and Sloan, Richard G.}, | ||||
| 663 | + title = {{Lack of timeliness and noise as explanations for the low contemporaneuos return-earnings association}}, | ||||
| 664 | + journal = {Journal of Accounting and Economics}, | ||||
| 665 | + year = {1994}, | ||||
| 666 | + volume = {18}, | ||||
| 667 | + number = {3}, | ||||
| 668 | + pages = {289--324}, | ||||
| 669 | + doi = {10.1016/0165-4101(94)90024-8} | ||||
| 670 | +} | ||||
| 671 | + | ||||
| 672 | +@article{foster1977, | ||||
| 673 | + author = {Foster, George}, | ||||
| 674 | + title = {{Quarterly Accounting Data: Time-Series Properties and Predicative-Ability Results.}}, | ||||
| 675 | + journal = {The Accounting Review}, | ||||
| 676 | + year = {1977}, | ||||
| 677 | + volume = {52}, | ||||
| 678 | + number = {1}, | ||||
| 679 | + pages = {1--21}, | ||||
| 680 | + doi = {10.2308/tar-4493420} | ||||
| 681 | +} | ||||
| 682 | + | ||||
| 683 | +@article{weller2018, | ||||
| 684 | + author = {Weller, Brian M.}, | ||||
| 685 | + title = {{Does Algorithmic Trading Reduce Information Acquisition?}}, | ||||
| 686 | + journal = {The Review of Financial Studies}, | ||||
| 687 | + year = {2018}, | ||||
| 688 | + volume = {31}, | ||||
| 689 | + number = {6}, | ||||
| 690 | + pages = {2184--2226}, | ||||
| 691 | + doi = {10.1093/rfs/hhx137} | ||||
| 692 | +} | ||||
| 693 | + | ||||
| 694 | +@article{bollerslev2018volume, | ||||
| 695 | + author = {Bollerslev, Tim and Li, Jia and Xue, Yuan}, | ||||
| 696 | + title = {{Volume, Volatility, and Public News Announcements}}, | ||||
| 697 | + journal = {The Review of Economic Studies}, | ||||
| 698 | + year = {2018}, | ||||
| 699 | + volume = {85}, | ||||
| 700 | + number = {4}, | ||||
| 701 | + pages = {2005--2041}, | ||||
| 702 | + doi = {10.1093/restud/rdy003} | ||||
| 703 | +} | ||||
| 704 | + | ||||
| 705 | +@article{patton2012, | ||||
| 706 | + author = {Patton, Andrew J. and Verardo, Michela}, | ||||
| 707 | + title = {{Does Beta Move with News? Firm-Specific Information Flows and Learning about Profitability}}, | ||||
| 708 | + journal = {Review of Financial Studies}, | ||||
| 709 | + year = {2012}, | ||||
| 710 | + volume = {25}, | ||||
| 711 | + number = {9}, | ||||
| 712 | + pages = {2789--2839}, | ||||
| 713 | + doi = {10.1093/rfs/hhs073} | ||||
| 714 | +} | ||||
| 715 | + | ||||
| 716 | +@article{kaniel2012, | ||||
| 717 | + author = {KANIEL, RON and LIU, SHUMING and SAAR, GIDEON and TITMAN, SHERIDAN}, | ||||
| 718 | + title = {{Individual Investor Trading and Return Patterns around Earnings Announcements}}, | ||||
| 719 | + journal = {The Journal of Finance}, | ||||
| 720 | + year = {2012}, | ||||
| 721 | + volume = {67}, | ||||
| 722 | + number = {2}, | ||||
| 723 | + pages = {639--680}, | ||||
| 724 | + doi = {10.1111/j.1540-6261.2012.01727.x} | ||||
| 725 | +} | ||||
| 726 | + | ||||
| 727 | +@article{christophe2004, | ||||
| 728 | + author = {Christophe, Stephen E. and Ferri, Michael G. and Angel, James J.}, | ||||
| 729 | + title = {{Short-Selling Prior to Earnings Announcements}}, | ||||
| 730 | + journal = {The Journal of Finance}, | ||||
| 731 | + year = {2004}, | ||||
| 732 | + volume = {59}, | ||||
| 733 | + number = {4}, | ||||
| 734 | + pages = {1845--1876}, | ||||
| 735 | + doi = {10.1111/j.1540-6261.2004.00681.x} | ||||
| 736 | +} | ||||
| 737 | + | ||||
| 738 | +@article{berkman2009, | ||||
| 739 | + author = {Berkman, Henk and Dimitrov, Valentin and Jain, Prem C. and Koch, Paul D. and Tice, Sheri}, | ||||
| 740 | + title = {{Sell on the news: Differences of opinion, short-sales constraints, and returns around earnings announcements☆}}, | ||||
| 741 | + journal = {Journal of Financial Economics}, | ||||
| 742 | + year = {2009}, | ||||
| 743 | + volume = {92}, | ||||
| 744 | + number = {3}, | ||||
| 745 | + pages = {376--399}, | ||||
| 746 | + doi = {10.1016/j.jfineco.2008.04.009} | ||||
| 747 | +} | ||||
| 748 | + | ||||
| 749 | +@article{hendershott2015, | ||||
| 750 | + author = {Hendershott, Terrence and Livdan, Dmitry and Schürhoff, Norman}, | ||||
| 751 | + title = {{Are institutions informed about news?}}, | ||||
| 752 | + journal = {Journal of Financial Economics}, | ||||
| 753 | + year = {2015}, | ||||
| 754 | + volume = {117}, | ||||
| 755 | + number = {2}, | ||||
| 756 | + pages = {249--287}, | ||||
| 757 | + doi = {10.1016/j.jfineco.2015.03.007} | ||||
| 758 | +} | ||||
| 759 | + | ||||
| 760 | +@article{lee2012, | ||||
| 761 | + author = {Lee, Suzanne S.}, | ||||
| 762 | + title = {{Jumps and Information Flow in Financial Markets}}, | ||||
| 763 | + journal = {Review of Financial Studies}, | ||||
| 764 | + year = {2012}, | ||||
| 765 | + volume = {25}, | ||||
| 766 | + number = {2}, | ||||
| 767 | + pages = {439--479}, | ||||
| 768 | + doi = {10.1093/rfs/hhr084} | ||||
| 769 | +} | ||||
| 770 | + | ||||
| 771 | +@article{cao2024, | ||||
| 772 | + author = {Cao, Sean and Jiang, Wei and Wang, Junbo and Yang, Baozhong}, | ||||
| 773 | + title = {{From Man vs. Machine to Man + Machine: The art and AI of stock analyses}}, | ||||
| 774 | + journal = {Journal of Financial Economics}, | ||||
| 775 | + year = {2024}, | ||||
| 776 | + volume = {160}, | ||||
| 777 | + pages = {103910}, | ||||
| 778 | + doi = {10.1016/j.jfineco.2024.103910} | ||||
| 779 | +} | ||||
| 780 | + | ||||
| 781 | +@article{bali2023, | ||||
| 782 | + author = {Bali, Turan G and Beckmeyer, Heiner and Mörke, Mathis and Weigert, Florian}, | ||||
| 783 | + title = {{Option Return Predictability with Machine Learning and Big Data}}, | ||||
| 784 | + journal = {The Review of Financial Studies}, | ||||
| 785 | + year = {2023}, | ||||
| 786 | + volume = {36}, | ||||
| 787 | + number = {9}, | ||||
| 788 | + pages = {3548--3602}, | ||||
| 789 | + doi = {10.1093/rfs/hhad017} | ||||
| 790 | +} | ||||
| 791 | + | ||||
| 792 | +@article{easton2024, | ||||
| 793 | + author = {Easton, Peter D. and Kapons, Martin M. and Monahan, Steven J. and Schütt, Harm H. and Weisbrod, Eric H.}, | ||||
| 794 | + title = {{Forecasting Earnings Using \emph{k}-Nearest Neighbors}}, | ||||
| 795 | + journal = {The Accounting Review}, | ||||
| 796 | + year = {2024}, | ||||
| 797 | + volume = {99}, | ||||
| 798 | + number = {3}, | ||||
| 799 | + pages = {115--140}, | ||||
| 800 | + doi = {10.2308/tar-2021-0478} | ||||
| 801 | +} | ||||
| 802 | + | ||||
| 803 | +@article{so2013, | ||||
| 804 | + author = {So, Eric C.}, | ||||
| 805 | + title = {{A new approach to predicting analyst forecast errors: Do investors overweight analyst forecasts?}}, | ||||
| 806 | + journal = {Journal of Financial Economics}, | ||||
| 807 | + year = {2013}, | ||||
| 808 | + volume = {108}, | ||||
| 809 | + number = {3}, | ||||
| 810 | + pages = {615--640}, | ||||
| 811 | + doi = {10.1016/j.jfineco.2013.02.002} | ||||
| 812 | +} | ||||
| 813 | + | ||||
| 814 | +@article{hou2012, | ||||
| 815 | + author = {Hou, Kewei and van Dijk, Mathijs A. and Zhang, Yinglei}, | ||||
| 816 | + title = {{The implied cost of capital: A new approach}}, | ||||
| 817 | + journal = {Journal of Accounting and Economics}, | ||||
| 818 | + year = {2012}, | ||||
| 819 | + volume = {53}, | ||||
| 820 | + number = {3}, | ||||
| 821 | + pages = {504--526}, | ||||
| 822 | + doi = {10.1016/j.jacceco.2011.12.001} | ||||
| 823 | +} | ||||
| 824 | + | ||||
| 825 | +@article{hansen2006, | ||||
| 826 | + author = {Hansen, Peter R and Lunde, Asger}, | ||||
| 827 | + title = {{Realized Variance and Market Microstructure Noise}}, | ||||
| 828 | + journal = {Journal of Business \& Economic Statistics}, | ||||
| 829 | + year = {2006}, | ||||
| 830 | + volume = {24}, | ||||
| 831 | + number = {2}, | ||||
| 832 | + pages = {127--161}, | ||||
| 833 | + doi = {10.1198/073500106000000071} | ||||
| 834 | +} | ||||
| 835 | + | ||||
| 836 | +@article{barndorff2008, | ||||
| 837 | + author = {Barndorff-Nielsen, Ole E. and Hansen, Peter Reinhard and Lunde, Asger and Shephard, Neil}, | ||||
| 838 | + title = {{Designing Realized Kernels to Measure the ex post Variation of Equity Prices in the Presence of Noise}}, | ||||
| 839 | + journal = {Econometrica}, | ||||
| 840 | + year = {2008}, | ||||
| 841 | + volume = {76}, | ||||
| 842 | + number = {6}, | ||||
| 843 | + pages = {1481--1536}, | ||||
| 844 | + doi = {10.3982/ecta6495} | ||||
| 845 | +} | ||||
| 846 | + | ||||
| 847 | +@article{vankervel2019, | ||||
| 848 | + author = {VAN KERVEL, VINCENT and MENKVELD, ALBERT J.}, | ||||
| 849 | + title = {{High-Frequency Trading around Large Institutional Orders}}, | ||||
| 850 | + journal = {The Journal of Finance}, | ||||
| 851 | + year = {2019}, | ||||
| 852 | + volume = {74}, | ||||
| 853 | + number = {3}, | ||||
| 854 | + pages = {1091--1137}, | ||||
| 855 | + doi = {10.1111/jofi.12759} | ||||
| 856 | +} | ||||
| 857 | + | ||||
| 858 | +@article{avramov2023, | ||||
| 859 | + author = {Avramov, Doron and Cheng, Si and Metzker, Lior}, | ||||
| 860 | + title = {{Machine Learning vs. Economic Restrictions: Evidence from Stock Return Predictability}}, | ||||
| 861 | + journal = {Management Science}, | ||||
| 862 | + year = {2023}, | ||||
| 863 | + volume = {69}, | ||||
| 864 | + number = {5}, | ||||
| 865 | + pages = {2587--2619}, | ||||
| 866 | + doi = {10.1287/mnsc.2022.4449} | ||||
| 867 | +} | ||||
| 868 | + | ||||
| 869 | +@article{chordia2020, | ||||
| 870 | + author = {Chordia, Tarun and Goyal, Amit and Saretto, Alessio}, | ||||
| 871 | + title = {{Anomalies and False Rejections}}, | ||||
| 872 | + journal = {The Review of Financial Studies}, | ||||
| 873 | + year = {2020}, | ||||
| 874 | + volume = {33}, | ||||
| 875 | + number = {5}, | ||||
| 876 | + pages = {2134--2179}, | ||||
| 877 | + doi = {10.1093/rfs/hhaa018} | ||||
| 878 | +} | ||||
| 879 | + | ||||
| 880 | +@article{barber2013, | ||||
| 881 | + author = {Barber, Brad M. and De George, Emmanuel T. and Lehavy, Reuven and Trueman, Brett}, | ||||
| 882 | + title = {{The earnings announcement premium around the globe}}, | ||||
| 883 | + journal = {Journal of Financial Economics}, | ||||
| 884 | + year = {2013}, | ||||
| 885 | + volume = {108}, | ||||
| 886 | + number = {1}, | ||||
| 887 | + pages = {118--138}, | ||||
| 888 | + doi = {10.1016/j.jfineco.2012.10.006} | ||||
| 889 | +} | ||||
| 890 | + | ||||
| 891 | +@article{politis1994, | ||||
| 892 | + author = {Politis, Dimitris N. and Romano, Joseph P.}, | ||||
| 893 | + title = {{The Stationary Bootstrap}}, | ||||
| 894 | + journal = {Journal of the American Statistical Association}, | ||||
| 895 | + year = {1994}, | ||||
| 896 | + volume = {89}, | ||||
| 897 | + number = {428}, | ||||
| 898 | + pages = {1303--1313}, | ||||
| 899 | + doi = {10.1080/01621459.1994.10476870} | ||||
| 900 | +} | ||||
| 901 | + | ||||
| 902 | +@article{hansen2011mcs, | ||||
| 903 | + author = {Hansen, Peter R. and Lunde, Asger and Nason, James M.}, | ||||
| 904 | + title = {{The Model Confidence Set}}, | ||||
| 905 | + journal = {Econometrica}, | ||||
| 906 | + year = {2011}, | ||||
| 907 | + volume = {79}, | ||||
| 908 | + number = {2}, | ||||
| 909 | + pages = {453--497}, | ||||
| 910 | + doi = {10.3982/ecta5771} | ||||
| 911 | +} | ||||
| 912 | + | ||||
| 913 | +@article{benjamini1995, | ||||
| 914 | + author = {Benjamini, Yoav and Hochberg, Yosef}, | ||||
| 915 | + title = {{Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing}}, | ||||
| 916 | + journal = {Journal of the Royal Statistical Society Series B: Statistical Methodology}, | ||||
| 917 | + year = {1995}, | ||||
| 918 | + volume = {57}, | ||||
| 919 | + number = {1}, | ||||
| 920 | + pages = {289--300}, | ||||
| 921 | + doi = {10.1111/j.2517-6161.1995.tb02031.x} | ||||
| 922 | +} | ||||
| 923 | + | ||||
| 924 | +@article{amihud2002, | ||||
| 925 | + author = {Amihud, Yakov}, | ||||
| 926 | + title = {{Illiquidity and stock returns: cross-section and time-series effects}}, | ||||
| 927 | + journal = {Journal of Financial Markets}, | ||||
| 928 | + year = {2002}, | ||||
| 929 | + volume = {5}, | ||||
| 930 | + number = {1}, | ||||
| 931 | + pages = {31--56}, | ||||
| 932 | + doi = {10.1016/s1386-4181(01)00024-6} | ||||
| 933 | +} | ||||
| 934 | + | ||||
| 935 | +@article{fama1993, | ||||
| 936 | + author = {Fama, Eugene F. and French, Kenneth R.}, | ||||
| 937 | + title = {{Common risk factors in the returns on stocks and bonds}}, | ||||
| 938 | + journal = {Journal of Financial Economics}, | ||||
| 939 | + year = {1993}, | ||||
| 940 | + volume = {33}, | ||||
| 941 | + number = {1}, | ||||
| 942 | + pages = {3--56}, | ||||
| 943 | + doi = {10.1016/0304-405x(93)90023-5} | ||||
| 944 | +} | ||||
| 945 | + | ||||
| 946 | +@article{grossman1980, | ||||
| 947 | + author = {Grossman, Sanford J. and Stiglitz, Joseph E.}, | ||||
| 948 | + title = {{On the Impossibility of Informationally Efficient Markets}}, | ||||
| 949 | + journal = {American Economic Review}, | ||||
| 950 | + year = {1980}, | ||||
| 951 | + volume = {70}, | ||||
| 952 | + number = {3}, | ||||
| 953 | + pages = {393--408} | ||||
| 954 | +} | ||||
| 955 | +@article{holm1979, | ||||
| 956 | + author = {Holm, Sture}, | ||||
| 957 | + title = {{A Simple Sequentially Rejective Multiple Test Procedure}}, | ||||
| 958 | + journal = {Scandinavian Journal of Statistics}, | ||||
| 959 | + year = {1979}, | ||||
| 960 | + volume = {6}, | ||||
| 961 | + number = {2}, | ||||
| 962 | + pages = {65--70} | ||||
| 963 | +} | ||||
| 964 | +@article{kunsch1989, | ||||
| 965 | + author = {K{\"u}nsch, Hans R.}, | ||||
| 966 | + title = {{The Jackknife and the Bootstrap for General Stationary Observations}}, | ||||
| 967 | + journal = {Annals of Statistics}, | ||||
| 968 | + year = {1989}, | ||||
| 969 | + volume = {17}, | ||||
| 970 | + number = {3}, | ||||
| 971 | + pages = {1217--1241}, | ||||
| 972 | + doi = {10.1214/aos/1176347265} | ||||
| 973 | +} | ||||
| 974 | +@inproceedings{ke2017lightgbm, | ||||
| 975 | + author = {Ke, Guolin and Meng, Qi and Finley, Thomas and Wang, Taifeng and Chen, Wei and Ma, Weidong and Ye, Qiwei and Liu, Tie-Yan}, | ||||
| 976 | + title = {{LightGBM: A Highly Efficient Gradient Boosting Decision Tree}}, | ||||
| 977 | + booktitle = {Advances in Neural Information Processing Systems 30}, | ||||
| 978 | + year = {2017}, | ||||
| 979 | + pages = {3146--3154} | ||||
| 980 | +} | ||||
| 981 | +@book{lopezdeprado2018, | ||||
| 982 | + author = {L{\'o}pez de Prado, Marcos}, | ||||
| 983 | + title = {{Advances in Financial Machine Learning}}, | ||||
| 984 | + publisher = {Wiley}, | ||||
| 985 | + address = {Hoboken, NJ}, | ||||
| 986 | + year = {2018} | ||||
| 987 | +} | ||||
| 988 | +@techreport{frazzini2018costs, | ||||
| 989 | + author = {Frazzini, Andrea and Israel, Ronen and Moskowitz, Tobias J.}, | ||||
| 990 | + title = {{Trading Costs}}, | ||||
| 991 | + institution = {SSRN Working Paper 3229719}, | ||||
| 992 | + year = {2018}, | ||||
| 993 | + doi = {10.2139/ssrn.3229719} | ||||
| 994 | +} | ||||
| 995 | +@incollection{barndorff2010semivariance, | ||||
| 996 | + author = {Barndorff-Nielsen, Ole E. and Kinnebrock, Silja and Shephard, Neil}, | ||||
| 997 | + title = {{Measuring Downside Risk: Realised Semivariance}}, | ||||
| 998 | + booktitle = {Volatility and Time Series Econometrics: Essays in Honor of Robert F. Engle}, | ||||
| 999 | + editor = {Bollerslev, Tim and Russell, Jeffrey and Watson, Mark}, | ||||
| 1000 | + publisher = {Oxford University Press}, | ||||
| 1001 | + year = {2010}, | ||||
| 1002 | + pages = {117--136}, | ||||
| 1003 | + doi = {10.1093/acprof:oso/9780199549498.003.0007} | ||||
| 1004 | +} | ||||
| 1005 | +@article{boucher2026wp15, | ||||
| 1006 | + author = {Boucher, Simon-Pierre}, | ||||
| 1007 | + title = {{Faster, Wider, More Fragile? The Evolution of Intraday Shock Propagation in U.S. Equity Markets, 1992--2026}}, | ||||
| 1008 | + journal = {UQO Working Paper No. 15}, | ||||
| 1009 | + year = {2026} | ||||
| 1010 | +} | ||||
| 1011 | + | ||||
| 1012 | +@article{harvey2016, | ||||
| 1013 | + author = {Harvey, Campbell R. and Liu, Yan and Zhu, Heqing}, | ||||
| 1014 | + title = {{\ldots and the Cross-Section of Expected Returns}}, | ||||
| 1015 | + journal = {The Review of Financial Studies}, | ||||
| 1016 | + year = {2016}, | ||||
| 1017 | + volume = {29}, | ||||
| 1018 | + number = {1}, | ||||
| 1019 | + pages = {5--68}, | ||||
| 1020 | + doi = {10.1093/rfs/hhv059} | ||||
| 1021 | +} | ||||
added
paper/.latexmkrc
+5 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added
paper/Makefile
+11 −0
Large diff (11 lines) is not loaded by default to keep the page fast.Load diff
added
paper/appendix/appendix.tex
+54 −0
Large diff (54 lines) is not loaded by default to keep the page fast.Load diff
added
paper/main.tex
+141 −0
Large diff (141 lines) is not loaded by default to keep the page fast.Load diff
added
paper/references.bib
+1021 −0
Large diff (1,021 lines) is not loaded by default to keep the page fast.Load diff
added
paper/sections/data.tex
+83 −0
Large diff (83 lines) is not loaded by default to keep the page fast.Load diff
added
paper/sections/literature.tex
+46 −0
Large diff (46 lines) is not loaded by default to keep the page fast.Load diff
added
paper/sections/methodology.tex
+78 −0
Large diff (78 lines) is not loaded by default to keep the page fast.Load diff
added
paper/sections/theory_hypotheses.tex
+64 −0
Large diff (64 lines) is not loaded by default to keep the page fast.Load diff
added
paper/sections/titlepage.tex
+77 −0
Large diff (77 lines) is not loaded by default to keep the page fast.Load diff
added
paper/sections/titlepage_anon.tex
+53 −0
Large diff (53 lines) is not loaded by default to keep the page fast.Load diff
added
paper/uq_logo.jpg
+0 −0
Binary file not shown.
added
pyproject.toml
+42 −0
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/00_probe_findata.py
+42 −0
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/01_audit_universe.py
+83 −0
Large diff (83 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/01a_extract_node_tables.sh
+16 −0
Large diff (16 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/02_build_pit_panel.py
+75 −0
Large diff (75 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/03_build_features.py
+116 −0
Large diff (116 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/04_build_labels.py
+83 −0
Large diff (83 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/05_train_baselines.py
+108 −0
Large diff (108 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/06_train_advanced.py
+116 −0
Large diff (116 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/07_evaluate.py
+209 −0
Large diff (209 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/08_run_robustness.py
+156 −0
Large diff (156 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/09_make_manuscript.py
+203 −0
Large diff (203 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/__init__.py
+2 −0
Large diff (2 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/api_client.py
+226 −0
Large diff (226 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/calendar.py
+78 −0
Large diff (78 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/catalog.py
+31 −0
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/corporate_actions.py
+36 −0
Large diff (36 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/features.py
+181 −0
Large diff (181 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/figures.py
+156 −0
Large diff (156 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/inference.py
+134 −0
Large diff (134 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/ingest.py
+63 −0
Large diff (63 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/instruments.py
+119 −0
Large diff (119 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/labels.py
+104 −0
Large diff (104 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/models.py
+137 −0
Large diff (137 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/pipeline.py
+62 −0
Large diff (62 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/pit_fundamentals.py
+115 −0
Large diff (115 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/portfolio.py
+124 −0
Large diff (124 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/provenance.py
+61 −0
Large diff (61 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/robustness.py
+46 −0
Large diff (46 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/samples.py
+180 −0
Large diff (180 lines) is not loaded by default to keep the page fast.Load diff
added
src/wp39/splits.py
+65 −0
Large diff (65 lines) is not loaded by default to keep the page fast.Load diff
added
tests/__init__.py
+0 −0
Large diff (0 lines) is not loaded by default to keep the page fast.Load diff
added
tests/conftest.py
+39 −0
Large diff (39 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_api_contract.py
+42 −0
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_corporate_actions.py
+22 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_features.py
+37 −0
Large diff (37 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_instrument_ids.py
+17 −0
Large diff (17 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_labels.py
+26 −0
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_pit_leakage.py
+45 −0
Large diff (45 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_reproducibility.py
+23 −0
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_splits.py
+37 −0
Large diff (37 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_timestamp_dsts.py
+30 −0
Large diff (30 lines) is not loaded by default to keep the page fast.Load diff
added
tests/test_train_only_transforms.py
+15 −0
Large diff (16 lines) is not loaded by default to keep the page fast.Load diff