fieldtest: milestone-research-artifacts corpus (GREEN) + Aura.toml data-key doc fix (F7)

MILESTONE VERDICT: GREEN — the whole span (0106-0109) holds end to
end as one continuous consumer scenario: authored from a bare {} via
introspection alone, every ref resolved from the public surface, three
validation tiers, run by content id over two real instruments through
the full v2 pipeline, realization recorded (selection/survivors/
bootstrap/generalizations/trace_name), traces on disk and charted,
read back via campaign runs, byte-identical re-runs (C1), refusals
precise. 0 bugs, 0 frictions, 0 spec gaps; 2 doc-gaps.

F7 fixed in this commit (the docs claimed an archive-root path without
naming the key; a guessed [paths] archive silently no-ops): project-
layout and the glossary Aura.toml entry now name [paths] data, and the
aura new template advertises the commented-out key. F8 (op-script
grammar not CLI-discoverable) filed as #208, sibling of the #197 docs
half — one docwriter pass once desired.

The milestone-close gate evidence is this corpus; the formal milestone
close and the push remain user-reserved.

refs #189
This commit is contained in:
2026-07-04 04:45:36 +02:00
parent 01925e0619
commit 6f2cf443c4
26 changed files with 704 additions and 4 deletions
+1
View File
@@ -103,6 +103,7 @@ aura-core = { path = "__ENGINE__/crates/aura-core" }
const AURA_TOML: &str = r#"# Static project context only (C17); paths only.
[paths]
runs = "runs"
# data = "/path/to/archive" # the recorded-data root; defaults to the built-in path
"#;
const GITIGNORE: &str = "/target\nCargo.lock\n/runs\n";
+1 -1
View File
@@ -17,7 +17,7 @@ The primitive `(frozen topology + param-set + data-window + RNG-seed) → determ
### Aura.toml
**Avoid:** —
The per-project declarative config holding only static context — paths only: the data archive root and the runs dir — never logic, and never instrument geometry (that is the recorded sidecar, C15). Its presence marks the project root, the way `Cargo.toml` marks a cargo crate.
The per-project declarative config holding only static context — paths only: `[paths] data` (the archive root; defaults to the built-in path when unset) and `[paths] runs` (the runs dir) — never logic, and never instrument geometry (that is the recorded sidecar, C15). Its presence marks the project root, the way `Cargo.toml` marks a cargo crate.
### backtest
**Avoid:** —
+4 -3
View File
@@ -30,9 +30,10 @@ A project is always a Rust program built on the engine.
```
ger40-lab/ # your research project — a separate Rust crate (cdylib)
├── Aura.toml # STATIC context only, paths only: the runs dir (all
│ # the scaffold emits today), plus a data archive root
│ # once real data enters; no logic — instrument
├── Aura.toml # STATIC context only, paths only: `[paths] runs`
│ # (the runs dir) and `[paths] data` (the archive
│ # root; defaults to the built-in Pepperstone path
│ # when unset); no logic — instrument
│ # geometry is the recorded sidecar (C15), never
│ # authored here
├── Cargo.toml # cdylib; depends on aura-core/aura-std (+ shared node crates);
@@ -0,0 +1,110 @@
# Fieldtest — milestone: Research artifacts (process & campaign documents) — 2026-07-04
**Status:** Draft — awaiting orchestrator triage
**Author:** fieldtester (dispatched by fieldtest skill, milestone-close gate)
## Scope
The milestone "Research artifacts — process & campaign documents" (#189/#192#207,
cycles 01060109) ships roles 5/6b their artifacts: the **process document** (a
closed std-stage validation methodology) and the **campaign document** (persisted
experiment intent — instruments × windows × strategy refs × param axes × process
ref × data-level presentation), authored/validated/executed headless, content-
addressed beside blueprints. Over the four cycles the surface grew from v1
document vocabularies + two-tier validation (0106), through the v1 executor +
blueprint on-ramp (0107), the annotator stages `std::monte_carlo`/`std::generalize`
(0108), to `persist_taps` trace persistence + the third executable validation tier
(0109). This milestone fieldtest runs ONE continuous downstream scenario over the
whole span: introspection-only authoring → 3-tier validate → register → run by
content id → judge the realization → re-run + byte-compare → boundary probes.
## Examples
### fieldtests/milestone-research-artifacts/mra_1_strategy_smacross.json — strategy op-script (role-6a input)
- Open SMA-cross (source→fast/slow SMA→Sub→Bias→expose bias); built via
`graph build` to `mra_1_strategy_built.json`, param space
`fast.length/slow.length/bias.scale`, registered (content id `597d71…`).
- Fits: the campaign references it by content id; exercises `graph introspect
--vocabulary/--node/--unwired/--params/--content-id` + `graph register`.
- Outcome: built, registered, content id stable across sessions. (Op grammar
itself not CLI-discoverable — F8.)
### fieldtests/milestone-research-artifacts/mra_2_process_full_v2.json — full v2 process document
- `std::sweep`(deflate) → `std::gate`(expectancy_r>0) → `std::walk_forward`(rolling)
→ `std::monte_carlo` → `std::generalize`; authored from `process introspect
--unwired/--vocabulary/--block/--metrics` alone; validated, registered (`cd9127…`).
- Fits: the full anti-false-discovery pipeline the milestone promises.
- Outcome: `valid (intrinsic): 5 pipeline blocks`; registered.
### fieldtests/milestone-research-artifacts/mra_3_campaign_full_v2.json — two-instrument campaign
- GER40 + FRA40, 2024-09, axes 2×2×1, process/strategy by content id,
`persist_taps [equity, r_equity]`, `emit [family_table, selection_report]`;
authored from `campaign introspect --unwired/--block` alone; validated all three
tiers, registered (`42edeb…`), run by content id.
- Fits: the whole milestone promise (intent → reproducible recorded evidence).
- Outcome: `valid (executable)`; run exit 0; two nominee trace cells on disk;
chart read-back OK; re-run byte-identical modulo counters.
## Findings
See the recommendation table for classes. Full verbatim evidence is in the run
capture fixtures (`mra_run1_stdout.txt`, `mra_run2_stdout.txt`,
`mra_realization_campaign_runs.jsonl`) and the probe fixtures.
### [working] F1 — full v2 pipeline closes end to end over two instruments
`campaign run <content-id>` executes sweep(deflate)→gate→walk_forward→monte_carlo
per cell + campaign-scope generalize; every stage records its evidence
(deflated_score/overfit_probability, survivor_ordinals, pooled_oos bootstrap with
prob_le_zero, generalization worst_case/sign_agreement/winners). Headless, no compile.
### [working] F2 — bare-`{}` envelope + block/metric introspection bootstrap authoring
`introspect --unwired` on a bare `{}` enumerates every required slot (campaign
names the closed tap vocabulary inline); `--vocabulary`/`--block`/`--metrics`
(with `rankable|gate|generalize|annotation` tags) suffice to author both documents.
### [working] F3 — three tiers, legible degradation
Inside a project: intrinsic + referential + `valid (executable)`. Outside:
intrinsic only + `referential checks skipped (no Aura.toml found up from …)`.
### [working] F4 — C1 reproducibility + content-id stability
Two runs byte-identical modulo the campaign-run + family-run counters; metric
number stream hashes identically; op-script re-hashes to the same content id.
### [working] F5 — auditable / navigable / chartable realization
`campaign runs` list + byte-identical bare-line dump; `trace_name` → on-disk
`{campaign8}-{run}/{strategy8}-{instrument}-w{n}/{tap}.json` family; `aura chart`
renders a nominee cell.
### [working] F6 — refuse-don't-guess + no-compile diffability
Bogus process ref → referential refusal (exit 1); unknown tap → intrinsic
index-addressed refusal naming the closed vocabulary; wrong `kind` → exact-key
prose. A one-value axis edit → new content id, still executable, no compile.
### [doc-gap] F7 — the documented `Aura.toml` data-archive root is not honored
Glossary + `docs/project-layout.md` say the archive root is an `Aura.toml` path;
`aura new` scaffolds none, a `[paths] archive=` key has no effect, and every
real-data path resolves a built-in `/mnt/tickdata/Pepperstone` (named in the
diagnostics). Cross-host reproducibility of recorded evidence is unreachable from
the public surface. Peripheral to the document milestone; does not block it on
this host. Repro: add `archive=` under `[paths]`, run any `--real`/campaign path.
### [doc-gap] F8 — role-6a op-script grammar is not CLI-discoverable
`graph introspect` surfaces node vocabulary + ports but not the op-list verbs
(`source/add/feed/connect/expose`) or their JSON shape; `graph build --help` and
`project-layout.md` do not describe them. Authoring the op-script required the
fieldtest-corpus shape. Orthogonal (role 6a, shipped cycle 0088); does not block
roles 5/6b (strategy ids arrive via C25's id interface).
## Recommendation summary
| Finding | class | action |
|---|---|---|
| F1 pipeline closes end to end | working | carry-on |
| F2 introspection bootstraps authoring | working | carry-on |
| F3 three-tier validate | working | carry-on |
| F4 C1 + content-id stability | working | carry-on |
| F5 auditable/navigable/chartable | working | carry-on |
| F6 refusals + diffability | working | carry-on |
| F7 Aura.toml archive root not honored | doc-gap | tighten glossary + project-layout (planner) |
| F8 op-script grammar undiscoverable | doc-gap | document op grammar (planner, orthogonal) |
**Milestone Verdict: GREEN** — nameable, diffable, auditable research intent
executes reproducibly into recorded, chartable evidence, end to end. The two
doc-gaps are peripheral (archive configurability) and orthogonal (role-6a
discoverability); no bug, friction, or spec_gap in the milestone's own surface.
@@ -0,0 +1,96 @@
# Milestone fieldtest — Research artifacts — process & campaign documents (cycles 01060109) — 2026-07-04
**Role:** downstream consumer (methodology + campaign designer), public
interface only (ledger C18/C22/C25, glossary, CLI --help + introspection, the
fieldtests/ corpora as shape hints). No `crates/` source read. Build:
`cargo build --release -p aura-cli` (HEAD `01925e06`); project dylib built in
the scaffolded `mrp_lab/`. Real data: local Pepperstone archive (GER40 +
FRA40, 2024-09).
**Milestone Verdict: GREEN** — nameable, diffable, auditable research intent
executes reproducibly into recorded, chartable evidence, end to end. Both
findings are doc-gaps, neither a bug nor a broken contract; no
bug/friction/spec_gap in the milestone's own surface.
## The one continuous scenario
- `mra_1_strategy_smacross.json` (+`_built.json`) — op-script → `graph build`
→ register, content id `597d71…` (stable across sessions).
- `mra_2_process_full_v2.json` — sweep(deflate) → gate → walk_forward →
monte_carlo → generalize, authored from introspection alone; registered
`cd9127…`.
- `mra_3_campaign_full_v2.json` — GER40+FRA40, persist_taps [equity,
r_equity], both emit kinds; validated through all three tiers, registered
`42edeb…`, run by content id.
## Findings
### F1 [working] Full v2 pipeline closes end to end over two instruments
`campaign run <content-id>` (exit 0) runs sweep(deflate)→gate→walk_forward→
monte_carlo per cell + campaign-scope generalize. Records: sweep `selection`
(deflated_score/overfit_probability/n_trials), gate `survivor_ordinals:
[0,1,2]`, wf `family_id`, mc `pooled_oos` (GER40 `n_trades:1843,
prob_le_zero:0.274`; FRA40 `1272, 0.412`), `generalizations`
(`worst_case:0.04367…, sign_agreement:2`, per-instrument breakdown + `winners`
params). → carry-on.
### F2 [working] Bare-{} envelope + block/metric introspection bootstrap authoring
`process|campaign introspect --unwired mra_bare.json` enumerates every
required slot (campaign names the closed tap vocabulary inline:
`persist_taps (equity | exposure | r_equity | net_r_equity)`);
`--vocabulary`/`--block`/`--metrics` (tags `rankable|gate|generalize|
annotation`) suffice to author both docs. The 0108-F8 R-expectancy tagging is
correct. → carry-on.
### F3 [working] Three tiers, legible degradation
Inside a project: intrinsic + referential + `valid (executable): pipeline
shape and static guards pass`. Outside: intrinsic only + `referential checks
skipped (no Aura.toml found up from /tmp)` (exit 0). → carry-on.
### F4 [working] C1 reproducibility + content-id stability
Two runs byte-identical after normalizing only the campaign-run counter
(`42edebd2-<N>`) and the family-store per-name run index (`…-s0-<K>`, both
mint-fresh per ledger); the R-metric/bootstrap number stream hashes
identically (`cd9ad25…`). Op-script re-hashes to `597d71…`. → carry-on.
### F5 [working] Auditable / navigable / chartable realization
`campaign runs``run 0 — 2 cell(s), std::sweep -> std::gate ->
std::walk_forward -> std::monte_carlo`; `campaign runs <id>` dumps the BARE
store line, byte-identical to `campaign_runs.jsonl` (not the
`{"campaign_run":…}` wrapper). `trace_name:"42edebd2-0"` → on-disk
`runs/traces/42edebd2-0/597d719b-{GER40,FRA40}-w0/{equity,r_equity}.json`
(exactly the ledger layout); `aura chart 42edebd2-0/597d719b-GER40-w0`
renders a self-contained page. → carry-on.
### F6 [working] Refuse-don't-guess + no-compile diffability
Bogus process ref → `process 0000… not found in the project store`
(referential, exit 1). Unknown tap → `presentation.persist_taps[1]: unknown
tap "pnl" (taps: equity | exposure | r_equity | net_r_equity)` (exit 1).
Process doc validated as campaign → `the "kind" key must be "campaign"` (the
#193 exact-key prose, exit 1). One-value axis edit (`slow.length` 16→32) →
new content id `ce0de8…`, still `valid (executable)`, no compile/run.
→ carry-on.
### F7 [doc-gap] The documented Aura.toml data-archive root is not honored (as documented)
Glossary (`Aura.toml`: "paths only: the data archive root and the runs dir")
+ `docs/project-layout.md` claim the archive root is an `Aura.toml` path, but
neither names the KEY — and a guessed `[paths] archive = …` has no effect
(every real-data path then resolves the built-in default). The real key is
`[paths] data` (honored end-to-end incl. the campaign path). A consumer whose
archive lives elsewhere cannot configure it from the public surface without
the key name. → tighten docs (RESOLVED same-session: project-layout +
glossary now name `[paths] data`, and the `aura new` Aura.toml template
advertises the commented-out key).
### F8 [doc-gap] Role-6a op-script grammar not CLI-discoverable
`graph introspect` surfaces node vocabulary (`--vocabulary`) + ports
(`--node`) but NOT the op-list verbs (`source/add/feed/connect/expose`) or
their JSON shape; `graph build --help` and `project-layout.md` omit them too.
Authored the op-script only via the fieldtest-corpus shape hint. Orthogonal
to this milestone (role 6a shipped cycle 0088); does not block roles 5/6b
(strategy content ids arrive via C25's id interface), but breaks "author from
introspection alone" for the upstream input. → document the op grammar
(filed; docwriter territory with the #197 docs half).
Counts: working 6 (F1F6), doc-gap 2 (F7 resolved same-session, F8 filed),
friction 0, spec_gap 0, bugs 0.
@@ -0,0 +1 @@
{"format_version":1,"blueprint":{"name":"graph","nodes":[{"primitive":{"type":"SMA","name":"fast"}},{"primitive":{"type":"SMA","name":"slow"}},{"primitive":{"type":"Sub","name":"sub"}},{"primitive":{"type":"Bias","name":"bias"}}],"edges":[{"from":0,"to":2,"slot":0,"from_field":0},{"from":1,"to":2,"slot":1,"from_field":0},{"from":2,"to":3,"slot":0,"from_field":0}],"input_roles":[{"name":"price","targets":[{"node":0,"slot":0},{"node":1,"slot":0}],"source":"F64"}],"output":[{"node":3,"field":0,"name":"bias"}]}}
@@ -0,0 +1,12 @@
[
{"op": "source", "role": "price", "kind": "F64"},
{"op": "add", "type": "SMA", "name": "fast"},
{"op": "add", "type": "SMA", "name": "slow"},
{"op": "feed", "role": "price", "into": ["fast.series", "slow.series"]},
{"op": "add", "type": "Sub", "name": "sub"},
{"op": "connect", "from": "fast.value", "to": "sub.lhs"},
{"op": "connect", "from": "slow.value", "to": "sub.rhs"},
{"op": "add", "type": "Bias", "name": "bias"},
{"op": "connect", "from": "sub.value", "to": "bias.signal"},
{"op": "expose", "from": "bias.bias", "as": "bias"}
]
@@ -0,0 +1,13 @@
{
"format_version": 1,
"kind": "process",
"name": "mra-full-v2-sweep-gate-wf-mc-generalize",
"description": "Full v2 anti-false-discovery pipeline: deflated SQN sweep, positive-expectancy gate, rolling walk-forward, moving-block R-bootstrap of the pooled OOS series, then cross-instrument worst-case generalization.",
"pipeline": [
{ "block": "std::sweep", "metric": "sqn", "select": "argmax", "deflate": true },
{ "block": "std::gate", "all": [ { "metric": "expectancy_r", "cmp": "gt", "value": 0.0 } ] },
{ "block": "std::walk_forward", "in_sample_ms": 1209600000, "out_of_sample_ms": 604800000, "step_ms": 604800000, "mode": "rolling", "metric": "sqn", "select": "argmax" },
{ "block": "std::monte_carlo", "resamples": 1000, "block_len": 5 },
{ "block": "std::generalize", "metric": "expectancy_r" }
]
}
@@ -0,0 +1,22 @@
{
"format_version": 1,
"kind": "campaign",
"name": "mra-ger40-fra40-smacross-full-v2",
"seed": 42,
"data": {
"instruments": ["GER40", "FRA40"],
"windows": [ { "from_ms": 1725148800000, "to_ms": 1727740800000 } ]
},
"strategies": [
{
"ref": { "content_id": "597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a" },
"axes": {
"fast.length": { "kind": "I64", "values": [2, 4] },
"slow.length": { "kind": "I64", "values": [8, 16] },
"bias.scale": { "kind": "F64", "values": [0.5] }
}
}
],
"process": { "ref": { "content_id": "cd91270ca61ad42f56939231a7803a1d6d7aaa2b70bf79cde9da9284683b86b9" } },
"presentation": { "persist_taps": ["equity", "r_equity"], "emit": ["family_table", "selection_report"] }
}
@@ -0,0 +1 @@
{}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,22 @@
{
"format_version": 1,
"kind": "campaign",
"name": "mra-ger40-fra40-smacross-full-v2",
"seed": 42,
"data": {
"instruments": ["GER40", "FRA40"],
"windows": [ { "from_ms": 1725148800000, "to_ms": 1727740800000 } ]
},
"strategies": [
{
"ref": { "content_id": "597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a" },
"axes": {
"fast.length": { "kind": "I64", "values": [2, 4] },
"slow.length": { "kind": "I64", "values": [8, 32] },
"bias.scale": { "kind": "F64", "values": [0.5] }
}
}
],
"process": { "ref": { "content_id": "cd91270ca61ad42f56939231a7803a1d6d7aaa2b70bf79cde9da9284683b86b9" } },
"presentation": { "persist_taps": ["equity", "r_equity"], "emit": ["family_table", "selection_report"] }
}
@@ -0,0 +1,22 @@
{
"format_version": 1,
"kind": "campaign",
"name": "mra-ger40-fra40-smacross-full-v2",
"seed": 42,
"data": {
"instruments": ["GER40", "FRA40"],
"windows": [ { "from_ms": 1725148800000, "to_ms": 1727740800000 } ]
},
"strategies": [
{
"ref": { "content_id": "597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a" },
"axes": {
"fast.length": { "kind": "I64", "values": [2, 4] },
"slow.length": { "kind": "I64", "values": [8, 16] },
"bias.scale": { "kind": "F64", "values": [0.5] }
}
}
],
"process": { "ref": { "content_id": "0000000000000000000000000000000000000000000000000000000000000000" } },
"presentation": { "persist_taps": ["equity", "r_equity"], "emit": ["family_table", "selection_report"] }
}
@@ -0,0 +1,22 @@
{
"format_version": 1,
"kind": "campaign",
"name": "mra-ger40-fra40-smacross-full-v2",
"seed": 42,
"data": {
"instruments": ["GER40", "FRA40"],
"windows": [ { "from_ms": 1725148800000, "to_ms": 1727740800000 } ]
},
"strategies": [
{
"ref": { "content_id": "597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a" },
"axes": {
"fast.length": { "kind": "I64", "values": [2, 4] },
"slow.length": { "kind": "I64", "values": [8, 16] },
"bias.scale": { "kind": "F64", "values": [0.5] }
}
}
],
"process": { "ref": { "content_id": "cd91270ca61ad42f56939231a7803a1d6d7aaa2b70bf79cde9da9284683b86b9" } },
"presentation": { "persist_taps": ["equity", "pnl"], "emit": ["family_table", "selection_report"] }
}
@@ -0,0 +1,2 @@
{"campaign":"42edebd2159de708009ba21e1ed4aea2cffabc373bf761c5765f79c190b677bd","process":"cd91270ca61ad42f56939231a7803a1d6d7aaa2b70bf79cde9da9284683b86b9","run":0,"seed":42,"cells":[{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"GER40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-GER40-w0-s0-0","selection":{"winner_ordinal":0,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":2}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":1.0540214890316064,"mode":"Argmax","deflated_score":-1.0290009962190139,"overfit_probability":0.3876123876123876,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-GER40-w0-s2-0"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.02572811864069487,"p5":-0.045358717986233116,"p25":-0.003867370198210889,"p50":0.025041122400765753,"p75":0.054149001087649175,"p95":0.09609753891677572},"prob_le_zero":0.274,"n_trades":1843,"block_len":5,"n_resamples":1000}}}]},{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"FRA40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-FRA40-w0-s0-0","selection":{"winner_ordinal":2,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":4}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":2.1027529408673753,"mode":"Argmax","deflated_score":-0.25026485410828503,"overfit_probability":0.08491508491508491,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-FRA40-w0-s2-0"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.013305753279586063,"p5":-0.09686234697635485,"p25":-0.02935938855824511,"p50":0.014375417056209604,"p75":0.0572151928623397,"p95":0.11740134416304716},"prob_le_zero":0.412,"n_trades":1272,"block_len":5,"n_resamples":1000}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":0.04367535583327283,"sign_agreement":2,"per_instrument":[["GER40",0.04367535583327283],["FRA40",0.048403786424396446]]},"winners":[["GER40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]],["FRA40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]]]}],"trace_name":"42edebd2-0"}
{"campaign":"42edebd2159de708009ba21e1ed4aea2cffabc373bf761c5765f79c190b677bd","process":"cd91270ca61ad42f56939231a7803a1d6d7aaa2b70bf79cde9da9284683b86b9","run":1,"seed":42,"cells":[{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"GER40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-GER40-w0-s0-1","selection":{"winner_ordinal":0,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":2}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":1.0540214890316064,"mode":"Argmax","deflated_score":-1.0290009962190139,"overfit_probability":0.3876123876123876,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-GER40-w0-s2-1"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.02572811864069487,"p5":-0.045358717986233116,"p25":-0.003867370198210889,"p50":0.025041122400765753,"p75":0.054149001087649175,"p95":0.09609753891677572},"prob_le_zero":0.274,"n_trades":1843,"block_len":5,"n_resamples":1000}}}]},{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"FRA40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-FRA40-w0-s0-1","selection":{"winner_ordinal":2,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":4}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":2.1027529408673753,"mode":"Argmax","deflated_score":-0.25026485410828503,"overfit_probability":0.08491508491508491,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-FRA40-w0-s2-1"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.013305753279586063,"p5":-0.09686234697635485,"p25":-0.02935938855824511,"p50":0.014375417056209604,"p75":0.0572151928623397,"p95":0.11740134416304716},"prob_le_zero":0.412,"n_trades":1272,"block_len":5,"n_resamples":1000}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":0.04367535583327283,"sign_agreement":2,"per_instrument":[["GER40",0.04367535583327283],["FRA40",0.048403786424396446]]},"winners":[["GER40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]],["FRA40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]]]}],"trace_name":"42edebd2-1"}
@@ -0,0 +1 @@
aura: traces persisted: 42edebd2-0 (2 tap(s) x 2 cell(s))
@@ -0,0 +1,15 @@
{"family_id":"42edebd2-0-GER40-w0-s0-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":13117250.0000001,"max_drawdown":6156000.00000006,"bias_sign_flips":3977,"r":{"expectancy_r":0.028321444460569407,"n_trades":3903,"win_rate":0.33692031770433,"avg_win_r":1.5089377461851683,"avg_loss_r":-0.7240009808747663,"profit_factor":1.0589943641136834,"max_r_drawdown":78.64539272099334,"n_open_at_end":1,"sqn":1.0540214890316064,"sqn_normalized":0.16871363772287948,"net_expectancy_r":0.028321444460569407,"conviction_terciles_r":[-0.05124882989934285,0.06705254021274346,0.0691606230683076]}}}}
{"family_id":"42edebd2-0-GER40-w0-s0-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":16}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":358625.0000013883,"max_drawdown":6570250.000000078,"bias_sign_flips":2550,"r":{"expectancy_r":0.001942726488289421,"n_trades":2581,"win_rate":0.2909724912824487,"avg_win_r":1.9096186007126963,"avg_loss_r":-0.7809340940267545,"profit_factor":1.0035086026962674,"max_r_drawdown":72.50403168697483,"n_open_at_end":1,"sqn":0.05152717930726507,"sqn_normalized":0.010142438121122548,"net_expectancy_r":0.001942726488289421,"conviction_terciles_r":[0.003799692660105443,-0.03634478563974999,0.0383309605444476]}}}}
{"family_id":"42edebd2-0-GER40-w0-s0-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":7427500.00000102,"max_drawdown":4223625.000000085,"bias_sign_flips":3570,"r":{"expectancy_r":0.025765945651374078,"n_trades":3811,"win_rate":0.358960902650223,"avg_win_r":1.508960221588393,"avg_loss_r":-0.8047742792695608,"profit_factor":1.0499444782267588,"max_r_drawdown":90.38863380823058,"n_open_at_end":1,"sqn":0.8490217221109733,"sqn_normalized":0.1375305967356901,"net_expectancy_r":0.025765945651374078,"conviction_terciles_r":[0.016131381474867954,-0.0014331659738562395,0.06257064137773533]}}}}
{"family_id":"42edebd2-0-GER40-w0-s0-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":16}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":-700187.4999997262,"max_drawdown":9144874.999999981,"bias_sign_flips":1965,"r":{"expectancy_r":-0.021911292659493667,"n_trades":2388,"win_rate":0.3274706867671692,"avg_win_r":1.76727288256566,"avg_loss_r":-0.8931080703843195,"profit_factor":0.9635201732345389,"max_r_drawdown":132.7156533736896,"n_open_at_end":1,"sqn":-0.5448524993019401,"sqn_normalized":-0.11149664160230002,"net_expectancy_r":-0.021911292659493667,"conviction_terciles_r":[-0.0043670430492390765,-0.0543615931213561,-0.007005241807885511]}}}}
{"family_id":"42edebd2-0-GER40-w0-s2-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1726358400000000000,1726963199999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn","n_trials":3,"raw_winner_metric":1.2525827059630634,"mode":"Argmax","deflated_score":-0.9114506657085979,"overfit_probability":0.3086913086913087,"n_resamples":1000,"block_len":5,"seed":42},"instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":-2671375.000000078,"max_drawdown":5680625.000000145,"bias_sign_flips":964,"r":{"expectancy_r":0.005758622144586189,"n_trades":948,"win_rate":0.310126582278481,"avg_win_r":1.655446626472683,"avg_loss_r":-0.7358442421863931,"profit_factor":1.0113439231583259,"max_r_drawdown":77.80119014468967,"n_open_at_end":1,"sqn":0.0892283296665764,"sqn_normalized":0.028980014237749655,"net_expectancy_r":0.005758622144586189,"conviction_terciles_r":[0.03078221446840116,-0.13067653604467921,0.1171701880100367]}}}}
{"family_id":"42edebd2-0-GER40-w0-s2-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1726963200000000000,1727567999999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn","n_trials":3,"raw_winner_metric":1.2953203025774422,"mode":"Argmax","deflated_score":-0.686644047115786,"overfit_probability":0.22977022977022976,"n_resamples":1000,"block_len":5,"seed":42},"instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":1411000.0000000175,"max_drawdown":2021375.0000000114,"bias_sign_flips":852,"r":{"expectancy_r":0.04367535583327283,"n_trades":895,"win_rate":0.36089385474860336,"avg_win_r":1.442019963427087,"avg_loss_r":-0.7459493089443524,"profit_factor":1.0916123750857663,"max_r_drawdown":31.811394008723603,"n_open_at_end":1,"sqn":0.7810963645657824,"sqn_normalized":0.26109171973841766,"net_expectancy_r":0.04367535583327283,"conviction_terciles_r":[0.016139456567046833,0.1004939582171051,0.014490588177598856]}}}}
{"selection_report":{"family_id":"42edebd2-0-GER40-w0-s0-0","stage":0,"block":"std::sweep","winner_ordinal":0,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":2}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":1.0540214890316064,"mode":"Argmax","deflated_score":-1.0290009962190139,"overfit_probability":0.3876123876123876,"n_resamples":1000,"block_len":5,"seed":42}}}
{"family_id":"42edebd2-0-FRA40-w0-s0-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":9011500.000000523,"max_drawdown":2256874.99999992,"bias_sign_flips":2600,"r":{"expectancy_r":0.06848977082170854,"n_trades":2598,"win_rate":0.3672055427251732,"avg_win_r":1.5851269293911563,"avg_loss_r":-0.8116025949174954,"profit_factor":1.1333581676419873,"max_r_drawdown":113.43637240562812,"n_open_at_end":1,"sqn":1.6096239575111717,"sqn_normalized":0.3157947124442909,"net_expectancy_r":0.06848977082170854,"conviction_terciles_r":[0.06254350002600088,0.04400160398370689,0.09892420845541809]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s0-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":16}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":4874024.999999512,"max_drawdown":1828525.0000001895,"bias_sign_flips":1734,"r":{"expectancy_r":0.012633910991027422,"n_trades":1764,"win_rate":0.3163265306122449,"avg_win_r":1.9660034426361068,"avg_loss_r":-0.891163932008935,"profit_factor":1.02073631038418,"max_r_drawdown":127.56571960156333,"n_open_at_end":1,"sqn":0.1805352564960793,"sqn_normalized":0.04298458488001888,"net_expectancy_r":0.012633910991027422,"conviction_terciles_r":[-0.05122435364587141,0.005056510877614854,0.0840695757413386]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s0-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":8785849.999999577,"max_drawdown":2055075.0000003316,"bias_sign_flips":2323,"r":{"expectancy_r":0.09120457579140544,"n_trades":2527,"win_rate":0.3850415512465374,"avg_win_r":1.6346237585154926,"avg_loss_r":-0.8751704980763805,"profit_factor":1.169464285922158,"max_r_drawdown":89.88964388296372,"n_open_at_end":1,"sqn":2.1027529408673753,"sqn_normalized":0.4182978458755474,"net_expectancy_r":0.09120457579140544,"conviction_terciles_r":[0.10541266530037846,0.051347405582177874,0.11682323053590576]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s0-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":16}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":4061324.9999994994,"max_drawdown":1863250.0000001749,"bias_sign_flips":1388,"r":{"expectancy_r":-0.018755910436808243,"n_trades":1665,"win_rate":0.3429429429429429,"avg_win_r":1.8447093825081005,"avg_loss_r":-0.9913689655296274,"profit_factor":0.9712061494135039,"max_r_drawdown":102.1145398453396,"n_open_at_end":1,"sqn":-0.30292209491863514,"sqn_normalized":-0.0742375845131563,"net_expectancy_r":-0.018755910436808243,"conviction_terciles_r":[-0.24161321766097607,-0.03185355967084881,0.21719904602140036]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s2-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1726358400000000000,1726963199999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn","n_trials":3,"raw_winner_metric":2.632639545000805,"mode":"Argmax","deflated_score":0.6416650665274515,"overfit_probability":0.011988011988011988,"n_resamples":1000,"block_len":5,"seed":42},"instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":200650.00000037864,"max_drawdown":1165800.000000123,"bias_sign_flips":650,"r":{"expectancy_r":-0.022520683530951865,"n_trades":656,"win_rate":0.3490853658536585,"avg_win_r":1.4115482009182443,"avg_loss_r":-0.791611490413543,"profit_factor":0.9562935590836824,"max_r_drawdown":57.55698063941928,"n_open_at_end":1,"sqn":-0.30795082586578854,"sqn_normalized":-0.12023459738040812,"net_expectancy_r":-0.022520683530951865,"conviction_terciles_r":[-0.09571003331162321,0.09707913620766383,-0.06926535143310024]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s2-0","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1726963200000000000,1727567999999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn","n_trials":3,"raw_winner_metric":1.9751748199764239,"mode":"Argmax","deflated_score":-0.019423194317684134,"overfit_probability":0.053946053946053944,"n_resamples":1000,"block_len":5,"seed":42},"instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":1124449.999999984,"max_drawdown":2055075.0000003225,"bias_sign_flips":569,"r":{"expectancy_r":0.048403786424396446,"n_trades":616,"win_rate":0.3847402597402597,"avg_win_r":1.5985540013052624,"avg_loss_r":-0.9209513611396272,"profit_factor":1.0854248341104564,"max_r_drawdown":89.88964388296372,"n_open_at_end":1,"sqn":0.46583912259170446,"sqn_normalized":0.1876919312629149,"net_expectancy_r":0.048403786424396446,"conviction_terciles_r":[0.2751004399586205,-0.08090144199044479,-0.04851486478663962]}}}}
{"selection_report":{"family_id":"42edebd2-0-FRA40-w0-s0-0","stage":0,"block":"std::sweep","winner_ordinal":2,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":4}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":2.1027529408673753,"mode":"Argmax","deflated_score":-0.25026485410828503,"overfit_probability":0.08491508491508491,"n_resamples":1000,"block_len":5,"seed":42}}}
{"campaign_run":{"campaign":"42edebd2159de708009ba21e1ed4aea2cffabc373bf761c5765f79c190b677bd","process":"cd91270ca61ad42f56939231a7803a1d6d7aaa2b70bf79cde9da9284683b86b9","run":0,"seed":42,"cells":[{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"GER40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-GER40-w0-s0-0","selection":{"winner_ordinal":0,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":2}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":1.0540214890316064,"mode":"Argmax","deflated_score":-1.0290009962190139,"overfit_probability":0.3876123876123876,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-GER40-w0-s2-0"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.02572811864069487,"p5":-0.045358717986233116,"p25":-0.003867370198210889,"p50":0.025041122400765753,"p75":0.054149001087649175,"p95":0.09609753891677572},"prob_le_zero":0.274,"n_trades":1843,"block_len":5,"n_resamples":1000}}}]},{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"FRA40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-FRA40-w0-s0-0","selection":{"winner_ordinal":2,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":4}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":2.1027529408673753,"mode":"Argmax","deflated_score":-0.25026485410828503,"overfit_probability":0.08491508491508491,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-FRA40-w0-s2-0"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.013305753279586063,"p5":-0.09686234697635485,"p25":-0.02935938855824511,"p50":0.014375417056209604,"p75":0.0572151928623397,"p95":0.11740134416304716},"prob_le_zero":0.412,"n_trades":1272,"block_len":5,"n_resamples":1000}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":0.04367535583327283,"sign_agreement":2,"per_instrument":[["GER40",0.04367535583327283],["FRA40",0.048403786424396446]]},"winners":[["GER40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]],["FRA40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]]]}],"trace_name":"42edebd2-0"}}
@@ -0,0 +1 @@
aura: traces persisted: 42edebd2-1 (2 tap(s) x 2 cell(s))
@@ -0,0 +1,15 @@
{"family_id":"42edebd2-0-GER40-w0-s0-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":13117250.0000001,"max_drawdown":6156000.00000006,"bias_sign_flips":3977,"r":{"expectancy_r":0.028321444460569407,"n_trades":3903,"win_rate":0.33692031770433,"avg_win_r":1.5089377461851683,"avg_loss_r":-0.7240009808747663,"profit_factor":1.0589943641136834,"max_r_drawdown":78.64539272099334,"n_open_at_end":1,"sqn":1.0540214890316064,"sqn_normalized":0.16871363772287948,"net_expectancy_r":0.028321444460569407,"conviction_terciles_r":[-0.05124882989934285,0.06705254021274346,0.0691606230683076]}}}}
{"family_id":"42edebd2-0-GER40-w0-s0-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":16}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":358625.0000013883,"max_drawdown":6570250.000000078,"bias_sign_flips":2550,"r":{"expectancy_r":0.001942726488289421,"n_trades":2581,"win_rate":0.2909724912824487,"avg_win_r":1.9096186007126963,"avg_loss_r":-0.7809340940267545,"profit_factor":1.0035086026962674,"max_r_drawdown":72.50403168697483,"n_open_at_end":1,"sqn":0.05152717930726507,"sqn_normalized":0.010142438121122548,"net_expectancy_r":0.001942726488289421,"conviction_terciles_r":[0.003799692660105443,-0.03634478563974999,0.0383309605444476]}}}}
{"family_id":"42edebd2-0-GER40-w0-s0-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":7427500.00000102,"max_drawdown":4223625.000000085,"bias_sign_flips":3570,"r":{"expectancy_r":0.025765945651374078,"n_trades":3811,"win_rate":0.358960902650223,"avg_win_r":1.508960221588393,"avg_loss_r":-0.8047742792695608,"profit_factor":1.0499444782267588,"max_r_drawdown":90.38863380823058,"n_open_at_end":1,"sqn":0.8490217221109733,"sqn_normalized":0.1375305967356901,"net_expectancy_r":0.025765945651374078,"conviction_terciles_r":[0.016131381474867954,-0.0014331659738562395,0.06257064137773533]}}}}
{"family_id":"42edebd2-0-GER40-w0-s0-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":16}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":-700187.4999997262,"max_drawdown":9144874.999999981,"bias_sign_flips":1965,"r":{"expectancy_r":-0.021911292659493667,"n_trades":2388,"win_rate":0.3274706867671692,"avg_win_r":1.76727288256566,"avg_loss_r":-0.8931080703843195,"profit_factor":0.9635201732345389,"max_r_drawdown":132.7156533736896,"n_open_at_end":1,"sqn":-0.5448524993019401,"sqn_normalized":-0.11149664160230002,"net_expectancy_r":-0.021911292659493667,"conviction_terciles_r":[-0.0043670430492390765,-0.0543615931213561,-0.007005241807885511]}}}}
{"family_id":"42edebd2-0-GER40-w0-s2-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1726358400000000000,1726963199999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn","n_trials":3,"raw_winner_metric":1.2525827059630634,"mode":"Argmax","deflated_score":-0.9114506657085979,"overfit_probability":0.3086913086913087,"n_resamples":1000,"block_len":5,"seed":42},"instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":-2671375.000000078,"max_drawdown":5680625.000000145,"bias_sign_flips":964,"r":{"expectancy_r":0.005758622144586189,"n_trades":948,"win_rate":0.310126582278481,"avg_win_r":1.655446626472683,"avg_loss_r":-0.7358442421863931,"profit_factor":1.0113439231583259,"max_r_drawdown":77.80119014468967,"n_open_at_end":1,"sqn":0.0892283296665764,"sqn_normalized":0.028980014237749655,"net_expectancy_r":0.005758622144586189,"conviction_terciles_r":[0.03078221446840116,-0.13067653604467921,0.1171701880100367]}}}}
{"family_id":"42edebd2-0-GER40-w0-s2-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1726963200000000000,1727567999999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn","n_trials":3,"raw_winner_metric":1.2953203025774422,"mode":"Argmax","deflated_score":-0.686644047115786,"overfit_probability":0.22977022977022976,"n_resamples":1000,"block_len":5,"seed":42},"instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":1411000.0000000175,"max_drawdown":2021375.0000000114,"bias_sign_flips":852,"r":{"expectancy_r":0.04367535583327283,"n_trades":895,"win_rate":0.36089385474860336,"avg_win_r":1.442019963427087,"avg_loss_r":-0.7459493089443524,"profit_factor":1.0916123750857663,"max_r_drawdown":31.811394008723603,"n_open_at_end":1,"sqn":0.7810963645657824,"sqn_normalized":0.26109171973841766,"net_expectancy_r":0.04367535583327283,"conviction_terciles_r":[0.016139456567046833,0.1004939582171051,0.014490588177598856]}}}}
{"selection_report":{"family_id":"42edebd2-0-GER40-w0-s0-1","stage":0,"block":"std::sweep","winner_ordinal":0,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":2}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":1.0540214890316064,"mode":"Argmax","deflated_score":-1.0290009962190139,"overfit_probability":0.3876123876123876,"n_resamples":1000,"block_len":5,"seed":42}}}
{"family_id":"42edebd2-0-FRA40-w0-s0-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":9011500.000000523,"max_drawdown":2256874.99999992,"bias_sign_flips":2600,"r":{"expectancy_r":0.06848977082170854,"n_trades":2598,"win_rate":0.3672055427251732,"avg_win_r":1.5851269293911563,"avg_loss_r":-0.8116025949174954,"profit_factor":1.1333581676419873,"max_r_drawdown":113.43637240562812,"n_open_at_end":1,"sqn":1.6096239575111717,"sqn_normalized":0.3157947124442909,"net_expectancy_r":0.06848977082170854,"conviction_terciles_r":[0.06254350002600088,0.04400160398370689,0.09892420845541809]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s0-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":16}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":4874024.999999512,"max_drawdown":1828525.0000001895,"bias_sign_flips":1734,"r":{"expectancy_r":0.012633910991027422,"n_trades":1764,"win_rate":0.3163265306122449,"avg_win_r":1.9660034426361068,"avg_loss_r":-0.891163932008935,"profit_factor":1.02073631038418,"max_r_drawdown":127.56571960156333,"n_open_at_end":1,"sqn":0.1805352564960793,"sqn_normalized":0.04298458488001888,"net_expectancy_r":0.012633910991027422,"conviction_terciles_r":[-0.05122435364587141,0.005056510877614854,0.0840695757413386]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s0-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":8785849.999999577,"max_drawdown":2055075.0000003316,"bias_sign_flips":2323,"r":{"expectancy_r":0.09120457579140544,"n_trades":2527,"win_rate":0.3850415512465374,"avg_win_r":1.6346237585154926,"avg_loss_r":-0.8751704980763805,"profit_factor":1.169464285922158,"max_r_drawdown":89.88964388296372,"n_open_at_end":1,"sqn":2.1027529408673753,"sqn_normalized":0.4182978458755474,"net_expectancy_r":0.09120457579140544,"conviction_terciles_r":[0.10541266530037846,0.051347405582177874,0.11682323053590576]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s0-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":16}],["graph.bias.scale",{"F64":0.5}]],"window":[1725148800000000000,1727740800000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":4061324.9999994994,"max_drawdown":1863250.0000001749,"bias_sign_flips":1388,"r":{"expectancy_r":-0.018755910436808243,"n_trades":1665,"win_rate":0.3429429429429429,"avg_win_r":1.8447093825081005,"avg_loss_r":-0.9913689655296274,"profit_factor":0.9712061494135039,"max_r_drawdown":102.1145398453396,"n_open_at_end":1,"sqn":-0.30292209491863514,"sqn_normalized":-0.0742375845131563,"net_expectancy_r":-0.018755910436808243,"conviction_terciles_r":[-0.24161321766097607,-0.03185355967084881,0.21719904602140036]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s2-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":2}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1726358400000000000,1726963199999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn","n_trials":3,"raw_winner_metric":2.632639545000805,"mode":"Argmax","deflated_score":0.6416650665274515,"overfit_probability":0.011988011988011988,"n_resamples":1000,"block_len":5,"seed":42},"instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":200650.00000037864,"max_drawdown":1165800.000000123,"bias_sign_flips":650,"r":{"expectancy_r":-0.022520683530951865,"n_trades":656,"win_rate":0.3490853658536585,"avg_win_r":1.4115482009182443,"avg_loss_r":-0.791611490413543,"profit_factor":0.9562935590836824,"max_r_drawdown":57.55698063941928,"n_open_at_end":1,"sqn":-0.30795082586578854,"sqn_normalized":-0.12023459738040812,"net_expectancy_r":-0.022520683530951865,"conviction_terciles_r":[-0.09571003331162321,0.09707913620766383,-0.06926535143310024]}}}}
{"family_id":"42edebd2-0-FRA40-w0-s2-1","report":{"manifest":{"commit":"01925e061938d74a28d3727617fb6e62c1a9c50e","params":[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]],"window":[1726963200000000000,1727567999999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn","n_trials":3,"raw_winner_metric":1.9751748199764239,"mode":"Argmax","deflated_score":-0.019423194317684134,"overfit_probability":0.053946053946053944,"n_resamples":1000,"block_len":5,"seed":42},"instrument":"FRA40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","project":{"namespace":"mrp_lab","dylib_sha256":"72b1f661bcca3a00553c38f420f5c1508fec630fdaa3183462a1a986fd399d70","commit":"01925e061938d74a28d3727617fb6e62c1a9c50e-dirty"}},"metrics":{"total_pips":1124449.999999984,"max_drawdown":2055075.0000003225,"bias_sign_flips":569,"r":{"expectancy_r":0.048403786424396446,"n_trades":616,"win_rate":0.3847402597402597,"avg_win_r":1.5985540013052624,"avg_loss_r":-0.9209513611396272,"profit_factor":1.0854248341104564,"max_r_drawdown":89.88964388296372,"n_open_at_end":1,"sqn":0.46583912259170446,"sqn_normalized":0.1876919312629149,"net_expectancy_r":0.048403786424396446,"conviction_terciles_r":[0.2751004399586205,-0.08090144199044479,-0.04851486478663962]}}}}
{"selection_report":{"family_id":"42edebd2-0-FRA40-w0-s0-1","stage":0,"block":"std::sweep","winner_ordinal":2,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":4}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":2.1027529408673753,"mode":"Argmax","deflated_score":-0.25026485410828503,"overfit_probability":0.08491508491508491,"n_resamples":1000,"block_len":5,"seed":42}}}
{"campaign_run":{"campaign":"42edebd2159de708009ba21e1ed4aea2cffabc373bf761c5765f79c190b677bd","process":"cd91270ca61ad42f56939231a7803a1d6d7aaa2b70bf79cde9da9284683b86b9","run":1,"seed":42,"cells":[{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"GER40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-GER40-w0-s0-1","selection":{"winner_ordinal":0,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":2}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":1.0540214890316064,"mode":"Argmax","deflated_score":-1.0290009962190139,"overfit_probability":0.3876123876123876,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-GER40-w0-s2-1"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.02572811864069487,"p5":-0.045358717986233116,"p25":-0.003867370198210889,"p50":0.025041122400765753,"p75":0.054149001087649175,"p95":0.09609753891677572},"prob_le_zero":0.274,"n_trades":1843,"block_len":5,"n_resamples":1000}}}]},{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"FRA40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-FRA40-w0-s0-1","selection":{"winner_ordinal":2,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":4}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":2.1027529408673753,"mode":"Argmax","deflated_score":-0.25026485410828503,"overfit_probability":0.08491508491508491,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-FRA40-w0-s2-1"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.013305753279586063,"p5":-0.09686234697635485,"p25":-0.02935938855824511,"p50":0.014375417056209604,"p75":0.0572151928623397,"p95":0.11740134416304716},"prob_le_zero":0.412,"n_trades":1272,"block_len":5,"n_resamples":1000}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":0.04367535583327283,"sign_agreement":2,"per_instrument":[["GER40",0.04367535583327283],["FRA40",0.048403786424396446]]},"winners":[["GER40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]],["FRA40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]]]}],"trace_name":"42edebd2-1"}}
@@ -0,0 +1 @@
{"campaign":"42edebd2159de708009ba21e1ed4aea2cffabc373bf761c5765f79c190b677bd","process":"cd91270ca61ad42f56939231a7803a1d6d7aaa2b70bf79cde9da9284683b86b9","run":0,"seed":42,"cells":[{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"GER40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-GER40-w0-s0-0","selection":{"winner_ordinal":0,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":2}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":1.0540214890316064,"mode":"Argmax","deflated_score":-1.0290009962190139,"overfit_probability":0.3876123876123876,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-GER40-w0-s2-0"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.02572811864069487,"p5":-0.045358717986233116,"p25":-0.003867370198210889,"p50":0.025041122400765753,"p75":0.054149001087649175,"p95":0.09609753891677572},"prob_le_zero":0.274,"n_trades":1843,"block_len":5,"n_resamples":1000}}}]},{"strategy":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a","instrument":"FRA40","window_ms":[1725148800000,1727740800000],"stages":[{"block":"std::sweep","family_id":"42edebd2-0-FRA40-w0-s0-0","selection":{"winner_ordinal":2,"params":[["bias.scale",{"F64":0.5}],["fast.length",{"I64":4}],["slow.length",{"I64":8}]],"selection":{"selection_metric":"sqn","n_trials":4,"raw_winner_metric":2.1027529408673753,"mode":"Argmax","deflated_score":-0.25026485410828503,"overfit_probability":0.08491508491508491,"n_resamples":1000,"block_len":5,"seed":42}}},{"block":"std::gate","survivor_ordinals":[0,1,2]},{"block":"std::walk_forward","family_id":"42edebd2-0-FRA40-w0-s2-0"},{"block":"std::monte_carlo","bootstrap":{"pooled_oos":{"e_r":{"mean":0.013305753279586063,"p5":-0.09686234697635485,"p25":-0.02935938855824511,"p50":0.014375417056209604,"p75":0.0572151928623397,"p95":0.11740134416304716},"prob_le_zero":0.412,"n_trades":1272,"block_len":5,"n_resamples":1000}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":0.04367535583327283,"sign_agreement":2,"per_instrument":[["GER40",0.04367535583327283],["FRA40",0.048403786424396446]]},"winners":[["GER40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]],["FRA40",[["graph.fast.length",{"I64":4}],["graph.slow.length",{"I64":8}],["graph.bias.scale",{"F64":0.5}]]]]}],"trace_name":"42edebd2-0"}
@@ -0,0 +1,3 @@
/target
Cargo.lock
/runs
@@ -0,0 +1,3 @@
# Static project context only (C17); paths only.
[paths]
runs = "runs"
@@ -0,0 +1,10 @@
# mrp_lab — an aura research project
This crate is an aura project: a cdylib of node/strategy blueprints the
`aura` host loads during research (see the engine's docs/project-layout.md).
- Build: `cargo build` (the next `aura` invocation loads the fresh dylib)
- Run: `aura run blueprints/signal.json` (from anywhere inside this dir)
- Nodes live in `src/`; each is registered in `vocabulary()`/`type_ids()`
under the `mrp_lab::` namespace prefix.
- Topology is data (`blueprints/*.json`), node logic is Rust.
@@ -0,0 +1,14 @@
[package]
name = "mrp_lab"
version = "0.1.0"
edition = "2024"
publish = false
[lib]
crate-type = ["cdylib"]
[dependencies]
aura-core = { path = "/home/brummel/dev/aura/crates/aura-core" }
# Standalone workspace root: never a member of an enclosing workspace.
[workspace]
@@ -0,0 +1 @@
{"format_version":1,"blueprint":{"name":"mrp_lab_signal","nodes":[{"primitive":{"type":"SMA","name":"fast","bound":[{"pos":0,"name":"length","kind":"I64","value":{"I64":2}}]}},{"primitive":{"type":"SMA","name":"slow","bound":[{"pos":0,"name":"length","kind":"I64","value":{"I64":4}}]}},{"primitive":{"type":"Sub"}},{"primitive":{"type":"Bias","name":"bias","bound":[{"pos":0,"name":"scale","kind":"F64","value":{"F64":0.5}}]}},{"primitive":{"type":"mrp_lab::Identity"}}],"edges":[{"from":0,"to":2,"slot":0,"from_field":0},{"from":1,"to":2,"slot":1,"from_field":0},{"from":2,"to":3,"slot":0,"from_field":0},{"from":3,"to":4,"slot":0,"from_field":0}],"input_roles":[{"name":"price","targets":[{"node":0,"slot":0},{"node":1,"slot":0}],"source":"F64"}],"output":[{"node":4,"field":0,"name":"bias"}]}}
@@ -0,0 +1,76 @@
//! mrp_lab — an aura research project: node logic + the exported vocabulary.
//!
//! Every node type this crate provides is registered in `vocabulary()` /
//! `type_ids()` under the `mrp_lab::` namespace prefix; the `aura` host loads
//! this cdylib per invocation and merges it with the std vocabulary.
use aura_core::{
Cell, Ctx, FieldSpec, Firing, Node, NodeSchema, PortSpec, PrimitiveBuilder,
ScalarKind,
};
/// One-input f64 pass-through. Emits `None` until its input has a value.
pub struct Identity {
out: [Cell; 1],
}
impl Identity {
pub fn new() -> Self {
Self { out: [Cell::from_f64(0.0)] }
}
pub fn builder() -> PrimitiveBuilder {
PrimitiveBuilder::new(
"mrp_lab::Identity",
NodeSchema {
inputs: vec![PortSpec {
kind: ScalarKind::F64,
firing: Firing::Any,
name: "value".into(),
}],
output: vec![FieldSpec { name: "value".into(), kind: ScalarKind::F64 }],
params: vec![],
},
|_| Box::new(Identity::new()),
)
}
}
impl Default for Identity {
fn default() -> Self {
Self::new()
}
}
impl Node for Identity {
fn lookbacks(&self) -> Vec<usize> {
vec![1]
}
fn eval(&mut self, ctx: Ctx<'_>) -> Option<&[Cell]> {
let w = ctx.f64_in(0);
if w.is_empty() {
return None;
}
self.out[0] = Cell::from_f64(w[0]);
Some(&self.out)
}
fn label(&self) -> String {
"mrp_lab::Identity".to_string()
}
}
fn vocabulary(type_id: &str) -> Option<PrimitiveBuilder> {
match type_id {
"mrp_lab::Identity" => Some(Identity::builder()),
_ => None,
}
}
fn type_ids() -> &'static [&'static str] {
&["mrp_lab::Identity"]
}
aura_core::aura_project! {
namespace: "mrp_lab",
vocabulary: vocabulary,
type_ids: type_ids,
}