2026-06-13 20:29:53 +02:00
|
|
|
|
-- VIOLET V3e: shadow decision journal. One row per ACTUATED ShadowDecision the
|
|
|
|
|
|
-- VioletDecisionEngine emits (the muted "what BLUE would do this scan"). NEVER an
|
|
|
|
|
|
-- order — execution stays off behind the ObserveOnlyVenue guard. session_id is a
|
|
|
|
|
|
-- boot-time UUID (mono_ns is meaningless across restarts without it).
|
|
|
|
|
|
-- Apply via apply_violet_ddl.py (one statement per HTTP POST).
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS dolphin_violet.violet_decisions
|
|
|
|
|
|
(
|
|
|
|
|
|
`ts` DateTime64(3, 'UTC'),
|
|
|
|
|
|
`session_id` String,
|
|
|
|
|
|
`scan_number` UInt64,
|
|
|
|
|
|
`mono_ns` UInt64,
|
|
|
|
|
|
`asset` LowCardinality(String),
|
|
|
|
|
|
`side` LowCardinality(String),
|
|
|
|
|
|
`vel_div` Float64,
|
|
|
|
|
|
`fraction` Float64,
|
|
|
|
|
|
`conviction_leverage` Float64,
|
|
|
|
|
|
`notional_fraction` Float64,
|
|
|
|
|
|
`target_exposure` Float64,
|
|
|
|
|
|
`ars_score` Float64,
|
|
|
|
|
|
`bucket_idx` UInt8,
|
2026-06-16 13:04:30 +02:00
|
|
|
|
`actuated` UInt8,
|
|
|
|
|
|
-- V3.4 full-sizing breakdown: conviction = base × dc × regime(ACB) × ob × esof,
|
|
|
|
|
|
-- capped @9. NULL on the legacy base-only path (no live SizingFactors); populated
|
|
|
|
|
|
-- when the launcher feeds live factor planes. Additive columns — on a pre-existing
|
|
|
|
|
|
-- table apply the matching `ALTER TABLE ... ADD COLUMN IF NOT EXISTS` instead.
|
|
|
|
|
|
`base_leverage` Nullable(Float64),
|
|
|
|
|
|
`dc_lev_mult` Nullable(Float64),
|
|
|
|
|
|
`regime_size_mult` Nullable(Float64),
|
|
|
|
|
|
`market_ob_mult` Nullable(Float64),
|
|
|
|
|
|
`esof_size_mult` Nullable(Float64)
|
2026-06-13 20:29:53 +02:00
|
|
|
|
)
|
|
|
|
|
|
ENGINE = MergeTree
|
|
|
|
|
|
ORDER BY (asset, ts)
|
|
|
|
|
|
TTL toDate(ts) + toIntervalDay(180);
|