spb/anomaly-atlas Public License
Systematic discovery & rigorous validation of statistical anomalies in open HF market data (hfmarketdata.io) — pre-registered, artifact-null-driven, fully reproducible. Live atlas: www.anomaly-atlas.io
Python 61.4%
JavaScript 28.7%
CSS 8.6%
Shell 0.7%
Makefile 0.5%
1# CLAUDE.md23**Project codename:** `anomaly-atlas` — Systematic Discovery & Rigorous Validation of Statistical Anomalies in Open High-Frequency Market Data4**Data source (sole permitted source):** HF Market Data — https://www.hfmarketdata.io (API)5**Public site (living atlas of findings):** provisional — decided later (e.g. anomalyatlas.io)6**Principal investigator / Author:** Simon-Pierre Boucher — <contact@spboucher.ai>7**Primary platform:** Apple Silicon Mac (macOS 14+)8**Document status:** Living research charter. Claude must treat this as the authoritative project specification.910---1112## 0. Administrative conventions (MANDATORY — read before anything else)1314### 0.1 Author header requirement1516**Every single source file created in this project — without exception — must begin with a standardized author header.**1718Applies to: Python, C++, shell, SQL, Makefiles, CMake, TypeScript/JS (site), and any config that supports comments.1920#### Python / shell / SQL / YAML / TOML header2122```python23# =============================================================================24# Project : anomaly-atlas25# File : <relative/path/to/file.py>26# Purpose : <one-line description of what this file does>27# Author : Simon-Pierre Boucher28# Contact : contact@spboucher.ai29# Data src : hfmarketdata.io (sole data source)30# Created : <YYYY-MM-DD>31# Modified : <YYYY-MM-DD>32# Platform : macOS / Apple Silicon (arm64)33# License : All rights reserved (research code)34# =============================================================================35```3637#### C++ / TS / JS header3839```cpp40// ============================================================================41// Project : anomaly-atlas42// File : <relative/path/to/file>43// Purpose : <one-line description>44// Author : Simon-Pierre Boucher45// Contact : contact@spboucher.ai46// Data src : hfmarketdata.io (sole data source)47// Created : <YYYY-MM-DD>48// Modified : <YYYY-MM-DD>49// Platform : macOS / Apple Silicon (arm64)50// License : All rights reserved (research code)51// ============================================================================52```5354#### Markdown research documents (front matter)5556```markdown57---58project: anomaly-atlas59document: <name>60author: Simon-Pierre Boucher61contact: contact@spboucher.ai62data_source: hfmarketdata.io63created: <YYYY-MM-DD>64status: draft | reviewed | final65---66```6768Rules:69701. Header is the **first content** of the file (after a shebang if present).712. `Modified` updated on every substantial change.723. Write `tools/check_headers.py` early; it fails if any tracked source file lacks a conforming header, and runs before every commit.734. Every result file (JSON/CSV/parquet) embeds `"author": "Simon-Pierre Boucher", "contact": "contact@spboucher.ai", "data_source": "hfmarketdata.io"` in its metadata.745. Every published finding on the site carries a visible attribution footer.7576### 0.2 macOS-first design constraint7778**Everything must run on a Mac.** Specifically:7980* Target machine: Apple Silicon (M1–M4), 16–64 GB unified memory, internal NVMe SSD.81* Stack: Python (pandas/polars, numpy, statsmodels, arch, scipy) + DuckDB for out-of-core columnar queries over the local data cache; Accelerate/NEON via numpy. No Linux-only assumptions.82* Data volumes (years of 1-minute bars across many symbols + full options chains) will exceed RAM: use **DuckDB + parquet** on the internal NVMe, columnar and memory-mapped, benchmarked on macOS/APFS. Never assume the dataset fits in memory.83* Instrumentation uses macOS-native sources where relevant (mach `task_info`, `vm_stat`, `fs_usage`).84* Site is a static site that builds and previews locally on the Mac.85* A hardware/software manifest (`benchmarks/hardware_manifest.py`) is recorded into every result.8687### 0.3 Data-source discipline (CRITICAL)8889* **hfmarketdata.io is the SOLE data source.** No other market data may enter any experiment or finding. Every result must be reproducible from hfmarketdata.io alone.90* Build a single, well-tested API client (`src/anomaly_atlas/data/hf_client.py`) that ALL code uses. No ad-hoc requests scattered around.91* The client must: respect rate limits (read them from response headers, back off on 429, never hammer), cache every response to a local parquet/DuckDB store keyed by (endpoint, params, as-of date), and **never silently refetch** — the local cache is the reproducibility anchor.92* Record, for every symbol/field used: the exact endpoint, parameters, granularity actually returned, and the fetch timestamp, into a committed data-manifest index (the raw data lives outside git; the index is committed).93* **Confirm the real capabilities empirically before designing anything** (Phase 0.5): what symbols, what history depth, what the finest true granularity is (advertised 1-minute to daily; verify), whether timestamps are exchange time or vendor time, how corporate actions/splits/dividends are handled, and what the rate/credit limits are. Write findings to `research/data_source_profile.md`.9495### 0.4 Repository discipline9697* Git from day one; no result reported from an uncommitted tree.98* Every finding reproducible from: commit hash + config + data-manifest index + seed + hardware manifest.99* Python: type hints, `ruff`, `pytest` (statistical routines get correctness tests on synthetic data with known answers).100101---102103## 1. Mission104105Investigate, design, implement, and rigorously validate a systematic methodology — and the tooling behind it — to **discover statistical anomalies in open high-frequency market data (mean-reversion, lead-lag relationships, calendar/seasonal effects, and related regularities), and to distinguish genuine, out-of-sample, cost-aware regularities from data artifacts and statistical illusions**, using only hfmarketdata.io data, on a consumer Mac, and publish the results as a reproducible atlas.106107The target is **not**:108109* a live trading system, a trading bot, or trading advice;110* a claim of "arbitrage" or "free money" (see §2.1 — that is almost never real in historical 1-minute data);111* a backtest that reports in-sample returns as if they were discoveries;112* p-hacking a large symbol universe until something looks significant;113* reproducing a known factor/anomaly without adding rigor or a new test.114115The target is:116117> **Given only open HF market data, determine which statistical regularities are real (survive out-of-sample testing, multiple-comparison correction, transaction costs, and robustness checks) versus which are artifacts (bid-ask bounce, stale/non-synchronized timestamps, survivorship, look-ahead, microstructure noise) — and publish each with its honest confidence level and the exact script that regenerates it.**118119Do not assume any anomaly is real. Assume it is an artifact until the evidence forces otherwise.120121---122123## 2. Core research questions & the honesty doctrine124125### 2.1 The honesty doctrine (non-negotiable, stated up front and on the site)126127**In financial data, the equivalent of a mathematical proof is a pre-specified, out-of-sample, transaction-cost-adjusted, multiple-testing-corrected test that a naive researcher cannot fake after the fact.** There is no riskless "proof of profit" in historical bar data. Therefore:128129* Every candidate anomaly is guilty (an artifact) until proven innocent.130* Any regularity that *looks* like arbitrage in 1-minute historical bars is treated as a **data-artifact hypothesis first** (stale quotes, timestamp misalignment, bid-ask bounce, missing corporate actions), and only after those are excluded may it be considered a real risk-bearing regularity — never riskless arbitrage.131* In-sample results are never findings. Only out-of-sample, robustness-checked results are.132* Past statistical regularity does not imply future returns; the site says so on every page.133134### 2.2 Research questions135136**Q1 — Mean-reversion.** At which horizons, on which instruments, does price/return mean-revert beyond what bid-ask bounce alone explains? Does any reversion survive realistic costs?137138**Q2 — Lead-lag.** Do movements in one instrument systematically precede correlated instruments (e.g., large-cap → related ETF, index → constituents, one FX cross → another) at the available granularity? Is the lead-lag stable out-of-sample, or an artifact of non-synchronous last-trade timestamps?139140**Q3 — Calendar / seasonal effects.** Are there robust intraday (open/close), day-of-week, turn-of-month, or holiday-adjacent regularities in returns or volatility that survive multiple-testing correction across the many calendar hypotheses one can pose?141142**Q4 — Artifact taxonomy.** What is the complete catalogue of artifacts in *this specific dataset* that masquerade as anomalies, and how is each detected and neutralized? (This is a primary deliverable, not a side note.)143144**Q5 — Cost frontier.** At what transaction-cost / holding-period assumptions does each surviving regularity stop being economically meaningful?145146The distinction to keep sharp everywhere:147148```text149statistically detectable in-sample150≠151reproducible out-of-sample152≠153robust to artifacts and specification choices154≠155economically meaningful after costs156```157158A finding only advances one confidence level at a time (§10).159160---161162## 3. Project structure (real research-project layout)163164Create this skeleton (with header-compliant placeholders) before Phase 1 concludes:165166```text167anomaly-atlas/168├── CLAUDE.md169├── README.md170├── CITATION.cff171├── LICENSE172├── pyproject.toml173├── Makefile # setup, lint, test, fetch, scan, validate, site, headers174│175├── research/176│ ├── LOG.md # dated, append-only research log177│ ├── data_source_profile.md # Phase 0.5: what hfmarketdata.io actually provides178│ ├── state_of_the_art.md # Phase 2179│ ├── artifact_taxonomy.md # the catalogue of dataset artifacts (living doc)180│ ├── research_gaps.md # Phase 3181│ ├── candidate_ranking.md # Phase 4182│ ├── methodology.md # the formal validation protocol (Phase 9)183│ ├── novelty_check.md # Phase 11184│ └── bibliography.md185│186├── src/187│ └── anomaly_atlas/188│ ├── data/189│ │ ├── hf_client.py # THE single API client (rate-limit, cache, manifest)190│ │ ├── cache.py # DuckDB/parquet local store191│ │ ├── universe.py # symbol universe definitions (versioned)192│ │ ├── calendars.py # trading calendars, sessions, holidays193│ │ └── cleaning.py # corporate actions, dedup, alignment, quality flags194│ ├── stats/195│ │ ├── reversion.py # variance ratios, Hurst, AR tests, half-life196│ │ ├── leadlag.py # cross-correlation, Granger, lagged regressions197│ │ ├── calendar.py # seasonal/intraday effect tests198│ │ ├── multiple_testing.py # FDR/Bonferroni, White reality check, SPA, DSR199│ │ └── bootstrap.py # block/stationary bootstrap, CIs200│ ├── validation/201│ │ ├── oos.py # train/validate/holdout splits, walk-forward202│ │ ├── costs.py # spread/impact/commission models203│ │ ├── artifacts.py # artifact detectors (bounce, staleness, look-ahead)204│ │ └── robustness.py # specification/parameter perturbation205│ ├── atlas/ # finding schema, provenance, confidence serialization206│ ├── viz/207│ └── instrumentation/208│209├── experiments/210│ ├── micro/211│ │ ├── expA_data_reality/ # verify what the API really gives212│ │ ├── expB_artifact_baselines/ # measure bounce/staleness null distributions213│ │ ├── expC_reversion_scan/214│ │ ├── expD_leadlag_scan/215│ │ ├── expE_calendar_scan/216│ │ ├── expF_multiple_testing/ # how much survives correction217│ │ ├── expG_cost_frontier/218│ │ └── expH_oos_stability/219│ ├── candidate_01/220│ ├── candidate_02/221│ └── candidate_03/222│ └── (each: README.md, hypothesis.md, implementation/, benchmark.py,223│ results/, analysis.md)224│225├── atlas/ # the findings, as versioned data products226│ └── <anomaly_id>/<version>/227│ ├── finding.json228│ ├── provenance.json # commit, config, data-manifest hash, hardware, dates229│ └── confidence.md # Level 0–3 with evidence230│231├── site/ # static site (builds locally on Mac)232│ ├── content/ # one page per finding + the artifact taxonomy + methodology233│ └── data/234│235├── benchmarks/236│ ├── hardware_manifest.py237│ └── synthetic/ # synthetic series with KNOWN properties (test the tests)238│239├── results/240├── tools/241│ ├── check_headers.py242│ ├── new_experiment.py243│ └── new_finding.py # scaffolds a compliant atlas entry (provenance+confidence)244└── docs/245```246247`tools/new_finding.py` refuses to create an atlas entry without a completed `provenance.json` and `confidence.md`.248249---250251## 4. Phase 1 — Ultra-deep literature research252253Before proposing methodology, deeply search the literature and implementations. Prefer primary sources; log everything in `research/bibliography.md` with URLs and access dates; follow citations both directions.254255### Areas that must be investigated256257#### 4.1 The anomalies themselves258Short-horizon mean-reversion (Lo–MacKinlay, Lehmann); variance-ratio tests; lead-lag effects and the Epps effect; non-synchronous trading bias (Scholes–Williams); calendar effects (Monday/weekend, turn-of-month, turn-of-year, holiday, intraday U-shape); the historical rise-and-fade of these effects after publication.259260#### 4.2 The statistics of not fooling yourself (most important)261Multiple-testing in finance (Harvey–Liu–Zhu "…and the Cross-Section of Expected Returns"); White's Reality Check; Hansen's SPA test; the Deflated Sharpe Ratio and backtest overfitting (Bailey–López de Prado); data-snooping (Sullivan–Timmermann–White); false-discovery-rate control; the replication crisis in cross-sectional anomalies (McLean–Pontiff decay; Hou–Xue–Zhang replication).262263#### 4.3 Market microstructure & artifacts264Bid-ask bounce (Roll model); microstructure noise in high-frequency data; realized-volatility bias; stale prices; the effect of using bar/last-trade timestamps vs synchronized clocks; survivorship and look-ahead bias; corporate-action handling.265266#### 4.4 Time-series methodology267Variance ratios; Hurst/long-memory estimation pitfalls; Granger causality caveats; block/stationary bootstrap (Politis–Romano); walk-forward and combinatorial purged cross-validation; regime changes and structural breaks.268269#### 4.5 Transaction-cost realism270Effective spread estimation from bar data; the gap between paper returns and net returns; how costs kill most short-horizon anomalies; capacity constraints.271272#### 4.6 This dataset specifically273Whatever hfmarketdata.io documents about coverage, granularity, timestamp semantics, and corporate-action adjustment — treat gaps in documentation as things to establish empirically (Phase 0.5 / Experiment A).274275---276277## 5. Phase 2 — State-of-the-art map278279Produce `research/state_of_the_art.md`. Organize each anomaly/technique by:280281```text282Anomaly / method283What it claims284Data granularity it requires (does 1-minute-to-daily suffice?)285Known artifact confounds286Post-publication decay evidence287Correct statistical test (and its assumptions)288Multiple-testing exposure289Transaction-cost sensitivity290Open-source implementation (builds on macOS arm64?)291Main limitation292Opportunity for a genuinely new, honest test on THIS data293```294295Do not summarize papers uncritically. Flag each anomaly's epistemic status: robust / decayed-after-publication / disputed / likely-artifact.296297---298299## 6. Phase 3 — Identify genuine gaps300301Produce `research/research_gaps.md`. Aim for **≥20 substantially different, testable hypotheses** on this dataset. For each:3023031. what existing work shows;3042. what is untested on open HF data at this granularity;3053. why it might matter;3064. the plausible mechanism;3075. the biggest artifact/statistical reason it would be fake;3086. the smallest Mac-runnable experiment that would falsify it.309310Prefer hypotheses where **the null (artifact) model is explicitly constructable**, so "real vs artifact" is a clean test — not a vibe.311312---313314## 7. Phase 4 — Rank candidate approaches315316Create `research/candidate_ranking.md`. Score every hypothesis 1–10 with reasoning on:317318```text319Testability on hfmarketdata.io (data actually available)320Cleanliness of the artifact null (can we build the fake-signal baseline?)321Out-of-sample feasibility (enough history to hold out)322Multiple-testing discipline (small, pre-specified hypothesis set?)323Survival odds after costs324Novelty of the honest test325Reproducibility326Public-atlas value327Implementation complexity328Risk of self-deception329```330331Select **3–5 strongest** for prototyping. Prefer small, pre-registered hypothesis sets over giant blind scans (which invite p-hacking).332333---334335## 8. Phase 5 — Experimental framework336337Build the framework **before** any scan. Correctness first.338339### 8.1 The tests must be tested (mandatory)340Before running any anomaly detector on real data, run it on **synthetic series with known properties** (`benchmarks/synthetic/`): pure random walks (must yield NO anomaly), series with a *planted* mean-reversion / lead-lag / seasonal effect (must be recovered), and series with *only* bid-ask bounce (must be flagged as artifact, not anomaly). A detector that finds anomalies in a random walk is broken and must be fixed before touching real data.341342### 8.2 Universe & splits343Pre-specify the symbol universe and the **train / validation / holdout** time split *before* looking at results. The holdout is touched **once**, at the end, for each finding. Walk-forward / purged CV where appropriate.344345### 8.3 Instrumentation346Measure API credits consumed, cache hit rate, wall-clock, RAM/peak, DuckDB query cost. And for every statistical result: number of hypotheses tested, correction applied, out-of-sample status, bootstrap CIs, effect size, cost-adjusted effect size.347348### 8.4 Most important metrics349```text350OUT-OF-SAMPLE SURVIVAL (does the effect hold on untouched data?)351ARTIFACT-ADJUSTED EFFECT (effect minus what the artifact null explains)352COST-ADJUSTED EFFECT (net of realistic transaction costs)353CORRECTED SIGNIFICANCE (after multiple-testing correction)354```355A large in-sample effect with zero out-of-sample survival is a **negative result** and is published as one.356357### 8.5 Controls358Every detector runs against: a random-walk null, a bid-ask-bounce null, a phase-randomized/bootstrap null, and (for calendar effects) a permuted-calendar null. No claim without its null shown.359360---361362## 9. Phase 6 — Micro-experiments363364Each in `experiments/micro/` with the standard scaffold.365366**Experiment A — Data reality check.** Empirically establish what hfmarketdata.io returns: true granularity, history depth per asset class, timestamp semantics (exchange vs vendor), corporate-action adjustment, missing-data patterns, gaps, and rate/credit limits. Output → `research/data_source_profile.md`. Everything downstream depends on this.367368**Experiment B — Artifact baselines.** Build and measure the null distributions of the key artifacts on this data: Roll-model bid-ask bounce, stale-price autocorrelation, non-synchronous lead-lag. These nulls become the baseline every real detector must beat.369370**Experiment C — Mean-reversion scan.** Variance ratios / half-life / AR tests across horizons and instruments, always reported *net of* the bounce null, with OOS split and bootstrap CIs.371372**Experiment D — Lead-lag scan.** Lagged cross-correlations / Granger across correlated instrument pairs, explicitly separating true lead-lag from non-synchronous-timestamp artifacts (test on synchronized vs raw timestamps).373374**Experiment E — Calendar scan.** Intraday, day-of-week, turn-of-month, holiday effects — with a *pre-counted* hypothesis budget and mandatory multiple-testing correction (the calendar space is where p-hacking is easiest).375376**Experiment F — Multiple-testing survival.** Take everything C–E surfaced and apply White Reality Check / SPA / FDR / Deflated Sharpe. Report the **survival rate**: what fraction of "significant" effects survive correction. This number calibrates the whole atlas.377378**Experiment G — Cost frontier.** For each surviving effect, sweep transaction-cost assumptions and report where net effect crosses zero.379380**Experiment H — Out-of-sample stability.** For survivors of F and G, evaluate on the untouched holdout and across sub-periods. Only Level-3 findings survive this.381382---383384## 10. Scientific discipline & confidence taxonomy385386For every experiment write, in `hypothesis.md` / `analysis.md`:387388```text389Hypothesis390Falsification criterion391Artifact null(s)392Method393Result (effect size, CIs, corrected p-values, credits used)394Interpretation (with confidence level)395Next experiment396```397398**Never** report an in-sample number as a finding. **Never** claim "arbitrage." **Never** imply future profit. Report: number of hypotheses, correction method, OOS status, costs, hardware, data-manifest hash, software versions.399400### Confidence taxonomy (used everywhere, including on the site)401402```text403Level 0 — in-sample only (never published as a finding; scan output only)404Level 1 — corrected & OOS (survives multiple-testing correction AND a clean405 out-of-sample split, with the artifact null subtracted)406Level 2 — robust (Level 1 + robust to specification/parameter choices407 and across sub-periods / instruments)408Level 3 — cost-real & held-out (Level 2 + economically nonzero after realistic costs409 AND confirmed on the once-touched holdout)410```411412Every atlas entry carries its level in `confidence.md` and visibly on the site. **Negative results (effects that vanish out-of-sample or after costs) are first-class published findings** — they are the most trustworthy output of an honest anomaly project.413414---415416## 11. Phase 7 — Prototype candidate detectors417418Each strongest hypothesis → `experiments/candidate_0N/` with full scaffold. Each `analysis.md` ends with an explicit verdict: promote to atlas, iterate, or reject (with reasons and the confidence level reached).419420---421422## 12. Phase 8 — Automatic research loop423424Operate as a research agent: analyze; pick the most informative next experiment; re-search literature when results surprise (especially if something looks *too good* — that is a red flag for an artifact, not a discovery); update hypotheses; rerun; compare; continue until evidence settles each hypothesis. Never expand the hypothesis space silently to chase significance — that is p-hacking; any expansion is logged and re-budgeted for multiple testing.425426Maintain `research/LOG.md` (append-only): date/time+timezone, question, experiment, result, interpretation, decision.427428---429430## 13. Phase 9 — Formalize the validation methodology431432Write `research/methodology.md`: the reusable, pre-registered protocol that turns *(a pre-specified hypothesis + universe + split)* into *(a confidence-labeled atlas entry)*. It must specify: the artifact nulls, the correction procedure, the OOS/holdout protocol, the cost model, the robustness perturbations, the finding schema, and the publication checklist. The methodology is itself a primary deliverable and the main defense against self-deception.433434---435436## 14. Phase 10 — Build the atlas pipeline and site437438Build the pipeline supported by evidence. Possible CLI shape (finalize after research):439440```bash441anomaly-atlas fetch --universe universes/core.yaml # cache from hfmarketdata.io442anomaly-atlas scan --family reversion,leadlag,calendar # in-sample candidates (Level 0)443anomaly-atlas validate <anomaly_id> # corrections, OOS, costs, robustness444anomaly-atlas publish <anomaly_id> --site site/ # only Level ≥1 gets published445```446447### The site448* Static, builds locally on the Mac; every page generated from atlas data (never hand-typed numbers).449* Front-and-center honesty banner (the §2.1 doctrine) and a "not trading advice" statement on every page.450* One page per finding, showing: confidence level, the artifact null it beat, OOS and cost-adjusted numbers, provenance (commit, data-manifest hash, dates, hardware), and the exact command to reproduce.451* A prominent **artifact taxonomy** page (often the most useful output).452* A prominent **negative-results** section.453* Attribution footer: *Simon-Pierre Boucher — contact@spboucher.ai*.454455### Hard constraints456* hfmarketdata.io is the only data source.457* No claim above its evidence level; no "arbitrage"/profit claims; not a trading system.458* Nothing published that cannot be regenerated from committed code + the data-manifest index.459460---461462## 15. Target hardware463464```text465Apple Silicon Mac (laptop or desktop), 16–64 GB unified memory, internal NVMe SSD.466```467DuckDB + parquet over the internal SSD handles multi-year, multi-symbol data out-of-core; numpy/Accelerate handle the math. Document (without necessarily implementing) how the pipeline maps to other hardware.468469### Stretch target470```text471A small set (single digits) of Level-3 findings — statistical regularities that survive472correction, out-of-sample testing, robustness checks, AND realistic costs on the473once-touched holdout — OR a rigorously documented conclusion that, on this open data,474the honest answer is "the detectable effects do not survive," which is itself a475publishable, valuable result.476```477Do not assume Level-3 findings exist. The research must establish the truth either way.478479---480481## 16. What counts as a real result482483**A.** A statistical regularity that reaches Level 3 (corrected + OOS + robust + cost-real + held-out) on hfmarketdata.io data.484**B.** A rigorous, reusable artifact taxonomy for this dataset that lets others avoid mistaking artifacts for signals.485**C.** A clean demonstration that a widely-cited anomaly does NOT survive honest testing on this open data (negative result).486**D.** A methodological contribution: a better artifact null or a better honest test for short-horizon effects on bar data.487**E.** A measured "survival curve": what fraction of naively-significant effects remain after each layer of rigor.488489## 17. Failure criteria (and why they are fine)490491Be willing to conclude:492493```text494nothing survives multiple-testing correction495everything vanishes out-of-sample496all apparent effects are explained by bid-ask bounce / stale prices / timestamp misalignment497surviving effects die after realistic costs498the data granularity is too coarse to test the interesting hypotheses499```500501If so, document it in `research/LOG.md` and the relevant `analysis.md`, publish the negative result, and pivot. **A well-documented "it's all artifacts" is a success, not a failure** — it is exactly what an honest anomaly project should be willing to conclude.502503---504505## 18. Deliverables506507```text508README.md, CITATION.cff509research/ (data_source_profile, state_of_the_art, artifact_taxonomy, research_gaps,510 candidate_ranking, methodology, novelty_check, LOG, bibliography)511src/ (the anomaly_atlas library, incl. the single hf_client)512experiments/, benchmarks/ (incl. synthetic test series), results/513atlas/ (confidence-labeled findings with provenance)514site/ (the public atlas)515tools/, docs/516```517518The final README explains: the problem; the honesty doctrine; what the data actually provides; the artifact taxonomy; the validation methodology; the findings with their confidence levels (including negatives); limitations; exact Mac reproduction instructions; future research.519520---521522## 19. Phase 11 — Novelty verification523524Before claiming any finding or method is new, search using terminology derived from what was actually found, plus every synonym and the specific anomaly's literature (it may be a known, already-decayed effect). Assume **not novel** until evidence says otherwise. Record in `research/novelty_check.md`. Note explicitly whether each "finding" is a genuinely new regularity or a re-confirmation/decay-measurement of a known one — both are legitimate, but must not be conflated.525526---527528## 20. Most important instruction529530Do not become attached to finding a profitable anomaly. The purpose of this project is **not to discover free money** — that almost certainly is not there in open historical bar data, and pretending otherwise is how researchers fool themselves.531532The actual assignment is:533534> **Search deeply, test honestly, build the artifact nulls, correct for multiple testing, hold out data you touch only once, subtract realistic costs — and report, at its true confidence level, what actually survives, including (and especially) when the honest answer is "nothing survives."**535536Start with literature. Verify what the data really is. Build detectors that a random walk cannot fool. Then let the out-of-sample, cost-adjusted, correction-survived evidence — and nothing else — decide what enters the atlas.537538The ideal outcome is not a backtest that looks good. The ideal outcome is a **trustworthy, reproducible atlas of what is real, what is artifact, and what is merely wishful** in open high-frequency market data — where every claim carries its evidence level and the exact command that regenerates it from hfmarketdata.io.539540---541542*Author: Simon-Pierre Boucher — contact@spboucher.ai — Data source: hfmarketdata.io — All research artifacts in this repository carry this attribution. This project is research on statistical properties of market data; it is not investment advice and is not a trading system.*543