VIOLET V3d: base-sizer parity harness + gate vs recorded BLUE
parity_harness.py: median-curve parity of V3a VioletBetSizer vs recorded dolphin.trade_events (vel_div->leverage), restricted to short-signal domain. GATE PASSES on prod host: pearson 0.9998, max_abs_err 0.238 (budget 1.0) over 23 bins -> base conviction sizer reproduces BLUE's central tendency. Per-trade scatter is the deferred SC/ACB/OB/gold modulation layer (separate finding doc). 3 unit + 1 gate green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
# VIOLET Finding — The Sizing-Modulation Layer vs. the Capital-Under-Utilization Result
|
||||
|
||||
**Status:** Finding / caveat, 2026-06-13. Separate doc by operator request. Qualifies
|
||||
(does NOT overturn) the [[blue_margin_envelope_study]] and constrains the
|
||||
`VIOLET_STUDY_SPEC__BASE_FRACTION_SIZING.md` (#3) and any pre-V4 sizing work.
|
||||
|
||||
## TL;DR
|
||||
|
||||
The newly-isolated downstream **sizing-modulation layer** (SC-haircut / ACB / OB-cascade
|
||||
/ "gold" — the organs that ride along ACBv6) does **not** counter the margin study: that
|
||||
study used **actual recorded notionals**, which are already post-modulation. But it
|
||||
**sharpens** what "under-utilized capital" means, and makes the modulation layer a
|
||||
**required** pre-execution component for VIOLET — not optional.
|
||||
|
||||
## 1. Why the margin study is NOT contradicted
|
||||
|
||||
The margin/viability study computed `our_leverage = entry_price·quantity / capital_before`
|
||||
from `dolphin.trade_events` — i.e. from the **notionals BLUE actually traded**, haircuts
|
||||
and boosts already baked in. The modulation is therefore *inside* the measured numbers,
|
||||
not a missed factor. Conclusions stand on the as-traded data:
|
||||
|
||||
- max realized `our_leverage` ≈ **1.81**
|
||||
- **100%** of trades margin-feasible at **2×** exchange leverage
|
||||
- **+$47k** clean deduped edge
|
||||
|
||||
## 2. How recorded leverage decomposes (the discovery)
|
||||
|
||||
Recorded conviction `leverage` is **NOT** the base bet-sizer output alone:
|
||||
|
||||
```
|
||||
recorded_leverage(trade) = base_sizer(vel_div) ± modulation(SC, ACB, OB, gold)
|
||||
```
|
||||
|
||||
- **base_sizer(vel_div)** — cubic-convex strength³ curve; VIOLET's V3a `VioletBetSizer`
|
||||
reproduces it (validated on binned MEDIANS: vd −0.03→0.83, −0.04→2.78, −0.05→9.0 with
|
||||
max_leverage=9 / thr −0.02 / extreme −0.05 / convexity 3).
|
||||
- **modulation** — mostly **downward haircuts** (mins far below the median per vel_div
|
||||
bin), with some upward boosts to the 9 cap. This is the per-trade scatter that drops
|
||||
exact per-trade parity to ~34% while the median curve matches.
|
||||
|
||||
## 3. The sharpening (this is the load-bearing part)
|
||||
|
||||
The study's **median wallet utilization was ~6.8%** (`our_leverage` p50 ≈ 0.068). That
|
||||
low median is **largely the haircut layer at work** — BLUE deliberately sized most trades
|
||||
far below the base curve. The **max 1.81** is the *un-haircut, base-saturated* tail.
|
||||
|
||||
Consequences:
|
||||
|
||||
1. **Margin feasibility is robust** even if the haircuts are later dropped: the study's
|
||||
worst case (1.81) already equals the base-saturated value, and 2× covers it. Sizing at
|
||||
full base does not break margin.
|
||||
2. **"Under-utilized ⇒ free ROI" is now GUARDED.** Much of the idle ~93% is **not waste**
|
||||
— it is the modulation layer **deliberately de-risking** (cutting size on
|
||||
lower-conviction / higher-risk setups). It is risk knowledge encoded as size.
|
||||
|
||||
## 4. Binding implications
|
||||
|
||||
- **#3 base-fraction study MUST NOT read the 6.8% median as free headroom.** A large part
|
||||
of it is risk-management. Any base-fraction increase must be evaluated *with* the
|
||||
modulation layer modeled, conditioned on the regime-robustness work — never by naively
|
||||
reclaiming the idle capital.
|
||||
- **The modulation layer is REQUIRED before live execution (V4).** VIOLET running the
|
||||
**base sizer alone** would size *bigger than BLUE did* on exactly the trades BLUE chose
|
||||
to haircut → utilization jumps from ~7% median toward the base, and **realized
|
||||
risk/return diverges from the recorded +$47k** (more variance, possibly worse
|
||||
risk-adjusted). Median-curve base parity (V3d) is necessary but **not sufficient** for
|
||||
faithful BLUE replication.
|
||||
- **New deferred task (pre-V4):** wrap the SC-haircut / ACB / OB-cascade / "gold"
|
||||
modulation organs as a VIOLET sizing-modulation layer on top of the base
|
||||
`VioletBetSizer`, with its own per-trade parity gate vs recorded `leverage`.
|
||||
|
||||
## 5. Related
|
||||
|
||||
[[blue_margin_envelope_study]] · [[violet_v3_alpha_doctrine]] (#9 keystone, #11 parity
|
||||
finding) · `VIOLET_STUDY_SPEC__BASE_FRACTION_SIZING.md` · `prod/clean_arch/violet/alpha_wrappers.py`
|
||||
(base sizer) · live organs in `prod/nautilus_event_trader.py`
|
||||
(`_apply_sc_entry_size_multiplier`, `_record_sc_haircut`, `AdaptiveCircuitBreaker`).
|
||||
Reference in New Issue
Block a user