feat: add audited SR breakout experiments and retain failed validation - #50
Merged
Merged
Conversation
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.
The baseline combines proximity to a 60-day low with an upward stock trend, producing no support-bounce signals in the frozen eight-stock history. Only 26 round trips completed, with six winners and 2.34% average exposure.
This PR adds an optional, completed-bar direct breakout entry and separate research switches for market slope and market-filter exits. All existing defaults and risk budgets are preserved. Example 25 supports
--allow-breakout; ancillary online chart fetches are disabled during local snapshot runs.A portable research CLI and bilingual documentation retain all 11 declared configurations, 30 original runs, input hashes, data treatment and failed selection gates. Existing result directories cannot be overwritten.
No candidate passed the declared development/validation return gates. Full-period cost stress returned +4.09%, but validation stress was -0.70% and later stress -2.45%. The provisional candidate was frozen before the later check and was not retuned afterward. It is not promoted to the default or represented as reliably profitable.
Evidence:
research/sr_risk_budget_2026_09/results.json. Three adaptive rounds reused validation; baseline full history was already inspected, so later checks are not pristine OOS. Inputs use the same static eight-stock watchlist and terminal-rebased Tencent hfq prices (not native qfq); raw-price/corporate-action accounting remains an approximation. No cash interest is credited.Verification: the shipped CLI exactly reproduced all full-period and annual metrics for the provisional candidate and its cost-stress run. Baseline replay matched the previous report. Documentation sync and strict MkDocs build passed. Local full offline tests passed (1220 tests); 239 targeted strategy/example/workflow checks passed after the offline fix. Final-head CI passed on Python 3.10, 3.11 and 3.12, both offline evaluator jobs, and documentation sync/smoke/strict build. Behavioral regressions cover next-open fills, future-data isolation, breakout rejection, market switches and no external index fetches during snapshot analysis. The doc-sync checkout now fetches full history for the revision-date plugin.