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:
@@ -0,0 +1,96 @@
|
||||
# Milestone fieldtest — Research artifacts — process & campaign documents (cycles 0106–0109) — 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 (F1–F6), 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,
|
||||
}
|
||||
Reference in New Issue
Block a user