feat(orchestrate): --arl0-years, the false-alarm budget on the CLI - #18
Merged
Conversation
EdgeDecayTrigger has always taken a Thresholds, but __main__ built it with none,
so the budget was unreachable from the only place the monitor actually runs.
It is the one knob worth reaching for, because it buys detection latency roughly
one for one. Measured on the real 47-market trend book now frozen on the ledger
(+0.5565R, 23.3 trades/yr):
--arl0-years h(sigma) ARL0(yr) ARL1(yr)
(default) 17.17 25.0 9.4
15 13.84 15.0 6.8
10 11.54 10.0 5.1
6 9.06 6.0 3.5
On a low-frequency book the default is slow enough to be decorative, so the number
deserves choosing rather than inheriting.
Three choices worth recording:
* Omitting the flag passes None, not a materialized Thresholds(). Building one
eagerly would pin today's numbers here, so a retune in crucible would quietly
stop reaching this CLI. The default has to keep coming from the judge.
* Two silent-no-op paths are reported rather than shrugged at, because a tuning
flag that tunes nothing reads as applied: --arl0-years without --edge-decay,
and --arl0-years against a baseline with no firing rate. The second is the
subtle one: years are converted using the BASELINE's own rate, so an undated
baseline falls back to monitor_arl0_trades and the flag does nothing, which is
exactly the ambiguity the years unit exists to remove.
* A non-positive budget raises. It is a span of calendar time, and argparse would
otherwise hand a negative straight to the bisection solver.
405 tests pass, ruff clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
EdgeDecayTriggerhas always taken aThresholds, but__main__built it with none, so the budget was unreachable from the only place the monitor actually runs.It is the one knob worth reaching for, because it buys detection latency roughly one for one. Measured on the real 47-market trend book now frozen on the ledger (
+0.5565R, 23.3 trades/yr):--arl0-yearsOn a low-frequency book the default is slow enough to be decorative, so the number deserves choosing rather than inheriting.
Three choices worth recording
None, not a materializedThresholds(). Building one eagerly would pin today's numbers here, so a retune in crucible would quietly stop reaching this CLI. The default has to keep coming from the judge.--arl0-yearswithout--edge-decay, and--arl0-yearsagainst a baseline with no firing rate. The second is the subtle one — years are converted using the baseline's own rate, so an undated baseline falls back tomonitor_arl0_tradesand the flag does nothing, which is exactly the ambiguity the years unit exists to remove.405 tests pass, ruff clean.
🤖 Generated with Claude Code