diff --git a/blueprints/bo-h1-volregime.json b/blueprints/bo-h1-volregime.json new file mode 100644 index 0000000..abfeee7 --- /dev/null +++ b/blueprints/bo-h1-volregime.json @@ -0,0 +1 @@ +{"format_version":1,"blueprint":{"name":"bo_h1_volregime","nodes":[{"primitive":{"type":"Resample","name":"h1","bound":[{"pos":0,"name":"period_minutes","kind":"I64","value":{"I64":60}}]}},{"primitive":{"type":"Delay","name":"prev_high","bound":[{"pos":0,"name":"lag","kind":"I64","value":{"I64":1}}]}},{"primitive":{"type":"Delay","name":"prev_low","bound":[{"pos":0,"name":"lag","kind":"I64","value":{"I64":1}}]}},{"primitive":{"type":"RollingMax","name":"channel_hi"}},{"primitive":{"type":"RollingMin","name":"channel_lo"}},{"primitive":{"type":"Gt","name":"long_break"}},{"primitive":{"type":"Gt","name":"short_break"}},{"primitive":{"type":"Latch","name":"long_latch"}},{"primitive":{"type":"Latch","name":"short_latch"}},{"primitive":{"type":"Delay","name":"prev_close","bound":[{"pos":0,"name":"lag","kind":"I64","value":{"I64":1}}]}},{"primitive":{"type":"Sub","name":"ret"}},{"primitive":{"type":"Mul","name":"ret_sq"}},{"primitive":{"type":"SMA","name":"vol_short","bound":[{"pos":0,"name":"length","kind":"I64","value":{"I64":24}}]}},{"primitive":{"type":"SMA","name":"vol_long"}},{"primitive":{"type":"Sqrt","name":"rms_short"}},{"primitive":{"type":"Sqrt","name":"rms_long"}},{"primitive":{"type":"Gt","name":"expansion"}},{"primitive":{"type":"Gt","name":"contraction"}},{"primitive":{"type":"Latch","name":"regime_latch"}},{"primitive":{"type":"Mul","name":"gated_long"}},{"primitive":{"type":"Mul","name":"gated_short"}},{"primitive":{"type":"Sub","name":"bias"}}],"edges":[{"from":0,"to":1,"slot":0,"from_field":1},{"from":0,"to":2,"slot":0,"from_field":2},{"from":1,"to":3,"slot":0,"from_field":0},{"from":2,"to":4,"slot":0,"from_field":0},{"from":0,"to":5,"slot":0,"from_field":3},{"from":3,"to":5,"slot":1,"from_field":0},{"from":4,"to":6,"slot":0,"from_field":0},{"from":0,"to":6,"slot":1,"from_field":3},{"from":5,"to":7,"slot":0,"from_field":0},{"from":6,"to":7,"slot":1,"from_field":0},{"from":6,"to":8,"slot":0,"from_field":0},{"from":5,"to":8,"slot":1,"from_field":0},{"from":0,"to":9,"slot":0,"from_field":3},{"from":0,"to":10,"slot":0,"from_field":3},{"from":9,"to":10,"slot":1,"from_field":0},{"from":10,"to":11,"slot":0,"from_field":0},{"from":10,"to":11,"slot":1,"from_field":0},{"from":11,"to":12,"slot":0,"from_field":0},{"from":11,"to":13,"slot":0,"from_field":0},{"from":12,"to":14,"slot":0,"from_field":0},{"from":13,"to":15,"slot":0,"from_field":0},{"from":14,"to":16,"slot":0,"from_field":0},{"from":15,"to":16,"slot":1,"from_field":0},{"from":15,"to":17,"slot":0,"from_field":0},{"from":14,"to":17,"slot":1,"from_field":0},{"from":16,"to":18,"slot":0,"from_field":0},{"from":17,"to":18,"slot":1,"from_field":0},{"from":7,"to":19,"slot":0,"from_field":0},{"from":18,"to":19,"slot":1,"from_field":0},{"from":8,"to":20,"slot":0,"from_field":0},{"from":18,"to":20,"slot":1,"from_field":0},{"from":19,"to":21,"slot":0,"from_field":0},{"from":20,"to":21,"slot":1,"from_field":0}],"input_roles":[{"name":"open","targets":[{"node":0,"slot":0}],"source":"F64"},{"name":"high","targets":[{"node":0,"slot":1}],"source":"F64"},{"name":"low","targets":[{"node":0,"slot":2}],"source":"F64"},{"name":"close","targets":[{"node":0,"slot":3}],"source":"F64"}],"output":[{"node":21,"field":0,"name":"bias"}],"gangs":[{"name":"channel_length","kind":"I64","members":[{"node":3,"pos":0,"name":"length"},{"node":4,"pos":0,"name":"length"}]}]}} diff --git a/blueprints/bo-h4-trend.json b/blueprints/bo-h4-trend.json new file mode 100644 index 0000000..a8c1279 --- /dev/null +++ b/blueprints/bo-h4-trend.json @@ -0,0 +1 @@ +{"format_version":1,"blueprint":{"name":"bo_h4_trend","nodes":[{"primitive":{"type":"Resample","name":"h4","bound":[{"pos":0,"name":"period_minutes","kind":"I64","value":{"I64":240}}]}},{"primitive":{"type":"Delay","name":"prev_high","bound":[{"pos":0,"name":"lag","kind":"I64","value":{"I64":1}}]}},{"primitive":{"type":"Delay","name":"prev_low","bound":[{"pos":0,"name":"lag","kind":"I64","value":{"I64":1}}]}},{"primitive":{"type":"RollingMax","name":"channel_hi"}},{"primitive":{"type":"RollingMin","name":"channel_lo"}},{"primitive":{"type":"Gt","name":"breakout_up"}},{"primitive":{"type":"Gt","name":"breakout_dn"}},{"primitive":{"type":"Latch","name":"long_latch"}},{"primitive":{"type":"Latch","name":"short_latch"}},{"primitive":{"type":"EMA","name":"ema_fast","bound":[{"pos":0,"name":"length","kind":"I64","value":{"I64":12}}]}},{"primitive":{"type":"EMA","name":"ema_slow","bound":[{"pos":0,"name":"length","kind":"I64","value":{"I64":48}}]}},{"primitive":{"type":"Gt","name":"uptrend"}},{"primitive":{"type":"Gt","name":"downtrend"}},{"primitive":{"type":"Latch","name":"trend_long"}},{"primitive":{"type":"Latch","name":"trend_short"}},{"primitive":{"type":"Mul","name":"gated_long"}},{"primitive":{"type":"Mul","name":"gated_short"}},{"primitive":{"type":"Sub","name":"bias"}}],"edges":[{"from":0,"to":1,"slot":0,"from_field":1},{"from":0,"to":2,"slot":0,"from_field":2},{"from":1,"to":3,"slot":0,"from_field":0},{"from":2,"to":4,"slot":0,"from_field":0},{"from":0,"to":5,"slot":0,"from_field":3},{"from":3,"to":5,"slot":1,"from_field":0},{"from":4,"to":6,"slot":0,"from_field":0},{"from":0,"to":6,"slot":1,"from_field":3},{"from":5,"to":7,"slot":0,"from_field":0},{"from":6,"to":7,"slot":1,"from_field":0},{"from":6,"to":8,"slot":0,"from_field":0},{"from":5,"to":8,"slot":1,"from_field":0},{"from":0,"to":9,"slot":0,"from_field":3},{"from":0,"to":10,"slot":0,"from_field":3},{"from":9,"to":11,"slot":0,"from_field":0},{"from":10,"to":11,"slot":1,"from_field":0},{"from":10,"to":12,"slot":0,"from_field":0},{"from":9,"to":12,"slot":1,"from_field":0},{"from":11,"to":13,"slot":0,"from_field":0},{"from":12,"to":13,"slot":1,"from_field":0},{"from":12,"to":14,"slot":0,"from_field":0},{"from":11,"to":14,"slot":1,"from_field":0},{"from":7,"to":15,"slot":0,"from_field":0},{"from":13,"to":15,"slot":1,"from_field":0},{"from":8,"to":16,"slot":0,"from_field":0},{"from":14,"to":16,"slot":1,"from_field":0},{"from":15,"to":17,"slot":0,"from_field":0},{"from":16,"to":17,"slot":1,"from_field":0}],"input_roles":[{"name":"open","targets":[{"node":0,"slot":0}],"source":"F64"},{"name":"high","targets":[{"node":0,"slot":1}],"source":"F64"},{"name":"low","targets":[{"node":0,"slot":2}],"source":"F64"},{"name":"close","targets":[{"node":0,"slot":3}],"source":"F64"}],"output":[{"node":17,"field":0,"name":"bias"}]}} diff --git a/blueprints/channelpos-fade-h1.json b/blueprints/channelpos-fade-h1.json new file mode 100644 index 0000000..addf8c1 --- /dev/null +++ b/blueprints/channelpos-fade-h1.json @@ -0,0 +1 @@ +{"format_version":1,"blueprint":{"name":"channelpos_fade_h1","nodes":[{"primitive":{"type":"Resample","name":"h1","bound":[{"pos":0,"name":"period_minutes","kind":"I64","value":{"I64":60}}]}},{"primitive":{"type":"Delay","name":"prev_high","bound":[{"pos":0,"name":"lag","kind":"I64","value":{"I64":1}}]}},{"primitive":{"type":"Delay","name":"prev_low","bound":[{"pos":0,"name":"lag","kind":"I64","value":{"I64":1}}]}},{"primitive":{"type":"RollingMax","name":"channel_hi"}},{"primitive":{"type":"RollingMin","name":"channel_lo"}},{"primitive":{"type":"Sub","name":"dist_low"}},{"primitive":{"type":"Sub","name":"chan_range"}},{"primitive":{"type":"Div","name":"pos"}},{"primitive":{"type":"Const","name":"half","bound":[{"pos":0,"name":"value","kind":"F64","value":{"F64":0.5}}]}},{"primitive":{"type":"Sub","name":"neg_centered"}},{"primitive":{"type":"Bias","name":"bias"}}],"edges":[{"from":0,"to":1,"slot":0,"from_field":1},{"from":0,"to":2,"slot":0,"from_field":2},{"from":1,"to":3,"slot":0,"from_field":0},{"from":2,"to":4,"slot":0,"from_field":0},{"from":0,"to":5,"slot":0,"from_field":3},{"from":4,"to":5,"slot":1,"from_field":0},{"from":3,"to":6,"slot":0,"from_field":0},{"from":4,"to":6,"slot":1,"from_field":0},{"from":5,"to":7,"slot":0,"from_field":0},{"from":6,"to":7,"slot":1,"from_field":0},{"from":0,"to":8,"slot":0,"from_field":3},{"from":8,"to":9,"slot":0,"from_field":0},{"from":7,"to":9,"slot":1,"from_field":0},{"from":9,"to":10,"slot":0,"from_field":0}],"input_roles":[{"name":"open","targets":[{"node":0,"slot":0}],"source":"F64"},{"name":"high","targets":[{"node":0,"slot":1}],"source":"F64"},{"name":"low","targets":[{"node":0,"slot":2}],"source":"F64"},{"name":"close","targets":[{"node":0,"slot":3}],"source":"F64"}],"output":[{"node":10,"field":0,"name":"bias"}],"gangs":[{"name":"channel_length","kind":"I64","members":[{"node":3,"pos":0,"name":"length"},{"node":4,"pos":0,"name":"length"}]}]}} diff --git a/blueprints/meanrev-z-h1.json b/blueprints/meanrev-z-h1.json new file mode 100644 index 0000000..f384a8b --- /dev/null +++ b/blueprints/meanrev-z-h1.json @@ -0,0 +1 @@ +{"format_version":1,"blueprint":{"name":"meanrev_z_h1","nodes":[{"primitive":{"type":"Resample","name":"h1","bound":[{"pos":0,"name":"period_minutes","kind":"I64","value":{"I64":60}}]}},{"primitive":{"type":"SMA","name":"mean"}},{"primitive":{"type":"Mul","name":"sq"}},{"primitive":{"type":"SMA","name":"mean_sq"}},{"primitive":{"type":"Mul","name":"mean_sq2"}},{"primitive":{"type":"Sub","name":"var"}},{"primitive":{"type":"Sqrt","name":"std"}},{"primitive":{"type":"Sub","name":"dev_fade"}},{"primitive":{"type":"Div","name":"zfade"}},{"primitive":{"type":"Bias","name":"fade","bound":[{"pos":0,"name":"scale","kind":"F64","value":{"F64":1.0}}]}}],"edges":[{"from":0,"to":1,"slot":0,"from_field":3},{"from":0,"to":2,"slot":0,"from_field":3},{"from":0,"to":2,"slot":1,"from_field":3},{"from":2,"to":3,"slot":0,"from_field":0},{"from":1,"to":4,"slot":0,"from_field":0},{"from":1,"to":4,"slot":1,"from_field":0},{"from":3,"to":5,"slot":0,"from_field":0},{"from":4,"to":5,"slot":1,"from_field":0},{"from":5,"to":6,"slot":0,"from_field":0},{"from":1,"to":7,"slot":0,"from_field":0},{"from":0,"to":7,"slot":1,"from_field":3},{"from":7,"to":8,"slot":0,"from_field":0},{"from":6,"to":8,"slot":1,"from_field":0},{"from":8,"to":9,"slot":0,"from_field":0}],"input_roles":[{"name":"open","targets":[{"node":0,"slot":0}],"source":"F64"},{"name":"high","targets":[{"node":0,"slot":1}],"source":"F64"},{"name":"low","targets":[{"node":0,"slot":2}],"source":"F64"},{"name":"close","targets":[{"node":0,"slot":3}],"source":"F64"}],"output":[{"node":9,"field":0,"name":"bias"}],"gangs":[{"name":"window","kind":"I64","members":[{"node":1,"pos":0,"name":"length"},{"node":3,"pos":0,"name":"length"}]}]}} diff --git a/blueprints/mom-vnorm-h1.json b/blueprints/mom-vnorm-h1.json new file mode 100644 index 0000000..9c88911 --- /dev/null +++ b/blueprints/mom-vnorm-h1.json @@ -0,0 +1 @@ +{"format_version":1,"blueprint":{"name":"mom_vnorm_h1","nodes":[{"primitive":{"type":"Resample","name":"h1","bound":[{"pos":0,"name":"period_minutes","kind":"I64","value":{"I64":60}}]}},{"primitive":{"type":"Delay","name":"mom_lag"}},{"primitive":{"type":"Sub","name":"momentum"}},{"primitive":{"type":"Delay","name":"ret_lag","bound":[{"pos":0,"name":"lag","kind":"I64","value":{"I64":1}}]}},{"primitive":{"type":"Sub","name":"ret"}},{"primitive":{"type":"Mul","name":"ret_sq"}},{"primitive":{"type":"SMA","name":"vol_avg"}},{"primitive":{"type":"Sqrt","name":"vol"}},{"primitive":{"type":"Div","name":"score"}},{"primitive":{"type":"Bias","name":"bias","bound":[{"pos":0,"name":"scale","kind":"F64","value":{"F64":0.1}}]}}],"edges":[{"from":0,"to":1,"slot":0,"from_field":3},{"from":0,"to":2,"slot":0,"from_field":3},{"from":1,"to":2,"slot":1,"from_field":0},{"from":0,"to":3,"slot":0,"from_field":3},{"from":0,"to":4,"slot":0,"from_field":3},{"from":3,"to":4,"slot":1,"from_field":0},{"from":4,"to":5,"slot":0,"from_field":0},{"from":4,"to":5,"slot":1,"from_field":0},{"from":5,"to":6,"slot":0,"from_field":0},{"from":6,"to":7,"slot":0,"from_field":0},{"from":2,"to":8,"slot":0,"from_field":0},{"from":7,"to":8,"slot":1,"from_field":0},{"from":8,"to":9,"slot":0,"from_field":0}],"input_roles":[{"name":"open","targets":[{"node":0,"slot":0}],"source":"F64"},{"name":"high","targets":[{"node":0,"slot":1}],"source":"F64"},{"name":"low","targets":[{"node":0,"slot":2}],"source":"F64"},{"name":"close","targets":[{"node":0,"slot":3}],"source":"F64"}],"output":[{"node":9,"field":0,"name":"bias"}]}} diff --git a/blueprints/trend-h4-cross.json b/blueprints/trend-h4-cross.json new file mode 100644 index 0000000..c733cfe --- /dev/null +++ b/blueprints/trend-h4-cross.json @@ -0,0 +1 @@ +{"format_version":1,"blueprint":{"name":"trend_h4_cross","nodes":[{"primitive":{"type":"Resample","name":"h4","bound":[{"pos":0,"name":"period_minutes","kind":"I64","value":{"I64":240}}]}},{"primitive":{"type":"EMA","name":"ema_fast"}},{"primitive":{"type":"EMA","name":"ema_slow"}},{"primitive":{"type":"Sub","name":"trend"}},{"primitive":{"type":"Delay","name":"prev_close","bound":[{"pos":0,"name":"lag","kind":"I64","value":{"I64":1}}]}},{"primitive":{"type":"Sub","name":"ret"}},{"primitive":{"type":"Mul","name":"ret_sq"}},{"primitive":{"type":"SMA","name":"ret_var","bound":[{"pos":0,"name":"length","kind":"I64","value":{"I64":24}}]}},{"primitive":{"type":"Sqrt","name":"vol"}},{"primitive":{"type":"Div","name":"trend_norm"}},{"primitive":{"type":"Bias","name":"bias","bound":[{"pos":0,"name":"scale","kind":"F64","value":{"F64":2.0}}]}}],"edges":[{"from":0,"to":1,"slot":0,"from_field":3},{"from":0,"to":2,"slot":0,"from_field":3},{"from":1,"to":3,"slot":0,"from_field":0},{"from":2,"to":3,"slot":1,"from_field":0},{"from":0,"to":4,"slot":0,"from_field":3},{"from":0,"to":5,"slot":0,"from_field":3},{"from":4,"to":5,"slot":1,"from_field":0},{"from":5,"to":6,"slot":0,"from_field":0},{"from":5,"to":6,"slot":1,"from_field":0},{"from":6,"to":7,"slot":0,"from_field":0},{"from":7,"to":8,"slot":0,"from_field":0},{"from":3,"to":9,"slot":0,"from_field":0},{"from":8,"to":9,"slot":1,"from_field":0},{"from":9,"to":10,"slot":0,"from_field":0}],"input_roles":[{"name":"open","targets":[{"node":0,"slot":0}],"source":"F64"},{"name":"high","targets":[{"node":0,"slot":1}],"source":"F64"},{"name":"low","targets":[{"node":0,"slot":2}],"source":"F64"},{"name":"close","targets":[{"node":0,"slot":3}],"source":"F64"}],"output":[{"node":10,"field":0,"name":"bias"}]}} diff --git a/docs/arc-3-hypothesis-fanout.md b/docs/arc-3-hypothesis-fanout.md new file mode 100644 index 0000000..a113009 --- /dev/null +++ b/docs/arc-3-hypothesis-fanout.md @@ -0,0 +1,88 @@ +# Arc 3 — six new data-only signal families, designed engine-blind + +**Date:** 2026-07-13 +**Engine:** aura @ `84e1075` (release build) +**Blueprints:** `blueprints/{mom-vnorm-h1,meanrev-z-h1,bo-h1-volregime,trend-h4-cross,bo-h4-trend,channelpos-fade-h1}.json` +**Campaigns:** `research/campaign-arc3-*.json` + +## Method + +Two experiments in one arc. + +**The research question:** which signal families expressible in the std +vocabulary alone carry directional information on H1/H4 bars? Six families, +each a confirm/refute hypothesis (a base signal or a conditioner-over-base), +were run over the Arc 1 four-instrument matrix × three stop regimes +(vol{3,k2} = Arc 1, vol{60,k6}, vol{60,k12} = the Arc 2c ladder) with +vol-proportional slippage, through the Arc 1 pipeline (deflated screen → +90/30 WF → pooled-OOS bootstrap → generalize). + +**The meta-experiment:** every blueprint was designed by an agent that had +*no access to engine sources* — only a distilled authoring reference card +(node vocabulary with port tables, op-script grammar, document schemas, unit +semantics, design rules) plus the CLI validation loop (`graph build`, +`introspect --params`, three-tier `campaign validate`). Each design passed an +independent adversarial design review (look-ahead, unit-consistency, wiring, +grid sanity, hypothesis shape) before anything ran. Result: 6/6 families +built and validated green on the first run attempt — evidence that the +deployment posture (docs + self-describing CLI, no sources) is sufficient +for the authoring role *if* the semantic gaps named in Arc 2's engine-gap +list are closed by documentation. + +## The families and their verdicts + +| family | hypothesis (compressed) | verdict | +|---|---|---| +| `mom_vnorm_h1` | sign of (close − close₋ₙ)/realized-vol carries direction | **candidate** on US500; null elsewhere | +| `meanrev_z_h1` | H1 deviations from SMA in std units revert | null | +| `bo_h1_volregime` | vol-expansion regime reshapes the H1 breakout | null (no reshaping that survives) | +| `trend_h4_cross` | H4 EMA-spread in vol units carries direction | null, OOS strongly negative | +| `bo_h4_trend` | Arc 1 pair stabilizes on H4 bars | null — textbook IS-overfit signature | +| `channelpos_fade_h1` | position in the recent range mean-reverts | null, extreme churn | + +## Findings + +1. **Vol-normalized momentum on US500 is the only regime-robust OOS positive + of the whole program.** Pooled WF-OOS gross bootstrap: mean +0.171 + (P(E[R]≤0) = 0.026, n=8951) at vol{3,k2}; +0.102 (P = 0.036) at vol{60,k6}; + +0.071 (P = 0.044) at vol{60,k12}. Winner parameters are stable + (mom_lag=72 ≈ 3 days, vol_avg=24) across regimes, and full-window net (at + slippage stress) turns positive at wide stops (+0.012 at k6, +0.028 at + k12). Deflated scores stay slightly negative — within its own 9-member + family the winner is not distinguishable from luck; the OOS consistency + across three (correlated) regimes is what makes this a candidate rather + than a null. GER40 leans the same way gross (OOS +0.10, P 0.15) without + getting there; EURUSD and XAUUSD are OOS noise. +2. **The H4 breakout is a lesson in why the pipeline exists.** Full-window + nets look excellent (XAUUSD: 7–9/9 members net-positive per regime, best + +0.37; US500 deflated +0.028 at k6) while the WF-OOS bootstraps are noise + (P 0.37–0.79) and generalize floors are the worst of the arc (−0.55 to + −1.40, sign 0/4). 90-day refit windows on H4 bars leave ~540 bars per + window — the refits chase noise the full-window fit averages away. + Without the WF/MC stages this family would have been a false discovery. +3. **Conditioners keep failing on this breakout.** Arc 1's trend gate and + arc 3's vol-expansion gate both fail to produce a reshaping that survives + the pipeline — the base H1 breakout's instrument-dependence (Arc 1's + core finding) is not explained by trend or vol regime. +4. **Mean-reversion families select at the grid edge** (`meanrev_z_h1` picks + window=24 and fade=0.5, both extreme values; `channelpos_fade_h1` runs + 14 000–26 000 trades) — the H1 mean-reversion hypothesis wants a faster + timescale than this grid, and pays for it in churn. A refinement would + need finer bars and a cost-realistic churn budget, not more grid points. + +## Verdict + +Five honest nulls and one candidate. `mom_vnorm_h1` earns a breadth test +(`research/campaign-arc4-breadth-mom-vnorm.json`, 22 instruments) against +the always-long beta control (`research/campaign-control-always-long.json`) +— US500 2018–2026 is a secular bull market, and a 3-day momentum long-lean +on an index that mostly rose must beat beta, not zero, before it is +interesting. See `docs/arc-4-breadth-and-controls.md`. + +## Engine friction + +None new beyond the Arc 2 list. The campaign path carried six new blueprint +families, a degenerate one-member control sweep, and 22-instrument matrices +without a single executor complaint; every authoring error was caught at +`graph build` / three-tier validate time with a message that named the +problem. diff --git a/research/campaign-arc3-bo-h1-volregime.json b/research/campaign-arc3-bo-h1-volregime.json new file mode 100644 index 0000000..79bcbbb --- /dev/null +++ b/research/campaign-arc3-bo-h1-volregime.json @@ -0,0 +1,84 @@ +{ + "format_version": 1, + "kind": "campaign", + "name": "arc3-bo-h1-volregime", + "description": "Arc 3 family bo-h1-volregime: Conditioning the Arc-1 H1 donchian breakout on a volatility-EXPANSION regime reshapes the breakout R-distribution. The base signal is the prev-bar channel breakout (long_latch = Latch(close > prev-bar RollingMax, close < prev-bar RollingMin), short_latch the mirror). The regime is non-directional: on H1 returns r = close \u2212 Delay(close,1), vol_short = Sqrt(SMA(r\u00b2, Ls)) and vol_long = Sqrt(SMA(r\u00b2, L", + "seed": 0, + "data": { + "instruments": [ + "GER40", + "US500", + "EURUSD", + "XAUUSD" + ], + "windows": [ + { + "from_ms": 1514764800000, + "to_ms": 1782863999999 + } + ] + }, + "risk": [ + { + "vol": { + "length": 3, + "k": 2.0 + } + }, + { + "vol": { + "length": 60, + "k": 6.0 + } + }, + { + "vol": { + "length": 60, + "k": 12.0 + } + } + ], + "cost": [ + { + "vol_slippage": { + "slip_vol_mult": 0.1 + } + } + ], + "strategies": [ + { + "ref": { + "content_id": "f878dc0f0837bad88585286f709f55ad5058c7948554a136e544397ca3f43a59" + }, + "axes": { + "channel_length": { + "kind": "I64", + "values": [ + 24, + 48, + 96 + ] + }, + "vol_long.length": { + "kind": "I64", + "values": [ + 48, + 96, + 192 + ] + } + } + } + ], + "process": { + "ref": { + "content_id": "41863fcae9300b334056c6f2a899e8c2672ecb29387d294e9a6e58f159ef51b4" + } + }, + "presentation": { + "persist_taps": [], + "emit": [ + "selection_report" + ] + } +} \ No newline at end of file diff --git a/research/campaign-arc3-bo-h4-trend.json b/research/campaign-arc3-bo-h4-trend.json new file mode 100644 index 0000000..891d995 --- /dev/null +++ b/research/campaign-arc3-bo-h4-trend.json @@ -0,0 +1,84 @@ +{ + "format_version": 1, + "kind": "campaign", + "name": "arc3-bo-h4-trend", + "description": "Arc 3 family bo-h4-trend: Porting the Arc-1 donchian-breakout + EMA(12)/EMA(48) trend-gate pair verbatim from H1 (Resample 60) to H4 (Resample 240) will stabilize the instrument-dependent R-distribution reshaping observed in Arc 1: on coarser 4-hour bars the same channel-breakout-with-trend-confirmation signal should produce a more consistent bias sign and a more uniform per-instrument expectancy across GER40/US500/EURUSD/", + "seed": 0, + "data": { + "instruments": [ + "GER40", + "US500", + "EURUSD", + "XAUUSD" + ], + "windows": [ + { + "from_ms": 1514764800000, + "to_ms": 1782863999999 + } + ] + }, + "risk": [ + { + "vol": { + "length": 3, + "k": 2.0 + } + }, + { + "vol": { + "length": 60, + "k": 6.0 + } + }, + { + "vol": { + "length": 60, + "k": 12.0 + } + } + ], + "cost": [ + { + "vol_slippage": { + "slip_vol_mult": 0.1 + } + } + ], + "strategies": [ + { + "ref": { + "content_id": "52da5de2d914061bf90a5e3f21caedbe85a4fb84e8056a4e61b535ed7ceb78c3" + }, + "axes": { + "channel_hi.length": { + "kind": "I64", + "values": [ + 12, + 24, + 48 + ] + }, + "channel_lo.length": { + "kind": "I64", + "values": [ + 12, + 24, + 48 + ] + } + } + } + ], + "process": { + "ref": { + "content_id": "41863fcae9300b334056c6f2a899e8c2672ecb29387d294e9a6e58f159ef51b4" + } + }, + "presentation": { + "persist_taps": [], + "emit": [ + "selection_report" + ] + } +} \ No newline at end of file diff --git a/research/campaign-arc3-channelpos-fade-h1.json b/research/campaign-arc3-channelpos-fade-h1.json new file mode 100644 index 0000000..3b32294 --- /dev/null +++ b/research/campaign-arc3-channelpos-fade-h1.json @@ -0,0 +1,84 @@ +{ + "format_version": 1, + "kind": "campaign", + "name": "arc3-channelpos-fade-h1", + "description": "Arc 3 family channelpos-fade-h1: Position within the recent H1 range mean-reverts: when the H1 close sits near the top of the prior N-bar high/low channel (pos toward 1) price tends to fall back, and near the bottom (pos toward 0) it tends to rebound. The blueprint fades that position \u2014 bias = Bias(-(pos-0.5)*scale), i.e. short the top of the channel, long the bottom. CONFIRM if this fade produces positive net-of-cost pooled WF-O", + "seed": 0, + "data": { + "instruments": [ + "GER40", + "US500", + "EURUSD", + "XAUUSD" + ], + "windows": [ + { + "from_ms": 1514764800000, + "to_ms": 1782863999999 + } + ] + }, + "risk": [ + { + "vol": { + "length": 3, + "k": 2.0 + } + }, + { + "vol": { + "length": 60, + "k": 6.0 + } + }, + { + "vol": { + "length": 60, + "k": 12.0 + } + } + ], + "cost": [ + { + "vol_slippage": { + "slip_vol_mult": 0.1 + } + } + ], + "strategies": [ + { + "ref": { + "content_id": "2663716da7ab72dc287a13e01c4b529efd0cd7b9afc3516fe500e102cb61fcdb" + }, + "axes": { + "channel_length": { + "kind": "I64", + "values": [ + 24, + 48, + 96 + ] + }, + "bias.scale": { + "kind": "F64", + "values": [ + 2.0, + 4.0, + 8.0 + ] + } + } + } + ], + "process": { + "ref": { + "content_id": "41863fcae9300b334056c6f2a899e8c2672ecb29387d294e9a6e58f159ef51b4" + } + }, + "presentation": { + "persist_taps": [], + "emit": [ + "selection_report" + ] + } +} \ No newline at end of file diff --git a/research/campaign-arc3-meanrev-z-h1.json b/research/campaign-arc3-meanrev-z-h1.json new file mode 100644 index 0000000..abaf74f --- /dev/null +++ b/research/campaign-arc3-meanrev-z-h1.json @@ -0,0 +1,84 @@ +{ + "format_version": 1, + "kind": "campaign", + "name": "arc3-meanrev-z-h1", + "description": "Arc 3 family meanrev-z-h1: On H1 bars, price deviations from the local mean mean-revert, so fading the deviation carries positive expectancy. We compute a rolling z-score z = (close \u2212 SMA(close,L)) / rollingStd(close,L) over a window L spanning ~1\u201310 trading days of H1 bars, and take bias = Bias(\u2212z \u00b7 scale), i.e. we go short when close is stretched above its local mean and long when stretched below. CONFIRM if pooled WF-OOS", + "seed": 0, + "data": { + "instruments": [ + "GER40", + "US500", + "EURUSD", + "XAUUSD" + ], + "windows": [ + { + "from_ms": 1514764800000, + "to_ms": 1782863999999 + } + ] + }, + "risk": [ + { + "vol": { + "length": 3, + "k": 2.0 + } + }, + { + "vol": { + "length": 60, + "k": 6.0 + } + }, + { + "vol": { + "length": 60, + "k": 12.0 + } + } + ], + "cost": [ + { + "vol_slippage": { + "slip_vol_mult": 0.1 + } + } + ], + "strategies": [ + { + "ref": { + "content_id": "d4e341ef35e8dad90a9a26cf484a1f2d1b71bb631a7e5fb4d547779066ba5bea" + }, + "axes": { + "window": { + "kind": "I64", + "values": [ + 24, + 96, + 240 + ] + }, + "fade.scale": { + "kind": "F64", + "values": [ + 0.5, + 1.0, + 2.0 + ] + } + } + } + ], + "process": { + "ref": { + "content_id": "41863fcae9300b334056c6f2a899e8c2672ecb29387d294e9a6e58f159ef51b4" + } + }, + "presentation": { + "persist_taps": [], + "emit": [ + "selection_report" + ] + } +} \ No newline at end of file diff --git a/research/campaign-arc3-mom-vnorm-h1.json b/research/campaign-arc3-mom-vnorm-h1.json new file mode 100644 index 0000000..b3a7c38 --- /dev/null +++ b/research/campaign-arc3-mom-vnorm-h1.json @@ -0,0 +1,84 @@ +{ + "format_version": 1, + "kind": "campaign", + "name": "arc3-mom-vnorm-h1", + "description": "Arc 3 family mom-vnorm-h1: On H1 bars, the SIGN of vol-normalized momentum carries directional information: score = (close - close_{t-n}) / sqrt(mean of squared 1-bar returns over L bars) is a unit-free, risk-adjusted momentum that should be positive before up-moves and negative before down-moves, so a bias equal to sign(score) (squashed by Bias) should earn a positive net-of-cost expectancy_r on H1 and generalize across in", + "seed": 0, + "data": { + "instruments": [ + "GER40", + "US500", + "EURUSD", + "XAUUSD" + ], + "windows": [ + { + "from_ms": 1514764800000, + "to_ms": 1782863999999 + } + ] + }, + "risk": [ + { + "vol": { + "length": 3, + "k": 2.0 + } + }, + { + "vol": { + "length": 60, + "k": 6.0 + } + }, + { + "vol": { + "length": 60, + "k": 12.0 + } + } + ], + "cost": [ + { + "vol_slippage": { + "slip_vol_mult": 0.1 + } + } + ], + "strategies": [ + { + "ref": { + "content_id": "05045dfaa1e399c12505e21dc87c36a61b7bbfda75c0bebc2e95a9be5bfd9e42" + }, + "axes": { + "mom_lag.lag": { + "kind": "I64", + "values": [ + 24, + 72, + 120 + ] + }, + "vol_avg.length": { + "kind": "I64", + "values": [ + 24, + 72, + 120 + ] + } + } + } + ], + "process": { + "ref": { + "content_id": "41863fcae9300b334056c6f2a899e8c2672ecb29387d294e9a6e58f159ef51b4" + } + }, + "presentation": { + "persist_taps": [], + "emit": [ + "selection_report" + ] + } +} \ No newline at end of file diff --git a/research/campaign-arc3-trend-h4-cross.json b/research/campaign-arc3-trend-h4-cross.json new file mode 100644 index 0000000..1b69f70 --- /dev/null +++ b/research/campaign-arc3-trend-h4-cross.json @@ -0,0 +1,84 @@ +{ + "format_version": 1, + "kind": "campaign", + "name": "arc3-trend-h4-cross", + "description": "Arc 3 family trend-h4-cross: H4 trend slope expressed in realized-volatility units carries directional information: the sign and vol-normalized magnitude of EMA(fast)-EMA(slow) on H4 (240-min) bars predicts forward returns. The bias is bias = clamp( (ema_fast - ema_slow) / realized_vol / scale, -1, +1 ), a unit-free conviction score. CONFIRM if pooled walk-forward OOS expectancy_r is positive with low prob_le_zero, net-of-cos", + "seed": 0, + "data": { + "instruments": [ + "GER40", + "US500", + "EURUSD", + "XAUUSD" + ], + "windows": [ + { + "from_ms": 1514764800000, + "to_ms": 1782863999999 + } + ] + }, + "risk": [ + { + "vol": { + "length": 3, + "k": 2.0 + } + }, + { + "vol": { + "length": 60, + "k": 6.0 + } + }, + { + "vol": { + "length": 60, + "k": 12.0 + } + } + ], + "cost": [ + { + "vol_slippage": { + "slip_vol_mult": 0.1 + } + } + ], + "strategies": [ + { + "ref": { + "content_id": "f5d723c4d7dbf5cb5e8e6d775ef69f8831cce1e7272dd5441e9d5d2b23f9af7a" + }, + "axes": { + "ema_fast.length": { + "kind": "I64", + "values": [ + 6, + 12, + 24 + ] + }, + "ema_slow.length": { + "kind": "I64", + "values": [ + 48, + 96, + 192 + ] + } + } + } + ], + "process": { + "ref": { + "content_id": "41863fcae9300b334056c6f2a899e8c2672ecb29387d294e9a6e58f159ef51b4" + } + }, + "presentation": { + "persist_taps": [], + "emit": [ + "selection_report" + ] + } +} \ No newline at end of file