Details
Election Momentum
Quote tight on 2026 US Senate · momentum signal from headline scanner · max-loss bounded by drawdown guard
Why this page is new
Today there is no Strategy detail page — only a list and a create form. The mock adds the page developers need: the bot pipeline visualised, per-bot parameters in one place, linked instruments, the reason-code allowlist the strategy can produce, and the promotion state. Everything the operator needs to understand and audit one strategy.Target portfolio
score_type
confidence
State
demo-wired
Signal mode
Auto execute
Bots wired
7
Instruments
2
Decisions today
84
Strategy contract
Every running strategy declares its target portfolio, its score output, and its risk-layer split. Set at launch — changes require a stop-and-restart.
Target portfolio required
Positions, signals and audit receipts produced by this strategy belong to the selected portfolio. Portfolio-layer guardrails apply on top of strategy-layer entry filters.
Score output
| strategy_score | 0.00–1.00 |
| score_type | confidence (Momentum family) |
| threshold for emit | ≥ 0.62 |
Replaces the legacy "Fair Value" column. Generic strategy_score with a per-strategy score_type tag. See the glossary.
Market scope — which markets this strategy evaluates
M2 ships two modes. Cluster binding is the default; manual list is the fallback for one-off arb or single-market tests. Filter-expression DSL is deferred to M3. Backtest applies the same scope rule retrospectively. See M2 scope › Market scope.
Bound clusters
Markets currently in scope: 14 · updated as cluster membership evolves. Each entry/exit emits STRAT_MARKET_IN_SCOPE / STRAT_MARKET_OUT_OF_SCOPE.
In-scope preview (first 10 of 14)
| Market | Cluster | Liq. |
|---|---|---|
| 2026 US Senate control | us_election_2026 | $94k |
| 2026 US House control | us_election_2026 | $71k |
| NY-22 winner | us_election_2026 | $22k |
| PA-Sen winner | us_election_2026 | $58k |
| Fed June 2026 decision | fed_decisions | $112k |
| Fed July 2026 decision | fed_decisions | $88k |
| Fed Sep 2026 decision | fed_decisions | $66k |
| 2026 Q3 PCE > 2.5% | fed_decisions | $41k |
| OH-Gov winner | us_election_2026 | $19k |
| WI-Gov winner | us_election_2026 | $17k |
Audit trail: every position this strategy opens records the market-scope mode and the resolved condition ID set at the moment of position open on the audit envelope. Backtest uses the same scope rule — not a convention, a hard requirement.
Bot pipeline
Every intent flows left to right. Each stage's bot reads from the registry, calls decide(), emits one envelope, passes (or rejects) to the next stage.
1. Intel
intel.macro_sentiment2. Discovery
disc.headline_scanner3. Strategy
strat.maker_tight4. Risk
risk.killswitchrisk.stalebookguardrisk.exposureguard5. Execution
exec.smartrouterLinked instruments
Markets this strategy is authorised to trade. Must all be V2-ready and trading.
| Market | Spread | State | |
|---|---|---|---|
| 2026 US Senate control election-2026-us-senate | 18 bps | trading | Open |
| UK snap election 2026 uk-snap-election-2026 | 47 bps | trading | Open |
Strategy parameters
Per-bot config. Defaults come from the spec; overrides are saved on this strategy.
Reason-code allowlist
Only these codes can appear in this strategy's envelopes. Anything else is a bug.
STRAT_MAKER_QUOTE_INSIDE
STRAT_MAKER_NO_EDGE
DISC_HEADLINE_MATCH
DISC_HEADLINE_NOISE
INTEL_MACRO_NEUTRAL
INTEL_MACRO_BEAR
RISK_KILLSWITCH_TRIPPED
RISK_BOOK_STALE_15S
RISK_EXPOSURE_CAP_HIT
RISK_DRAWDOWN_TRIGGERED
EXEC_ROUTE_CTFV2_ACCEPTED
EXEC_SLIPPAGE_EXCEEDED
Fixture pack
Test inputs the strategy is verified against. Promotion to shadow-ready requires all four to pass.
normal.json | 62 intents | pass |
warning.json | 14 intents | pass |
hard.json | 9 intents | pass |
failure.json | 5 intents | pass |
Promotion gates
| All bots in pipeline at demo-wired or higher | pass |
| Fixture pack 4/4 passing | pass |
| Reason-code allowlist enforced | pass |
| 24h shadow soak | pending |
Recent decisions
Last 8 envelopes this strategy produced. Click Trace to walk one through the full pipeline.
| Time | Correlation ID | Instrument | Stage · Bot | Decision | Reason code | |
|---|---|---|---|---|---|---|
| 14:48:21 | 01JG1Z5K7N3RD9XT | election-2026-us-senate | RISK risk.killswitch | REJECT | RISK_KILLSWITCH_TRIPPED | Trace |
| 14:46:02 | 01JG1Z3F2H8WK4PM | election-2026-us-senate | STRAT strat.maker_tight | APPROVE | STRAT_MAKER_QUOTE_INSIDE | Trace |
| 14:40:18 | 01JG1YYR4M2KX8VA | fed-rate-2026-q2 | EXEC exec.smartrouter | FILLED | EXEC_ROUTE_CTFV2_ACCEPTED | Trace |
| 14:38:44 | 01JG1YX1K5J3RH7B | uk-snap-election-2026 | RISK risk.exposureguard | REJECT | RISK_EXPOSURE_CAP_HIT | Trace |
| 14:31:09 | 01JG1YQ8X2K4M6PL | election-2026-us-senate | EXEC exec.smartrouter | FAILED | EXEC_BUILDERCODE_MISSING | Trace |
⚙ Configuration Pass B
Parameter overrides for this strategy. Defaults come from the bot spec. Changes are demo-only and do not persist.
Where this lives in the codebase
Phase 2 work: extendpackages/contracts with a StrategyConfig type that
references instrument IDs (not slugs), per-bot parameter blocks, and the reason-code allowlist.
The runner already loads strategy configs — this just adds the typed shape. The UI then
becomes a read/write view of one StrategyConfig.