Emit an intent/exposure stream as the strategy output (signal quality) #4

Closed
opened 2026-06-04 15:24:51 +02:00 by Brummel · 0 comments
Owner

The substrate (cycles 0001-0006) computes and records streams but produces no
trading result. Cycle 0007 reframes C10 (docs/design/INDEX.md): a strategy's
primary, backtestable output is an INTENT / EXPOSURE stream, not a position-event
table. The DAG expresses exactly one state at time t (C8: <=1 record per eval),
so the strategy emits one signed, bounded exposure f64 in [-1,+1] per cycle. The
position-event table (buy/sell/close, position_id, partial closes) becomes a
decoupled, derived position-management layer (deferred) — see C10.

Delivered jointly with #5 in cycle 0007 (the signal-quality loop): this half is
the exposure node.

Scope

The decision/sizing node of C10's chain signals -> decision/sizing node -> exposure stream. Its single output port (C8) is the exposure: it shapes a raw
signal score into a bounded exposure, clamp(signal / scale, -1.0, +1.0),
emitting one f64 per fired cycle. Position sizing / risk live here (the scale
sets which signal magnitude maps to full exposure). It ships in aura-std beside
Sma / Sub; the engine stays domain-free (it sees only f64 records, never
"exposure").

Anchors

  • C10 (reframed) — intent/exposure stream is the strategy output; the position
    table is a derived, deferred layer.
  • C8 — one output port, one record per eval; the per-cycle DAG state.
  • C7 — f64 scalar on the hot path.

Acceptance

[ ] A node maps a raw signal score to a bounded exposure f64 in [-1,+1].
[ ] One exposure value per fired cycle; None until its input is present.
[ ] A scale parameter sets the saturation magnitude (sizing lives here).
[ ] Deterministic given fixed input (C1).

The substrate (cycles 0001-0006) computes and records streams but produces no trading result. Cycle 0007 reframes C10 (docs/design/INDEX.md): a strategy's primary, backtestable output is an INTENT / EXPOSURE stream, not a position-event table. The DAG expresses exactly one state at time t (C8: <=1 record per eval), so the strategy emits one signed, bounded exposure f64 in [-1,+1] per cycle. The position-event table (buy/sell/close, position_id, partial closes) becomes a decoupled, derived position-management layer (deferred) — see C10. Delivered jointly with #5 in cycle 0007 (the signal-quality loop): this half is the exposure node. ## Scope The decision/sizing node of C10's chain `signals -> decision/sizing node -> exposure stream`. Its single output port (C8) is the exposure: it shapes a raw signal score into a bounded exposure, `clamp(signal / scale, -1.0, +1.0)`, emitting one f64 per fired cycle. Position sizing / risk live here (the `scale` sets which signal magnitude maps to full exposure). It ships in aura-std beside Sma / Sub; the engine stays domain-free (it sees only f64 records, never "exposure"). ## Anchors - C10 (reframed) — intent/exposure stream is the strategy output; the position table is a derived, deferred layer. - C8 — one output port, one record per eval; the per-cycle DAG state. - C7 — f64 scalar on the hot path. ## Acceptance [ ] A node maps a raw signal score to a bounded exposure f64 in [-1,+1]. [ ] One exposure value per fired cycle; None until its input is present. [ ] A `scale` parameter sets the saturation magnitude (sizing lives here). [ ] Deterministic given fixed input (C1).
Brummel added this to the Walking skeleton milestone 2026-06-04 15:24:51 +02:00
Brummel added the feature label 2026-06-04 15:24:51 +02:00
Brummel changed title from Emit a broker-independent position-event table as a strategy output to Emit an intent/exposure stream as the strategy output (signal quality) 2026-06-04 16:51:11 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Brummel/Aura#4