feat(research,composites,cli,docs): vol_tf — the timescale-matched stop regime
The second risk-regime variant vol_tf{period_minutes, length, k}
computes the vol estimator over completed time buckets: an H1 signal
gets an H1-matched stop in the research matrix instead of a hand-scaled
minute stop (the issue's k-inflation workaround retires). Additive
externally-tagged serde (stored Vol documents keep their content ids);
the executor arm wires the VolTfStop primitive via the builder+bind
chain; validate checks period_minutes/length/k positivity per regime.
The member-manifest round-trip holds for both variants (C1): vol_tf
members stamp stop_period_minutes/stop_length/stop_k and the reproduce
path re-derives the VolTf stop whenever stop_period_minutes is present
— never a silent default-Vol fallback. The Regimes slot label and the
unit notes name the new variant (period_minutes IS the stop's
timescale); glossary, authoring guide, and design ledger record the
second variant. Default regime and sugar paths byte-untouched.
Coverage: node units (rollover-only emission, bucket-delta math, the
constant-|delta| correspondence with the per-cycle regime), executor
fold, serde/validate units, the manifest round-trip unit, and a
hostless two-regime e2e (distinct ordinals; vol_tf members stamp their
timescale, vol members do not).
closes #262
This commit is contained in:
@@ -468,7 +468,7 @@ open slot: format_version (required, must be 1)
|
||||
open slot: kind (required, must be "campaign")
|
||||
open slot: name (required, string)
|
||||
open slot: data (required section: instruments + windows)
|
||||
open slot: risk (optional, list of stop regimes { vol: { length, k } }; absent = one default regime)
|
||||
open slot: risk (optional, list of stop regimes { vol: { length, k } } | { vol_tf: { period_minutes, length, k } }; absent = one default regime)
|
||||
open slot: cost (optional, list of cost models { constant: { cost_per_trade } } | { vol_slippage: { slip_vol_mult } } | { carry: { carry_per_cycle } }; absent = zero cost, net = gross)
|
||||
open slot: strategies (required, non-empty list of { ref, axes })
|
||||
open slot: process.ref (required, content id of a process document)
|
||||
|
||||
@@ -993,8 +993,9 @@ blueprint-data (#159, cuts 1b-4); `run` is now blueprint-driven — `aura run
|
||||
**Realization (2026-07-06 — the risk regime as a structural campaign axis, #210).**
|
||||
The `StopRule{Fixed,Vol}` structural axis is realized at the campaign-document
|
||||
level as `CampaignDoc.risk: [RiskRegime]` (a serializable, content-addressable
|
||||
mirror of the runtime enum — `aura-research`, sole variant `Vol{length,k}`, the
|
||||
fixed-stop rule additive when needed). It is a **kept-separate** matrix axis, a
|
||||
mirror of the runtime enum — `aura-research`, variants `Vol{length,k}` and
|
||||
`VolTf{period_minutes,length,k}` (#262), the fixed-stop rule additive when
|
||||
needed). It is a **kept-separate** matrix axis, a
|
||||
peer of instruments and windows: the executor keys the nominee map by
|
||||
`(strategy, window, regime)`, so generalize aggregates across instruments
|
||||
*within* a regime, never across regimes. Regimes are therefore **compared** at
|
||||
|
||||
+4
-3
@@ -232,13 +232,14 @@ A node that converts a finer stream to a coarser bar stream, emitting a complete
|
||||
### risk regime
|
||||
**Avoid:** risk section
|
||||
One entry of a campaign document's structural risk axis (`risk`): a
|
||||
serializable protective-stop regime (sole variant `vol{length,k}`) the matrix
|
||||
serializable protective-stop regime (variants `vol{length,k}` — per-cycle —
|
||||
and `vol_tf{period_minutes,length,k}` — per completed time bucket) the matrix
|
||||
runs every cell under, so cells differ by execution discipline, never by
|
||||
signal. Absent or empty = one implicit default regime; the regime's stop
|
||||
defines the risk unit R — in `vol{length,k}` (stop = k·√EMA(Δ², length) over
|
||||
m1 cycles) `length` only smooths the vol estimator while `k` scales the stop
|
||||
distance, so the stop's timescale stays one cycle (#262 tracks a
|
||||
timescale-matched variant).
|
||||
distance, so the stop's timescale stays one cycle (`vol_tf` sets the stop's
|
||||
timescale via `period_minutes`).
|
||||
|
||||
### run
|
||||
**Avoid:** —
|
||||
|
||||
Reference in New Issue
Block a user