138 lines
No EOL
6.7 KiB
JSON
138 lines
No EOL
6.7 KiB
JSON
{
|
|
"manifest_id": "R2-H-MANIFEST-v0.1.0-frozen",
|
|
"experiment": "R2-H",
|
|
"title": "HORIZON-BOUNDARY EXPERIMENT — formal design freeze manifest",
|
|
"status": "DESIGN FROZEN — EXECUTION NOT AUTHORIZED",
|
|
"freeze_date": "2026-08-26",
|
|
"branch": "main",
|
|
"anchor_commit": "67be79aa75ae98eace7c67b74c93797f4327d51a",
|
|
"anchor_commit_message": "research: finalize R1-R robustness synthesis",
|
|
"protocol": {
|
|
"path": "results/R2-H/R2_H_PROTOCOL.md",
|
|
"version": "r2-h-v0.1.0-frozen",
|
|
"sha256": "422d66d68bdaff71e94a2f3f3dbd853d8315f6a36c18776ccdecd1a6517165ac"
|
|
},
|
|
"configuration": {
|
|
"base_grid": "M1",
|
|
"atr_period": 20,
|
|
"atr_implementation": "R1-compatible M1 close-only deterministic close-change-based ATR proxy (NOT Wilder ATR); src/forecasting/target.py rolling_atr with high/low absent",
|
|
"arima_fit_window": 300,
|
|
"sax_fit_window": 24,
|
|
"drift_lookback": 40,
|
|
"primary_model": "Drift",
|
|
"secondary_models": ["ARIMA(1,0,0)", "SAX", "Hybrid"],
|
|
"secondary_models_role": "robustness/diagnostic only; never selected as best; cannot establish boundary claim"
|
|
},
|
|
"source_dataset": {
|
|
"path": "results/R1_real_data/XAUUSDc_M1_raw.json",
|
|
"symbol": "XAUUSDc",
|
|
"timeframe": "M1",
|
|
"n_bars": 397558,
|
|
"first_bar": "2025.06.02 01:00:00",
|
|
"last_bar": "2026.08.24 15:19:00",
|
|
"source_hash_raw_json_sha256": "5472357e67f70f7d1bfef8f9de67fcce91ee6f26208072d7a6766b06c158ee6e",
|
|
"hash_verification": "fresh SHA-256 computed in R2-H freeze session; not reused from R1-R",
|
|
"r1_close_only_hash_not_reused": "80e4b52b0df0c6e348ce2002348279eee9f6e8a61c3109efe82fe475ed3cbc19"
|
|
},
|
|
"horizon_definitions": {
|
|
"definition": "tau_H(o) = [P(t_end) - P(o)] / ATR20(o); t_end = first valid M1 bar timestamp >= timestamp(o) + H minutes; elapsed-time horizon, not bar count",
|
|
"H0_15min": {"role": "in-study R1-R control", "fwer_family": false},
|
|
"H1_60min": {"role": "primary", "fwer_family": true},
|
|
"H2_240min": {"role": "primary", "fwer_family": true},
|
|
"H9_960min": {"role": "diagnostic-only", "fwer_family": false, "note": "never enters FWER family, never determines success/failure, not a boundary, no adaptive promotion"}
|
|
},
|
|
"origin_selection": {
|
|
"rule": "candidates: M1 bar o in [2000, n) with resolvable elapsed endpoint; gap rule: any inter-bar delta > 5 min within (o, t_end] excludes origin; spacing: 2 x H elapsed minutes between accepted origins; no overlap; no cap; no human-selected origins; no model-dependent selection",
|
|
"warmup": 2000,
|
|
"spacing_mult": 2,
|
|
"gap_tolerance_minutes": 5,
|
|
"short_horizon_cap": "none",
|
|
"generator": "scripts/run_r2h_origins.py",
|
|
"generator_python": "3.14.6",
|
|
"generator_gap_exclusions": {
|
|
"H015": {"gap": 4370, "no_endpoint": 15},
|
|
"H060": {"gap": 17423, "no_endpoint": 60},
|
|
"H240": {"gap": 69623, "no_endpoint": 240}
|
|
},
|
|
"two_run_byte_identity": "PASS — both runs identical ordering, LF newlines, contents, SHA-256; verified with fc /b"
|
|
},
|
|
"origin_lists": {
|
|
"H015": {
|
|
"path": "results/R2-H/origins_H015.csv",
|
|
"horizon_minutes": 15,
|
|
"n_origins": 13193,
|
|
"sha256": "fb5a36e93c8f9c7b0fee638d35d551778f1a27cbc50e0727556cf6a1d8c5c7df"
|
|
},
|
|
"H060": {
|
|
"path": "results/R2-H/origins_H060.csv",
|
|
"horizon_minutes": 60,
|
|
"n_origins": 3169,
|
|
"sha256": "e7b5132c321f5350ec1e231d49d68dbc29468cdf9ee6a5014a2764aaf36eb9af"
|
|
},
|
|
"H240": {
|
|
"path": "results/R2-H/origins_H240.csv",
|
|
"horizon_minutes": 240,
|
|
"n_origins": 863,
|
|
"sha256": "3ad65e94f46731e65b8d40cf2b7746a6c0bd2eafe43216178d9e6e6c6ebcb910"
|
|
}
|
|
},
|
|
"statistical_params": {
|
|
"bootstrap_method": "Moving Block Bootstrap (MBB)",
|
|
"block_length_B": 60,
|
|
"block_length_unit": "M1 observations",
|
|
"bootstrap_repetitions": 10000,
|
|
"seed": 20260826,
|
|
"confidence_level": 0.95,
|
|
"ci_type": "percentile [2.5%, 97.5%]",
|
|
"effective_sample_size_formula": "n_eff = floor(n_usable / B)",
|
|
"n_eff_expected": {"H015": 219, "H060": 52, "H240": 14},
|
|
"expected_power": {"H015": "high usable-origin count", "H060": "moderate effective sample", "H240": "low effective sample"},
|
|
"power_note": "H240 must not be claimed to match H15 power; underpowered horizons are classified INCONCLUSIVE"
|
|
},
|
|
"fwer": {
|
|
"family": [60, 240],
|
|
"alpha_familywise": 0.05,
|
|
"control_horizon": "H0=15 outside family (in-study replication only, no independent claim)",
|
|
"method": "joint cross-horizon block bootstrap preserving chronological and cross-horizon dependence; max-statistic under re-centered global null; per-horizon interpretation only after global gate rejection",
|
|
"prohibited": ["independent per-horizon z-max approximation", "horizon shopping", "post-hoc multiplicity changes"]
|
|
},
|
|
"cost_params": {
|
|
"headline_round_trip_bps": 7.57,
|
|
"median_tick_spread_bps": 1.57,
|
|
"commission_bps": 6.00,
|
|
"status": "PRE-REGISTERED GLOBAL CONSTANT",
|
|
"formula": "cost_atr(o) = (7.57 / 10000) * close(o) / ATR20(o)",
|
|
"applied_to": "every origin, every primary horizon, identically",
|
|
"prohibited": ["future-looking spreads", "post-origin tick spreads", "cost tuning after results"],
|
|
"sensitivity": {"0.5x": "descriptive only", "2x": "descriptive only", "primary_decision_impact": "none"}
|
|
},
|
|
"primary_metrics": [
|
|
"direction accuracy (dependence-aware 95% CI)",
|
|
"mean gross return in ATR units (dependence-aware 95% CI)",
|
|
"mean net return in ATR units (dependence-aware 95% CI)",
|
|
"time-normalized / holding-period economic return"
|
|
],
|
|
"secondary_metrics": [
|
|
"MASE", "gross/cost ratio", "cost/range ratio", "trade coverage",
|
|
"number of origins", "effective sample size", "turnover/trade frequency",
|
|
"annualized or time-normalized economics", "EARLY/MIDDLE/LATE descriptive"
|
|
],
|
|
"no_lookahead_gates": {
|
|
"gates": ["F1 feature", "F2 target", "F3 ATR", "F4 SAX window", "F5 training boundary", "F6 normalization", "F7 horizon endpoint", "F8 cost", "F9 tick-derived"],
|
|
"classification": ["OBSERVED", "INFERRED", "UNKNOWN", "DECISION"],
|
|
"mutation_testing": "every primary horizon (15/60/240); >=3 origins per horizon",
|
|
"failure_classification": "INVALID / HARD STOP",
|
|
"defect_001": "SAX z-normalization invariant preserved; regression = HARD STOP"
|
|
},
|
|
"generated_design_artifacts": {
|
|
"protocol": "results/R2-H/R2_H_PROTOCOL.md",
|
|
"manifest": "results/R2-H/R2_H_MANIFEST.json",
|
|
"origin_lists": [
|
|
"results/R2-H/origins_H015.csv",
|
|
"results/R2-H/origins_H060.csv",
|
|
"results/R2-H/origins_H240.csv"
|
|
],
|
|
"generator": "scripts/run_r2h_origins.py"
|
|
},
|
|
"note": "Design freeze only. No forecasting model executed, no performance computed, no prediction/evidence artifact produced. Execution requires a separate explicit EXECUTION AUTHORIZATION gate."
|
|
} |