## 2026-04-04 - `dragon/v2` 目录当前仅发现一个主数据文件:`龙泉回测20260109.data.xlsx`。 - 已完成对该工作簿的结构与交易数据统计;主表为 `龙泉`,另有规则说明表 `焚诀(规则)`。 - 数据口径需要区分三类内容:真实买卖、辅助信号、持仓期间估值与年度收益汇总,不能把整张表直接当作纯成交流水。 - 用户确认:表内未重新开仓就再次出现的“卖点”只是看空信号标记,不是真实交易卖点。 - 用户确认:`C1` 就是 `C4`,只是命名不同。 - 用户确认:`QL凤凰线` 的 `B/S` 本质是上穿/下穿计算。 - 用户确认:本轮重构只针对 `399673`,不扩展到 ETF。 - 用户确认:持仓中再次出现的 `BUY` 视为辅助看多信号,不视为加仓。 - 已按持仓状态拆分输出: - `true_trade_events.csv`:真实交易事件序列 - `true_trades.csv`:配对后的完整交易流水 - `auxiliary_signals.csv`:辅助信号标记 - `trade_split_summary.md`:摘要 - 已完成第一阶段重构: - `dragon_workbook.py`:工作簿解析与真实交易/辅助信号分层 - `dragon_indicators.py`:399673 日线指标重建,含 `A1/B1/C1/KDJ/QL` - `dragon_state_machine.py`:基础状态机骨架 - `dragon_validate.py`:原始行情与 Excel 标记对齐验证 - `dragon_validation.md`:验证摘要 - Dragon v2 strategy reconstruction reached second-stage exit-state refinement. - `dragon_strategy.py` now has explicit high-regime exit handling, hot-exit ql reentry, and sell-signal-node counting instead of daily negative-B1 counting. - Key workbook dates now align on the strategy side: `2019-03-25`, `2020-03-09`, `2020-07-24`, `2021-06-16`, `2021-06-21`, `2021-07-16`, `2022-07-08`, `2022-07-11`, `2022-07-15`. - Latest verified fit in `research/dragon/v2`: real BUY overlap `78/106`, real SELL overlap `70/105`, aux BUY overlap `0/1`, aux SELL overlap `15/21`; strategy trades `97`, win rate `44.33%`, avg return `2.42%`. - Further refined fit in `research/dragon/v2`: real BUY overlap `96/106`, real SELL overlap `88/105`; remaining misses are now concentrated in edge/manual-style dates rather than the main regime trunk. - New recovered pattern classes: - `ql_high_zone_take_profit` / `ql_mid_zone_take_profit` - `deep_oversold_rebound_buy` - `oversold_recovery_buy` - `super_hot_trend_hold` to retain the later `2025-10-14` crash-protection exit instead of exiting on the first light `B1<0` wobble. - Latest edge refinement lifted fit to real BUY overlap `98/106` and real SELL overlap `91/105`. - Recovered late-sample edge behavior includes: - `oversold_reversal_after_ql_buy` - `oversold_rebound_take_profit` - `predictive_b1_break_exit` - `predictive_error_reentry_buy` - Also fixed a same-bar execution bug where a new buy could immediately flow into the sell branch on the same row. - Final fit refinement on 2026-04-04 closed the remaining real-trade gaps. - Added narrow rules in `dragon_strategy.py`: - `post_washout_kdj_reentry_buy` - `glued_mid_zone_wait_kdj_confirmation` - `oversold_low_zone_wait_kdj_confirmation` - also narrowed `low_zone_wait_kdj_confirmation` from broad `<30` to `14<=c1<30` - also changed `run()` so flat-state buy logic can evaluate non-standard reentry days, which was required for workbook real BUY `2019-07-04` - latest verified fit after rerun: - real BUY overlap `106/106` - real SELL overlap `105/105` - aux BUY overlap `1/1` - aux SELL overlap `15/21` - strategy trades `130`, win rate `42.31%`, avg return `1.84%`, median return `-0.77%` - key recovered final dates: - sells: `2017-10-30`, `2018-10-08`, `2019-06-17` - buy: `2019-07-04` - Subsequent optimization pass on 2026-04-04 improved quality while preserving full real-trade alignment. - Added `buy_block_glued_high_weak_rebound` in `dragon_strategy.py`, narrowed to glued-entry candidates with `c1 > 68` and `b1 < -0.08`. - This reduced high-zone weak rebound false positives without breaking `106/106` real buys and `105/105` real sells. - Added `_should_emit_aux_sell()` and changed flat-state aux sell emission to: - sell-after-exit confirmation within 10 days, or - `c1 > 80`, or - `kdj_sell` with `c1 > 60` and `b1 < -0.05` - Also corrected `dragon_backtest.py` evaluation window to trim strategy outputs to workbook start and end dates, removing post-workbook 2026 extra events from fit. - Latest verified fit after this quality pass: - real BUY overlap `106/106`, strategy real BUY `120`, extra real BUY `14` - real SELL overlap `105/105`, strategy real SELL `119`, extra real SELL `14` - aux BUY overlap `1/1`, strategy aux BUY `45` - aux SELL overlap `18/21`, strategy aux SELL `94`, extra aux SELL `76` - strategy trades `120`, win rate `44.17%`, avg return `2.10%`, median return `-0.59%` - Continued refinement later on 2026-04-04 pushed the strategy further while preserving full real-trade alignment. - Additional buy-side filters added in `dragon_strategy.py`: - more precise glued-entry false-rebound filters - deep oversold false-start filters - post-sell rebound false-start filters - dual-gold false-rebound filter for the narrow `18 2024-11-27 -> 2024-11-28 -> 2024-11-29`. - Added two narrow rules in `dragon_strategy.py`: - `long_glued_wait_predictive_break` to stop the premature `2024-11-22` ql-only exit on a long-held glued trade - a long-held extension of `predictive_b1_break_exit` to emit the aligned `2024-11-28` sell after the post-ql decay actually broke down - Resulting event chain now matches workbook structure: - `2024-11-27` became `AUX_BUY` while still holding - `2024-11-28` is the real aligned `predictive_b1_break_exit` - `2024-11-29` remains aligned `predictive_error_reentry_buy` - Latest verified fit after serial rerun: - real BUY overlap `106/106`, strategy real BUY `107`, extra real BUY `1` - real SELL overlap `105/105`, strategy real SELL `106`, extra real SELL `1` - aux BUY overlap `1/1`, strategy aux BUY `48` - aux SELL overlap `18/21`, strategy aux SELL `85` - strategy trades `107`, win rate `44.86%`, avg return `2.52%`, median return `-0.60%` - Remaining residual real-trade rows are now only one profitable alpha pair: - extra real BUY `2023-10-26` - extra real SELL `2023-11-10` - Current strategic judgment: this residual pair should be kept unless the explicit objective changes from "robust reconstruction + quality" to "strict workbook mimicry even at the cost of profitable alpha". - Phase 4 auxiliary-signal optimization started on 2026-04-04. - Added auxiliary-signal audit outputs: - `dragon_aux_signal_audit.py` - `dragon_aux_signal_audit.csv` - `dragon_aux_signal_review.md` - Aux BUY logic in `dragon_strategy.py` was tightened with strength filters and cooldown; it now only emits for stronger holding-period reconfirmation states. - Aux SELL logic was kept on the original robust trunk, then refined with: - duplicate-cooldown suppression - a narrow `state_crash_followthrough` path that recovered workbook aux sell `2025-10-17` - suppression of premature high-zone `kdj-only` aux sells when `b1` is not yet meaningfully negative, which moved alignment from `2019-04-10 -> 2019-04-11` and `2021-07-23 -> 2021-07-26` - Latest verified fit after serial rerun: - real BUY overlap `106/106`, strategy real BUY `107`, extra real BUY `1` - real SELL overlap `105/105`, strategy real SELL `106`, extra real SELL `1` - aux BUY overlap `1/1`, strategy aux BUY `19` - aux SELL overlap `19/21`, strategy aux SELL `82` - strategy trades `107`, win rate `44.86%`, avg return `2.52%`, median return `-0.60%` - Current audit conclusion: - auxiliary BUY redundancy has been materially compressed (`48 -> 19`) - auxiliary SELL overlap improved (`18 -> 19`) but count is still only marginally compressed (`85 -> 82`) - the dominant remaining unmatched bucket is `SELL / post_exit_confirmation`, so any future compression should focus on clustering repeated post-exit bearish confirmations by exit-cycle rather than by global date spacing - Stage 2 tail was completed later on 2026-04-04 with structural outputs and cycle-based aux-sell compression. - Added and validated `dragon_trade_path_trace.py`. - Generated: - `dragon_trade_path_trace.csv` - `dragon_rule_taxonomy.md` - Important fix: Layer 4 path attribution now correctly combines holding-period aux BUY and post-exit aux SELL up to the next real BUY; it no longer misses flat-period bearish confirmations. - Added cycle audit tooling: - `dragon_aux_sell_cycle_audit.py` - `dragon_aux_sell_cycle_audit.csv` - `dragon_aux_sell_cycle_summary.csv` - `dragon_aux_sell_cycle_review.md` - Applied one narrow strategy refinement in `dragon_strategy.py`: - for `post_exit_confirmation`, only the first aux signal of the same side (`ql` or `kdj`) is emitted within a flat sell-cycle; this preserves workbook-style `ql -> kdj` double confirmation cycles while removing redundant same-side repeats - Latest verified fit after serial rerun: - real BUY overlap `106/106`, strategy real BUY `107`, extra real BUY `1` (`2023-10-26`) - real SELL overlap `105/105`, strategy real SELL `106`, extra real SELL `1` (`2023-11-10`) - aux BUY overlap `1/1`, strategy aux BUY `19` - aux SELL overlap `19/21`, strategy aux SELL `75` - strategy trades `107`, win rate `44.86%`, avg return `2.52%`, median return `-0.60%` - Cycle audit result after compression: - repeated `post_exit_confirmation` cycles dropped from `10` to `3` - zero-workbook-anchor repeated cycles dropped from `8` to `1` - remaining protected double-confirmation cycles: - `2022-07-08 -> 2022-09-26` with matched `2022-07-11` and `2022-07-15` - `2018-12-06 -> 2019-01-18` with matched `2018-12-07` - remaining zero-anchor repeated candidate: - `2023-12-04 -> 2024-01-18` with `2023-12-13` and `2023-12-14` - Strategic conclusion: Stage 2 is now materially complete; further aux-sell compression should stop unless a new rule can remove the last candidate without risking protected `ql -> kdj` cycles. - Stage 3 robustness validation was started on 2026-04-04 with executable reporting rather than manual inspection. - Added `dragon_robustness_report.py`. - Generated: - `dragon_trade_quality.csv` - `dragon_trade_group_summary.csv` - `dragon_yearly_performance.csv` - `dragon_rule_contribution_entry.csv` - `dragon_rule_contribution_exit.csv` - `dragon_rule_stability.csv` - `dragon_robustness_report.md` - Key first-pass findings from Stage 3: - baseline trade quality: avg MFE `6.66%`, avg MAE `-2.66%`, avg exit followthrough over next 5 bars `-2.95%` - holding buckets are highly asymmetric: - `00-05d`: win rate `0%`, avg return `-2.03%` - `06-10d`: avg return `-0.81%` - `21-40d`: avg return `6.33%` - `41d+`: win rate `100%`, avg return `24.13%` - sample split improved in the later regime: - `2016-2020`: avg return `1.95%`, profit factor `2.83` - `2021-2025`: avg return `3.15%`, profit factor `3.81` - current realized-trade attribution highlights: - strongest entry contributor remains `glued_buy` - weaker entry bucket needing review is `deep_oversold_rebound_buy` - largest realized drag removal comes from exit rule `knife_take_profit_2_glued` - Important limitation documented in the report: - threshold perturbation and true leave-one-rule-out reruns still require parameterizing hard-coded logic in `dragon_strategy.py` - Stage 3 modules A-D were materially advanced later on 2026-04-04. - Module A parameterization: - added `dragon_strategy_config.py` - `dragon_strategy.py` now accepts `DragonRuleEngine(config=...)` - default config was serially verified to preserve the current baseline exactly: - real BUY overlap `106/106` - real SELL overlap `105/105` - aux BUY overlap `1/1` - aux SELL overlap `19/21`, strategy aux SELL `75` - strategy trades `107`, avg return `2.52%` - First parameterized controls now include: - post-exit aux sell window / duplicate suppression / same-side cycle cap - high-zone kdj-only aux suppression thresholds - glued high weak rebound thresholds - deep oversold rebound thresholds - oversold recovery thresholds - oversold reversal after ql thresholds - post-sell rebound thresholds - predictive b1 break thresholds - `knife_take_profit_2_wait_ql` switch - Module B rerun-based ablation completed: - added: - `dragon_rule_ablation.py` - `dragon_rule_ablation.csv` - `dragon_rule_ablation.md` - Key ablation findings: - `glued_buy` remains the structural backbone; disabling it drops real-buy overlap to `46` and real-sell overlap to `52` - `deep_oversold_rebound_buy` is the clearest weak entry family: - disabling it improves avg return by about `+0.54%` - but drops overlap to real BUY `93`, real SELL `92` - `predictive_b1_break_exit`, `early_crash_probe_buy`, `oversold_reversal_after_ql_buy`, and `oversold_recovery_buy` look directionally weak but only small positive deltas and still break alignment when removed - disabling `knife_take_profit_2_glued` in rerun form produced no headline metric change, implying its current drag is partly replaced by alternative same-cycle exits rather than disappearing cleanly - disabling the aux same-side cycle cap did not change real-trade metrics, confirming the Stage 2 compression is a safe hygiene rule - Module C threshold perturbation completed: - added: - `dragon_threshold_perturbation.py` - `dragon_threshold_perturbation.csv` - `dragon_threshold_perturbation.md` - `dragon_threshold_sensitivity_summary.csv` - Fragile parameters from first perturbation pack: - `predictive_b1_break_short_b1_max` - `predictive_b1_break_long_b1_max` - `deep_oversold_entry_c1_max` - `deep_oversold_entry_b1_min` - Relatively robust parameters: - `post_exit_confirmation_window_days` - `aux_sell_high_zone_kdj_only_block_c1` - `glued_high_weak_rebound_high_c1` - `glued_high_weak_rebound_high_b1` - Important inference: optimization leverage is no longer mainly in the aux layer; it concentrates in weak oversold entry logic and fragile predictive-break exits - Module D reporting completed: - added: - `dragon_stability_report.py` - `dragon_stage3_stability_report.md` - Current stage judgment: - Stage 2 is complete - Stage 3 now has working trade-quality, rerun ablation, threshold perturbation, and summary reporting - best next optimization target is `deep_oversold_rebound_buy`, but only through a guarded redesign that preserves workbook alignment rather than blunt removal - Continued Stage 3 work then focused specifically on `deep_oversold_rebound_buy`. - Added localized audit outputs: - `dragon_deep_oversold_audit.py` - `dragon_deep_oversold_audit.csv` - `dragon_deep_oversold_subtype_summary.csv` - `dragon_deep_oversold_review.md` - Key finding: - all `18` current deep-oversold entries are workbook-aligned, so this family cannot be optimized by blunt deletion - the weakest subtypes are: - `positive_b1_rebound` (`3` trades, win rate `0%`, avg return about `-2.32%`) - `shallow_false_start` (`6` trades, avg return about `-1.71%`) - better relative subtype is: - `classic_oversold` (`5` trades, win rate `60%`, avg return about `+0.04%`) - Strategy was then refactored to preserve identical trading behavior while exposing subtype reasons: - `deep_oversold_rebound_buy:positive_b1_rebound` - `deep_oversold_rebound_buy:deep_capitulation` - `deep_oversold_rebound_buy:classic_oversold` - `deep_oversold_rebound_buy:shallow_false_start` - `deep_oversold_rebound_buy:mixed_oversold` - Important engineering lesson: - subtype labels initially broke downstream exact `entry_reason == ...` sell logic; fixed by adding family-aware `_entry_reason_is(...)` checks in `dragon_strategy.py` - Final verified result after subtype refactor: - trading behavior unchanged - real BUY overlap remains `106/106` - real SELL overlap remains `105/105` - aux BUY overlap `1/1` - aux SELL overlap `19/21`, strategy aux SELL `75` - strategy trades `107`, avg return `2.52%` - New stage judgment: - the next safe optimization frontier is not “remove deep oversold” - it is “design subtype-aware delayed confirmation or alternate entry routing for `positive_b1_rebound` and `shallow_false_start` while preserving workbook-aligned dates where required” - A subsequent local redesign pass then implemented the first safe default optimization inside the deep-oversold family. - Added config controls in `dragon_strategy_config.py` for deep-oversold subtype routing / blocking experiments. - Default strategy change actually applied: - shallow-false-start entries with `ql_buy` now defer to same-day fallback rules - very light positive-B1 rebound with `a1 > -0.02` now also defers to same-day fallback rules - This rerouted four weak subtype dates without changing any real trade dates: - `2018-01-02` -> now `glued_buy` - `2018-10-19` -> now `dual_gold_resonance_buy` - `2023-06-02` -> now `dual_gold_resonance_buy` - `2024-09-11` -> now `glued_buy` - Verified result after rerun: - baseline fit unchanged at real BUY `106/106`, real SELL `105/105`, aux BUY `1/1`, aux SELL `19/21`, strategy trades `107` - Deep-oversold family count was reduced from `18` to `14` while preserving all aligned dates. - Added focused experiment outputs: - `dragon_deep_oversold_experiments.py` - `dragon_deep_oversold_experiments.csv` - `dragon_deep_oversold_experiments.md` - Focused experiment conclusion: - blocking remaining `positive_b1_rebound` gives about `+0.10%` avg-return improvement but drops overlap to BUY `104`, SELL `103` - blocking remaining `shallow_false_start` without `ql` gives about `+0.15%` but drops overlap to BUY `103`, SELL `102` - blocking both gives about `+0.26%` but drops overlap to BUY `101`, SELL `100` - Strategic conclusion: - safe deep-oversold cleanup has likely been exhausted under the current “preserve 106/105” objective - further improvement now requires explicit user acceptance of alignment loss, or a more complex bridge-style replacement rule - Additional safe simplification was later applied to the entry tree without changing baseline fit or performance. - `non_glued_positive_expansion_buy` was narrowed so it only applies when not `dual_gold`. - In-sample effect: - `2016-07-13` and `2020-04-30` now route to `dual_gold_resonance_buy` on the same dates - baseline stays unchanged at real BUY `106/106`, real SELL `105/105`, aux BUY `1/1`, aux SELL `19/21`, strategy trades `107`, avg return `2.52%` - Current research judgment: - `non_glued_positive_expansion_buy` should be treated as a redundant label, not a separate alpha family - `predictive_b1_break` should be treated as a frozen bridge rule under the workbook-preserving objective - the remaining meaningful weak-family frontier is no longer generic rule deletion but subtype-aware redesign / replacement under strict alignment constraints - The workbook-preserving version is now formalized as the current research baseline rather than only a working reconstruction state. - New baseline-pack outputs: - `dragon_walk_forward_validation.py` - `dragon_walk_forward_summary.csv` - `dragon_walk_forward_family_year.csv` - `dragon_walk_forward_family_stability.csv` - `dragon_walk_forward_report.md` - `dragon_research_baseline.py` - `dragon_baseline_config_snapshot.json` - `dragon_formal_research_baseline.md` - Fixed-baseline walk-forward conclusions: - anchored expanding windows positive `8/10` - rolling 3Y windows positive `7/8` - `glued_buy` remains the clearest persistent structural alpha family - `deep_oversold_rebound_buy` remains the weakest persistent family and should be handled via subtype redesign, not blunt deletion under the current objective - Formal family classification now used for future work: - core alpha: `glued_buy`, `early_crash_probe_buy`, `oversold_recovery_buy` - structural support: `dual_gold_resonance_buy`, `deep_oversold_rebound_buy:classic_oversold` - frozen bridge: `predictive_b1_break_exit`, `predictive_error_reentry_buy`, related split-preserving hold gates - redundant label: `non_glued_positive_expansion_buy` - active research: weak deep-oversold subtypes, `post_washout_kdj_reentry_buy`, `oversold_reversal_after_ql_buy`, `post_sell_rebound_buy`, and the short-holding drag buckets `00-05d` / `06-10d` - Operational implication: - future optimization should fork from `dragon_baseline_config_snapshot.json` - any alignment loss must be treated as a branch with an explicit objective change, not as a silent tweak on the formal baseline - Further Track A work added a switchable delayed-confirmation experiment path for weak `deep_oversold` subtypes without changing the formal baseline. - Strategy-side additions: - pending-state handling for weak deep-oversold setups in `dragon_strategy.py` - config switches `deep_oversold_confirm_weak_with_ql` and `deep_oversold_confirm_window_bars` - New outputs: - `dragon_deep_oversold_confirmation_experiments.csv` - `dragon_deep_oversold_confirmation_event_changes.csv` - `dragon_deep_oversold_confirmation_experiments.md` - `dragon_deep_oversold_confirmation_review.md` - Stable conclusion from that pack: - delayed `QL` confirmation improves alpha-first branch metrics mainly by vetoing weak subtype trades, not by producing genuinely better confirmed entries - `2022-03-11`, `2024-01-18`, `2024-01-23` are clean veto candidates - delayed confirmed replacements like `2022-03-17` and `2024-08-30` still lose money - Research implication: - for weak deep-oversold subtypes, the higher-priority alpha-first direction is selective veto / removal before more elaborate confirmation logic - under the workbook-preserving objective, this branch should remain experimental only and should not be ported into the formal baseline - Follow-up Track-A work confirmed that narrow selective veto is stronger than both delayed confirmation and broad weak-subtype blocking for the alpha-first branch. - New strategy-side experiment hooks: - `deep_oversold_selective_positive_b1_c1_max` - `deep_oversold_selective_shallow_c1_min` - `deep_oversold_selective_shallow_b1_min` - `deep_oversold_selective_mixed_c1_max` - `deep_oversold_selective_mixed_require_no_ql` - New outputs: - `dragon_deep_oversold_selective_veto_experiments.csv` - `dragon_deep_oversold_selective_veto_event_changes.csv` - `dragon_deep_oversold_selective_veto_experiments.md` - `dragon_deep_oversold_selective_veto_review.md` - Best alpha-first branch in that pack: - `selective_veto_plus_mixed_c1_lt_10_2_no_ql` - result about `103` trades, avg_return `2.81%`, profit_factor `3.96`, real BUY / SELL overlap `102 / 101` - This beats broad blocking of all remaining weak deep-oversold subtypes while losing fewer aligned dates. - Trade-level implication: - the valuable direction is not “delete all weak subtype trades” - it is “remove a smaller pathological subset” - current best veto candidate removes: - `2022-02-09` mixed_oversold - `2022-03-11` positive_b1_rebound - `2024-01-18` shallow_false_start - `2024-01-23` shallow_false_start - while keeping: - `2022-03-16` positive_b1_rebound - `2024-08-29` shallow_false_start - Operational conclusion: - Track A priority order is now: - narrow selective veto - then delayed confirmation only if paired with extra quality filters - broad subtype deletion last - Stage 3 is now formally complete and split into two explicit baselines. - Official reconstruction branch: - `workbook_preserving` - metrics `106/106` real BUY, `105/105` real SELL, `107` trades, avg_return `2.52%`, profit_factor `3.31` - Performance-oriented research branch: - `alpha_first_selective_veto` - metrics `102/101` real BUY / SELL overlap, `103` trades, avg_return `2.81%`, profit_factor `3.96` - branch outputs: - `dragon_alpha_first_baseline.md` - `dragon_alpha_first_config_snapshot.json` - `dragon_alpha_first_branch_summary.csv` - `dragon_alpha_first_branch_comparison.csv` - `dragon_alpha_first_branch_walk_forward.csv` - `dragon_alpha_first_branch_trade_diff.csv` - `dragon_stage3_completion.md` - Stable governance going forward: - `workbook_preserving` is the authoritative reconstruction baseline - `alpha_first_selective_veto` is the leading alpha-first research branch - future optimization must declare branch first; do not mix workbook-preserving and alpha-first changes silently - Post-closure branch extension review on 2026-04-04 formally tested a glued-focused short-holding candidate above the current alpha-first branch. - Added: - `dragon_glued_alpha_candidate.py` - `dragon_glued_alpha_candidate_summary.csv` - `dragon_glued_alpha_candidate_comparison.csv` - `dragon_glued_alpha_candidate_holding_buckets.csv` - `dragon_glued_alpha_candidate_walk_forward.csv` - `dragon_glued_alpha_candidate_trade_diff_vs_alpha.csv` - `dragon_glued_alpha_candidate_trade_diff_vs_workbook.csv` - `dragon_glued_alpha_candidate_config_snapshot.json` - `dragon_glued_alpha_candidate_review.md` - New research branch definition: - `alpha_first_glued_selective_veto` - config = current `alpha_first_selective_veto` plus glued veto: - `glued_selective_hot`: `c1 >= 40`, `b1 >= 0.10` - `glued_selective_low`: `23 <= c1 < 28`, `b1 <= 0.02` - Branch-level result: - trades `92` - avg_return `3.35%` - profit_factor `4.95` - real BUY / SELL overlap `90 / 89` - walk-forward: - anchored `9/10` positive years, avg test return `3.86%` - rolling 3Y `7/8` positive years, avg test return `4.78%` - Important governance conclusion: - glued candidate is stronger on performance and short-holding drag than `alpha_first_selective_veto` - but overlap loss is much larger (`102/101 -> 90/89`) - therefore keep `alpha_first_selective_veto` as the official alpha-first baseline - treat `alpha_first_glued_selective_veto` as the next research branch, not a replacement baseline - Trade-diff nuance: - candidate mostly removes `glued_buy` trades (`12` removals vs alpha-first), but also introduces one fallback reroute: - `2021-11-22 -> 2021-11-30`, `dual_gold_resonance_buy -> small_positive_a1_declining:kdj_sell` - Follow-up glued attribution and refinement work on 2026-04-04 split the glued veto branch into two qualitatively different buckets. - Added: - `dragon_glued_veto_attribution.py` - `dragon_glued_veto_attribution.csv` - `dragon_glued_veto_bucket_summary.csv` - `dragon_glued_veto_review.md` - Attribution result for the `12` removed trades vs `alpha_first_selective_veto`: - removed-set avg_return `-1.60%` - removed-set win_rate `8.33%` - removed-set profit_factor `0.03` - bucket split: - `low_weak_range`: `4` trades, win_rate `0%`, avg_return `-2.35%`, avg_holding `3.0` -> clean promotion candidate - `hot_positive_b1`: `8` trades, win_rate `12.5%`, avg_return `-1.23%`, avg_holding `6.1` -> directionally correct, but one micro-profit sample remains - key attribution judgment: - `low_weak_range` should be treated as the clean conservative glued filter - `hot_positive_b1` should not be rolled back, but should be narrowed rather than used in the original broad form - Strategy parameterization was extended with `glued_selective_hot_c1_max` and then tested through: - `dragon_glued_refine_experiments.py` - `dragon_glued_refine_experiments.csv` - `dragon_glued_refine_experiments.md` - `dragon_glued_refined_candidate_config.json` - `dragon_glued_refined_trade_diff_vs_full.csv` - new branch config helper: - `alpha_first_glued_refined_hot_cap_config()` - New refined glued research candidate: - `glued_veto_hot_cap75_and_low` - metrics: - trades `92` - avg_return `3.36%` - profit_factor `4.98` - real BUY / SELL overlap `91 / 90` - short buckets: - `00-05d` `-1.67%` - `06-10d` `-0.59%` - This refined candidate dominates the previous full glued candidate (`90/89`, `3.35%`, `PF 4.95`) by restoring the only super-hot micro-profit trade: - restored `2021-11-05 -> 2021-11-18`, `glued_buy -> ql_mid_zone_take_profit` - removed the fallback reroute `2021-11-22 -> 2021-11-30`, `dual_gold_resonance_buy -> small_positive_a1_declining:kdj_sell` - Governance implication: - current official alpha-first baseline still remains `alpha_first_selective_veto` - but the next best research branch is no longer the old full glued candidate - it is now the refined glued branch with hot cap `75` plus the intact low weak-range veto - Formal upgrade-review package for the refined glued branch was completed on 2026-04-04. - Added: - `dragon_glued_refined_branch_review.py` - `dragon_glued_refined_branch_summary.csv` - `dragon_glued_refined_branch_comparison.csv` - `dragon_glued_refined_branch_walk_forward.csv` - `dragon_glued_refined_branch_trade_diff.csv` - `dragon_glued_refined_holding_breakdown.csv` - `dragon_glued_refined_yearly_breakdown.csv` - `dragon_glued_refined_family_breakdown.csv` - `dragon_glued_refined_regime_breakdown.csv` - `dragon_glued_refined_branch_config_snapshot.json` - `dragon_glued_refined_branch_review.md` - Branch-level result for `alpha_first_glued_refined_hot_cap`: - trades `92` - avg_return `3.36%` - profit_factor `4.98` - avg_MFE `7.57%` - avg_MAE `-2.57%` - real BUY / SELL overlap `91 / 90` - Walk-forward versus current `alpha_first_selective_veto`: - anchored `8/10 -> 9/10`, avg test return `3.40% -> 3.87%` - rolling 3Y `7/8 -> 7/8`, avg test return `4.30% -> 4.79%` - Refined-vs-alpha trade diff: - removed `11` - added `0` - avg_return delta `+0.55%` - profit_factor delta `+1.02` - overlap delta `-11 / -11` - Formal governance judgment from the review: - upgrade gate passes on headline quality and walk-forward thresholds - but governance still should remain explicit because overlap loss is still large - current recommendation remains: - keep `alpha_first_selective_veto` as the formal alpha-first baseline - mark `alpha_first_glued_refined_hot_cap` as the leading next alpha-first candidate - Added removed-trade attribution package for the refined branch: - `dragon_glued_refined_removed_trade_attribution.py` - `dragon_glued_refined_removed_trade_attribution.csv` - `dragon_glued_refined_removed_trade_review.md` - Removed-set result vs current alpha-first: - removed trades `11` - removed-set avg_return `-1.81%` - removed-set win_rate `0%` - removed-set profit_factor `0.00` - recommendation mix: - `KEEP_REMOVAL` `11` - `OBSERVE_REMOVAL` `0` - `OVER_REMOVAL` `0` - bucket split: - `hot_positive_b1_cap75`: `7` trades, avg_return `-1.50%` - `low_weak_range`: `4` trades, avg_return `-2.35%` - Strong inference: - the refined branch no longer removes any profitable sample from the current alpha-first baseline - it is now a fully removal-driven cleanup of weak short-holding glued trades - Final alpha-branch governance package was completed on 2026-04-04. - Added: - `dragon_alpha_branch_governance.py` - `dragon_alpha_branch_governance_matrix.csv` - `dragon_alpha_branch_governance_decision.json` - `dragon_alpha_branch_governance.md` - Governance gates used: - `headline_quality_gate` - `stability_gate` - `removal_quality_gate` - `alignment_cost_gate` - Gate definitions: - headline quality requires avg_return delta `>= +0.30%`, profit_factor delta `>= +0.50`, and no short-bucket deterioration - stability requires anchored and rolling walk-forward to be no worse than the current formal alpha branch - removal quality requires `OVER_REMOVAL = 0`, `OBSERVE_REMOVAL <= 1`, removed-set win_rate `<= 5%`, removed-set avg_return `< 0` - alignment cost requires incremental overlap loss no worse than `8` additional BUYs and `8` additional SELLs vs the current formal alpha branch for automatic promotion - Final governance result: - current formal alpha branch remains `alpha_first_selective_veto` - leading candidate branch is `alpha_first_glued_refined_hot_cap` - gate status: - `headline_quality_gate = PASS` - `stability_gate = PASS` - `removal_quality_gate = PASS` - `alignment_cost_gate = FAIL` - final decision: - `DUAL_TRACK_GOVERNANCE` - practical meaning: - keep `alpha_first_selective_veto` as the formal alpha branch for now - keep `alpha_first_glued_refined_hot_cap` as the governed leading candidate - if objective explicitly shifts toward stronger alpha at the cost of more workbook divergence, refined glued should be the first branch promoted - User explicitly endorsed the stronger alpha-first judgment after reviewing the governance package and requested a forward research plan under that direction. - Working implication for next planning round: - research should pivot from workbook-style residual cleanup to formalizing and validating the stronger alpha candidate path - `alpha_first_glued_refined_hot_cap` should be treated as the primary forward research subject, with `alpha_first_selective_veto` retained as the control branch - Formalization validation pack for the stronger alpha candidate was completed after the user approved the alpha-first direction. - Added governance-direction docs: - `dragon_research_direction_update.md` - `dragon_forward_branch_roles.md` - Added cost-stress package: - `dragon_cost_stress_test.py` - `dragon_cost_stress_test.csv` - `dragon_cost_stress_test.md` - Cost-stress conclusion: - refined branch remains ahead of current alpha under all tested cost levels - at `20 bps/side`, current alpha CAGR `23.55%`, refined CAGR `26.62%` - refined minus current alpha CAGR delta widens from about `+2.62%` at `0 bps` to about `+3.07%` at `20 bps` - implication: refined edge is not only a zero-cost backtest artifact - Added local-neighborhood sensitivity package: - `dragon_glued_refined_sensitivity.py` - `dragon_glued_refined_sensitivity.csv` - `dragon_glued_refined_sensitivity_summary.csv` - `dragon_glued_refined_sensitivity.md` - Sensitivity conclusion: - tested local neighborhood cases `81` - avg_return range `3.23% -> 3.42%` - profit_factor range `4.66 -> 5.11` - overlap floor `89/89` - robust-nearby cases `52` - important inference: - the refined branch is locally stable; it is not dependent on a single knife-edge threshold point - Added year/regime consistency package: - `dragon_glued_refined_year_regime_review.py` - `dragon_glued_refined_year_regime_review.csv` - `dragon_glued_refined_regime_review.csv` - `dragon_glued_refined_holding_review.csv` - `dragon_glued_refined_family_review.csv` - `dragon_glued_refined_year_regime_review.md` - Year/regime conclusion: - refined improves yearly avg_return in `6` sell-year buckets out of `11` - refined improves avg_return in `3` regime buckets out of `4` - holding-bucket improvements are concentrated exactly where intended: - `00-05d` and `06-10d` - medium and long holding buckets are preserved rather than damaged - strongest family-level improvement is still `glued_buy` - Added equity/drawdown package: - `dragon_equity_curve_review.py` - `dragon_equity_curve_review.csv` - `dragon_drawdown_review.csv` - `dragon_monthly_return_review.csv` - `dragon_yearly_return_review.csv` - `dragon_equity_curve_review.md` - Equity/drawdown conclusion: - refined branch has the best growth-quality profile in the pack - CAGR `31.32%` - max_drawdown `-12.79%` - drawdown_duration `16` trades - Calmar `2.45` - compared with current alpha: - current alpha CAGR `28.70%`, max_drawdown `-14.84%`, Calmar `1.93` - implication: refined branch improves both growth and drawdown quality rather than trading one for the other - Stage judgment after formalization validation: - `alpha_first_glued_refined_hot_cap` now passes: - headline quality - walk-forward stability - removed-trade quality - cost pressure - local threshold-neighborhood stability - equity-curve / drawdown quality - remaining blocker is no longer quantitative robustness - remaining blocker is only governance preference around workbook divergence - Added `dragon_alpha_promotion_decision.md` to convert the current dual-track governance into an explicit promotion tree. - New operational conclusion: - governance-neutral default remains `DUAL_TRACK_GOVERNANCE` - if objective is explicitly alpha-first, the recommended promoted branch is `alpha_first_glued_refined_hot_cap` - branch roles are now fixed more clearly: - `alpha_first_glued_refined_hot_cap` = forward research default - `alpha_first_selective_veto` = benchmark control - `workbook_preserving` = reconstruction reference - main blocker to formal promotion is documented as governance preference only, not missing quantitative proof - Added `dragon_forward_research_plan.md` as the explicit next-stage plan file. - This plan fixes the next research sequence as: - Phase 1: freeze branch roles and objective - Phase 2: refined-branch alpha attribution - Phase 3: execution-aware robustness validation - Phase 4: formal strategy governance - Phase 5: final strategy memo - Immediate next execution target is Phase 2 on `alpha_first_glued_refined_hot_cap`. - Completed the refined-branch alpha attribution pack: - `dragon_refined_alpha_attribution.py` - `dragon_refined_family_decomposition.csv` - `dragon_refined_alpha_attribution.csv` - `dragon_refined_removed_trade_recheck.csv` - `dragon_refined_edge_review.md` - Main finding: - refined alpha is still primarily a `glued_buy` story - improvement comes from deleting low-quality short glued trades, not from adding complex new paths - removed trades vs control remain `11`, all `KEEP_REMOVAL`, removed-set avg_return `-1.81%`, win_rate `0%` - Completed the execution-aware robustness pack: - `dragon_refined_execution_validation.py` - `dragon_refined_execution_stress.csv` - `dragon_refined_latency_review.csv` - `dragon_refined_risk_cluster_review.csv` - `dragon_refined_stability_review.md` - Key findings: - next-open execution still favors refined: avg_return `3.31%` vs control `2.76%`, PF `4.73` vs `3.78` - next-close execution still favors refined: avg_return `2.44%` vs control `1.98%`, PF `2.78` vs `2.37` - next-open + `20 bps/side` still favors refined: CAGR `25.51%` vs `22.40%`, PF `3.64` vs `2.92` - risk clustering also improved under next-open: - max loss streak `8` vs `10` - worst 5-trade sum `-7.96%` vs `-10.11%` - max drawdown `-13.19%` vs `-17.84%` - Completed the formal governance package: - `dragon_formal_strategy_governance.md` - `dragon_parameter_governance.md` - `dragon_strategy_monitoring_template.csv` - `dragon_formal_strategy_memo.md` - Current terminal judgment in workspace: - `alpha_first_glued_refined_hot_cap` is now the best strategy branch from a quant perspective - if it is not formally promoted, that should be treated as a governance choice rather than an unresolved research gap ## 2026-04-05 - Moved from research formalization into quasi-production packaging. - Added `dragon_rc1_release.py` and generated: - `dragon_rc1_release.md` - `dragon_rc1_config_snapshot.json` - `RC1` is now the frozen release candidate of `alpha_first_glued_refined_hot_cap`. - Added `dragon_daily_signal_pipeline.py` and generated: - `dragon_daily_signal_snapshot.csv` - `dragon_daily_branch_status.csv` - `dragon_daily_monitor_snapshot.csv` - `dragon_daily_rc1_manifest.json` - `dragon_daily_signal_report.md` - plus dated archives in `daily_reports/` - Latest live run used request date `2026-04-05` and correctly resolved the actual latest market bar to `2026-04-03`. - Latest live status on `2026-04-03`: - both refined and control branches are flat - latest real event for both is `2026-02-13 SELL knife_take_profit_2_glued` - no new event fired on `2026-04-03` - Monitoring snapshot after threshold fix: - warnings `0` - hard breaches `0` - next_open avg_return delta vs control `+0.53%` - next_open PF delta vs control `+0.92` - next_open max_drawdown refined `-13.19%` - next_open max loss streak refined `8` - next_open + `20 bps/side` CAGR refined/control `25.17% / 22.07%` - Monitoring template bug fixed: - `next_open_max_drawdown` threshold direction was wrong for negative drawdown values - corrected from `>=` style to `<=` style - after rerun the monitor became fully green - Added forward-observation infrastructure: - `dragon_forward_observation_pipeline.py` - `dragon_forward_observation_log.csv` - `dragon_forward_observation_state.json` - `dragon_signal_change_log.csv` - `dragon_signal_change_review.md` - `dragon_branch_divergence_log.csv` - `dragon_branch_divergence_report.md` - `dragon_monitor_history.csv` - `dragon_monitor_health_report.md` - `dragon_forward_weekly_summary.csv` - `dragon_forward_weekly_review.md` - `forward_reports/` for dated observation archives - First forward-observation state on latest market bar `2026-04-03`: - refined and control are both flat - same latest real event `2026-02-13 SELL knife_take_profit_2_glued` - divergence level `none` - all monitor metrics currently `ok` - the system is now able to accumulate forward logs and streak-based monitor history instead of only producing one-off daily snapshots - Added `dragon_next_stage_opinion_cn.md`. - This Chinese memo fixes the current strategic opinion explicitly: - do not continue optimizing the strategy core now - the best next action is to stop core tuning and accumulate forward observations on `RC1` - future research should only touch weak secondary families in separate branches - promotion or non-promotion of `RC1` should now be decided by forward samples plus governance, not by more in-sample tuning - HTML reporting layer is now available for the forward-observation workflow. - Daily and weekly HTML outputs now exist as first-class artifacts: - `dragon_reports_index.html` - `dragon_daily_signal_report.html` - `dragon_forward_weekly_review.html` - dated archives in `html_reports/` - Daily / weekly report coverage now includes all three strategy roles: - `workbook_preserving` - `alpha_first_selective_veto` - `alpha_first_glued_refined_hot_cap` - Important note for future sessions: - PowerShell terminal output may display Chinese mojibake when reading UTF-8 files directly - the generated HTML files themselves were verified as valid UTF-8 and should be checked in a browser, not judged from terminal rendering alone - HTML nav bug was fixed after the first rollout: - root pages and archived pages require different relative hrefs - archived pages in `html_reports/` now link within their own directory correctly - HTML presentation was upgraded further with: - RC1 summary cards on the index page - inline equity-curve and yearly-return charts on the index page - `update_dragon_reports.ps1` as a one-click refresh entry point - Chinese usage docs now also have HTML pages: - `dragon_html_report_usage_cn.html` - `dragon_html_report_quickstart_cn.html` - they are linked from the index page and generated for both root and `html_reports/` - Historical full-trade detail reporting is now part of the daily HTML package. - Generated artifacts: - `dragon_historical_trade_details.csv` - `dragon_historical_trade_details.html` - dated CSV archive in `daily_reports/` - dated HTML archive in `html_reports/` - This page is linked from the daily report and index page so the user can audit complete historical trade flows directly from the latest report. - There is now a dedicated investor-facing theory page for the strategy and indicators: - `dragon_indicator_strategy_guide_cn.md` - `dragon_indicator_strategy_guide_cn.html` - That guide page was later upgraded into a fuller illustrated explainer with: - indicator quick-reference cards - market-state interpretation table - detailed threshold / trigger examples - representative real BUY / SELL rule glossary with RC1 counts - live three-branch comparison table - common-misconception section - report-reading path section - The guide and historical detail pages are now cross-linked: - clicking a rule name in the guide jumps into historical detail with prefilled URL-query filters - historical detail page shows the incoming filter source and offers a one-click clear-filters link - historical detail page also supports expandable per-trade drilldown rows with quick same-rule navigation - expanded detail rows now include previous/next same-branch trade navigation with auto-expand + scroll - linked from the shared HTML nav as `指标原理` - Historical detail reporting now includes per-trade indicator audit windows. - Each expanded row lazily renders buy-date and sell-date `前后 10 个交易日` mini-tables. - Fields include `close / a1 / b1 / c1 / KDJ / QL`. - Report generation can auto-refresh full indicator coverage through `DragonIndicatorEngine`. - Persisted cache file: `dragon_indicator_snapshot_full.csv`. - Embedded indicator coverage in detail HTML now reaches `2026-04-03` instead of stopping at `2026-01-30`. - Historical detail snapshots now also include per-branch same-window strategy events. - Snapshot cards show rule summary plus tagged `真实BUY / 真实SELL / 辅助BUY / 辅助SELL` entries in a `策略事件` column. - Historical detail snapshots were then upgraded with a window-level event summary strip. - Each snapshot card now summarizes the +/-10 trading-day window using embedded event payloads: - total event count - counts for `真实BUY / 真实SELL / 辅助BUY / 辅助SELL` - nearest event before the marker day - same-day event summary - nearest event after the marker day - Implementation stayed inside `dragon_html_reports.py`; no strategy-core logic was changed. - Verified by rerunning: - `py -3 -m py_compile dragon_html_reports.py` - `py -3 dragon_html_reports.py` - and checking both root and archived historical detail HTML for `snapshot-summary` / `总事件` / `前一条` markers. - Explicit handoff state for future Codex CLI/session switches: - latest finished task is this historical-detail event-summary-strip enhancement - refreshed artifacts: - `dragon_historical_trade_details.html` - `html_reports/dragon_historical_trade_details_2026-04-03.html` - this was a reporting/auditability change only, not a strategy or signal-logic change - A later formal code review on the current production chain found and fixed three practical issues: - `dragon_daily_signal_pipeline.py` had two governance monitor metrics hard-coded (`removed_trade_over_removal_count`, `local_sensitivity_robust_case_count`) - they now load dynamically from: - `dragon_glued_refined_removed_trade_attribution.csv` - `dragon_glued_refined_sensitivity.csv` - next-bar execution models in both: - `dragon_daily_signal_pipeline.py` - `dragon_refined_execution_validation.py` - no longer silently fall back to same-bar close when no next bar exists - missing next-bar execution prices are now `NaN` and excluded by `_apply_execution_model(...)` - `dragon_forward_observation_pipeline.py` weekly summary no longer duplicates global warning/divergence counts into every branch row - it now adds a separate `system_monitor` row for global monitor-level counts - verification reruns completed successfully after these fixes - Later external review findings were also fixed: - `dragon_indicators.py` no longer hard-codes a workstation-only dependency path - it now resolves the repo root relative to `__file__` and loads shared dependencies from `/dragon` - `dragon_alpha_first_baseline.py` now filters branch trades by both `buy_date` and `sell_date` against the workbook event window - this removes post-window exits from alpha-branch summary statistics - alpha-vs-workbook trade-diff generation in the same script was aligned to the same filtered workbook trade set - verified result: - `dragon_alpha_first_branch_trade_diff.csv` no longer contains the old `2026-01-05 -> 2026-01-20` out-of-window trade - `dragon_alpha_first_baseline.md` now reports removed trades `4` - A later consistency sweep standardized workbook-window trade filtering across the research/evaluation pack. - Principle fixed: - in workbook-window statistics, trade filters must constrain both `buy_date` and `sell_date` - not only `buy_date` - Updated scripts include: - `dragon_backtest.py` - `dragon_cost_stress_test.py` - deep-oversold experiment scripts - glued/refined candidate and branch-review scripts - predictive-break experiment script - `dragon_rc1_release.py` - `dragon_refined_alpha_attribution.py` - `dragon_refined_execution_validation.py` - `dragon_rule_ablation.py` - short-holding audit / experiment scripts - `dragon_strategy_overview.py` - `dragon_threshold_perturbation.py` - Explicit exception kept: - `dragon_daily_signal_pipeline.py` remains live/forward oriented and is not capped by workbook end date - representative reruns succeeded after the sweep - System review closure on `2026-04-05`: - fixed the last cross-report inconsistencies by unifying bounded evaluation windows and CAGR year calculations - `dragon_alpha_first_baseline.py` now uses the same `2016-01-01 -> 2025-12-31` release window as `dragon_strategy_overview.py` and `dragon_glued_refined_branch_review.py` - `dragon_rc1_release.py` and `dragon_refined_execution_validation.py` now derive evaluation years from the window dates instead of hard-coding `10.0` - important execution lesson: if `dragon_system_review.py` is run in parallel with its upstream generators, it can temporarily read stale outputs; rerun it after upstream artifacts complete - final result after rerun: - `dragon_review_branch_metric_consistency.md` shows `0` mismatches - `dragon_strategy_overview.csv` is now aligned with the branch-specific summary and release artifacts - review focus has shifted from internal metric-definition drift to governance / monitoring interpretation - Later second-pass review on `2026-04-05` fixed additional governance/reporting defects: - in `dragon_alpha_branch_governance.py`, `alignment_cost_gate` no longer incorrectly fails when overlap delta is positive - in the same file, an empty removed-trade set no longer fails `removal_quality_gate` - the same governance report's final recommendation section now follows `final_decision` instead of always defaulting toward keeping the old alpha branch - in `dragon_html_reports.py`, `system_monitor` is now rendered with user-facing Chinese labels instead of raw internal names - no new high-severity strategy-core issue was found in that second pass - The next P1 engineering fix on `2026-04-05` closed the monitor-chain silent-failure gap: - `dragon_daily_signal_pipeline.py` now marks missing metric values as `missing_data` instead of blank status - `dragon_forward_observation_pipeline.py` now treats `missing_data` as hard-breach-equivalent for monitoring purposes while also tracking a separate `missing_data_count` - daily/weekly HTML now expose the missing-metric count, and weekly HTML remains backward-compatible with older observation/divergence logs - this means missing upstream research artifacts will now surface explicitly in monitoring rather than appearing as a false clean run - The next major P2 refactor on `2026-04-05` introduced shared single-source modules: - `dragon_shared.py` for evaluation window constants, year calculation, formatting helpers, and profit-factor helper - `dragon_execution_common.py` for execution-aware apply/summary/risk-cluster helpers - main-chain scripts and core branch-summary scripts were migrated to these shared modules - this removed key script-to-script helper imports such as: - daily pipeline importing formatting from `dragon_strategy_overview.py` - daily pipeline importing execution helpers from `dragon_refined_execution_validation.py` - post-refactor system review still reports `0` metric mismatches, so the consolidation did not change quantitative outputs - Session governance update on `2026-04-05`: - the useful code changes for `dragon/v2` were already committed in git as `9f7ce16` with message `Add dragon v2 strategy research and reporting code` - user explicitly requires workspace memory files to be committed too, not just kept locally - follow-up git work should therefore include `MEMORY.md`, `USER.md`, and daily notes under `memory/` when they contain important session context ## 2026-04-07 - Performed a serious code-based overfitting review on the current `dragon/v2` core strategy and parameter surface. - Current verdict: not a fake strategy and not a pure one-threshold curve-fit, but still medium-to-high overfitting risk. - Main positive evidence: - branch-level alpha refinement only changes a small subset of parameters from the base branch - walk-forward, local sensitivity, and execution/cost stress remain directionally supportive - Main risk evidence: - `StrategyConfig` exposes `102` fields - `dragon_strategy.py` still contains a large hand-built rule tree with many narrow branches - several low-sample special-case families remain, especially `deep_oversold_*`, `predictive_b1_break_*`, and one-off reentry/exit logic - Strategic conclusion: - strongest stable core remains `glued_buy` plus its refined selective filter family - weakest families should be treated as provisional bridge rules or reconstruction residue, not core alpha - Later on `2026-04-07`, built an external consultation bundle for `dragon/v2`: - directory: `dragon_v2_consult_2026-04-07/` - zip: `dragon_v2_consult_2026-04-07.zip` - bundle includes: - a Chinese memo summarizing bottlenecks / risks - a suggested ChatGPT Pro review prompt - core source code and parameter snapshots - the most relevant robustness / fragility reports - selected supporting data and workbook exports - Main bundle judgment: - not a fake strategy, but still medium-to-high overfitting risk - architecture bottleneck is the monolithic, order-sensitive rule tree in `dragon_strategy.py` - biggest weak families remain `deep_oversold_*` and `predictive_b1_break_*` ## 2026-04-08 - Ran the daily live signal chain on request date `2026-04-08`. - Initially, latest available market bar resolved to `2026-04-07` and there was no buy trigger. - Later the live signal path was upgraded to support intraday realtime evaluation: - if today's official daily bar is missing, append one realtime snapshot and use the current market price as today's provisional `close` - implemented in: - `dragon/data_fetcher_v2.py` - `dragon_indicators.py` - `dragon_daily_signal_pipeline.py` - Daily report and manifest now explicitly show: - `data_mode` - `historical_latest_bar_date` - `snapshot_timestamp` - Verified live run after the change: - latest evaluated bar became `2026-04-08` via realtime snapshot while the historical latest official bar remained `2026-04-07` - all three tracked branches still remained flat and no new event fired - latest real event for `workbook_preserving`, `alpha_first_selective_veto`, and `alpha_first_glued_refined_hot_cap` is still `2026-02-13 SELL knife_take_profit_2_glued` - latest realtime snapshot around `2026-04-08T14:47:31` had `KDJ buy=True` and `QL buy=True`, but the buy path was blocked in all three branches by `buy_block_glued_high_weak_rebound` - Later analysis on `2026-04-08` confirmed `buy_block_glued_high_weak_rebound` is materially useful: - official daily-bar replay through `2026-04-07` shows `17` historical blocks (`15` inside `2016-01-01 -> 2025-12-31`) on each tracked branch - disabling only this filter adds `15` trades and weakens all three branches - RC1 impact when disabled: - trades `91 -> 106` - avg_return `3.42% -> 2.80%` - profit_factor `5.11 -> 4.08` - added trades are weak on average (`-0.99%`, win rate about `26.7%`) - current conclusion: keep this filter; it is a real quality-preserving filter rather than cosmetic complexity ## 2026-04-09 - Continued the RC1 restructuring proposal execution after user request to continue. - Completed validation pass for the new compatibility-first metadata integration: - `dragon_strategy.py` post-run enrichment for `reason_layer/reason_family/reason_code` on events and `buy_reason_*`/`sell_reason_*` on trades. - Rebuilt golden baseline and refreshed `dragon_rc1_golden_manifest.json` (`generated_at=2026-04-09T00:57:54`). - Golden summary remains stable: - trade_count `91` - event_count `272` - win_rate `52.75%` - avg_return `3.42%` - New manifest now carries stable core hashes: - events core sha256 `8965d1b539a998d7d0aff04432aa2a47cf30ee40df013b9d8b7eb66a3d50a331` - trades core sha256 `1298be56b0898266b0b854d62a979c00c20b01629393c82bb8c804faf852cb97` - Re-ran layer attribution; `dragon_rule_layer_attribution.md` still reports `no unknown reason mapping`. - Added/ran tests and all passed: - `tests/test_rc1_golden_regression.py` - `tests/test_reason_catalog_mapping.py` - `py -3 -m unittest discover -s tests -v` -> `OK` (`3` tests). - Smoke-regression on production path also passed: - `py -3 dragon_daily_signal_pipeline.py --as-of 2026-04-08` ran successfully after the metadata enrichment. - Improved test portability: - `tests/test_reason_catalog_mapping.py` now derives trade reasons directly from strategy output (snapshot + engine) instead of relying on `dragon_historical_trade_details.csv`. - this removes a local-cache dependency and keeps tests runnable in cleaner environments. - Added a fresh optimization proposal document for the next execution stage: - `dragon_v2_rc1_optimization_proposal_cn.md` - proposal scope focuses on phase-3+ execution: rule-engine split (`core/secondary/bridge`), structured state migration away from reason-string control coupling, weak-family optimization in a new branch with attribution-first acceptance, and stronger no-silent-path-change testing. - User explicitly requested to推进 in OpenSpec form. - Added local OpenSpec governance package under `dragon/v2`: - `openspec/config.yaml` - change set `openspec/changes/rc1-layered-governed-optimization/` with proposal/design/tasks/spec docs covering layered rule-engine migration, structured state migration, weak-family governance, and golden regression gates. - Later executed the full OpenSpec task pack in one uninterrupted run on user request. - Main implementation outcomes: - layered orchestration modules added: - `dragon_rule_engine_v2.py` - `dragon_rules_core.py` - `dragon_rules_secondary.py` - `dragon_rules_bridge.py` - `dragon_strategy.py` kept as compatibility facade while adding structured control fields and bridge flags for predictive/pending chains. - new regression tests added and all passing (`8` total tests): - `test_no_silent_path_change.py` - `test_bridge_chain_regression.py` - `test_deep_oversold_pending_paths.py` - weak-family experiment pack executed with outputs: - `dragon_weak_family_experiment_summary.csv` - `dragon_weak_family_trade_diff.csv` - `dragon_weak_family_execution_stress.csv` - plus markdown/config snapshots. - layered attribution outputs added via `dragon_layered_pnl_attribution.py`. - acceptance report published at: - `openspec/changes/rc1-layered-governed-optimization/acceptance-summary.md` - tasks for this OpenSpec change are now fully checked in `tasks.md`. - Then continued with a second OpenSpec change focused on physical isolation of weak-family predicates: - `openspec/changes/predictive-deepoversold-physical-isolation/` - Added dedicated modules: - `dragon_bridge_predictive_break.py` - `dragon_deep_oversold_classifier.py` - `dragon_deep_oversold_confirmation.py` - `dragon_strategy.py` now delegates predictive/deep-oversold predicate checks to those modules (compatibility-preserving). - Added module tests: - `tests/test_predictive_bridge_module.py` - `tests/test_deep_oversold_modules.py` - Validation remains green: - RC1 golden summary and core hashes unchanged, - attribution mapping still has no unknown reason mapping, - full test suite reached `14` passing tests, - daily signal pipeline smoke still passes. - Continued with a third OpenSpec execution round: - `openspec/changes/execution-decoupling-rollout-governance/`. - Main engineering outcomes: - decoupled compatibility runtime loop from `dragon_strategy.py` into `dragon_execution_runtime.py`, - added rollout gate engine and checker (`dragon_rollout_governance.py`, `dragon_rollout_governance_check.py`), - integrated checker into `dragon_forward_observation_pipeline.py`, - rollout checker now outputs explicit operational decision artifacts each run. - New rollout artifacts: - `dragon_rollout_state.json` - `dragon_rollout_governance_snapshot.csv` - `dragon_rollout_governance_report.md` - `dragon_rollout_rollback_runbook.md` - Added test `tests/test_rollout_governance.py`; full suite now `17` tests passing. - Revalidated guardrails after this round: - golden core hashes unchanged (`events 8965d1...a331`, `trades 1298be...cb97`), - daily and forward pipelines both passed smoke reruns. - latest rollout decision artifact shows: - `decision=FORWARD_OK` - `active_branch=alpha_first_glued_refined_hot_cap` - `fallback_branch=alpha_first_selective_veto`. - one-click tracking entry `update_dragon_reports.ps1` was upgraded: - now prints latest bar + rollout decision + active/fallback branch + gate counts. - supports `-StrictGate` (exit `2` when decision is not `FORWARD_OK`) and `-OpenReport`. - T-day data freshness/caching fix was applied in `dragon/data_fetcher_v2.py`: - when request end date covers today, `fetch_index_data_v2` now bypasses stale cache and refreshes source data. - `fetch_index_data_with_latest_snapshot_v2` now writes merged latest snapshot back only when cache key already exists (skip if missing). - added test file `tests/test_data_fetcher_tday_cache.py`; full suite reached `20` passing tests. - On 2026-04-10, user clarified the core strategic objective more sharply: - the biggest real problem is not the existence of the hard veto itself, but whether the system can rejoin trend quickly after a false veto. - optimization priority should therefore center on `false-veto recovery`, `timely trend followthrough reentry`, and `trend-profit capture`, not just on reducing noisy trades. - User also clarified operational scope: this should not become a big-platform research effort; keep it lean, regime-focused, and sized for a small team managing about 1M capital. - Follow-up lean Phase 2 work was completed on 2026-04-10 under a new OpenSpec change: - `openspec/changes/followthrough-lean-profit-loop/` - Added standalone research script: - `dragon_followthrough_profit_loop_review.py` - Added focused regression test: - `tests/test_followthrough_profit_loop_review.py` - Generated outputs: - `dragon_followthrough_profit_loop_candidates.csv` - `dragon_followthrough_profit_loop_candidate_summary.csv` - `dragon_followthrough_profit_loop_reentries.csv` - `dragon_followthrough_profit_loop_reentry_summary.csv` - `dragon_followthrough_profit_loop_review.md` - Validation after this round: - `py -3 dragon_followthrough_profit_loop_review.py` passed - `py -3 -m unittest discover -s tests -v` passed with `25` tests - Core findings from the lean profit-loop review: - `mid_zone_very_weak_b1` is the only subtype with a non-zero delayed reentry path (`2` blocked samples, `1` confirmed probe reentry, `50%` confirm-like 3-bar rate, avg next-20-bar max return about `+7.04%`) - the current mid-zone probe trade still lost slightly (`same_close -0.24%`, `next_open -0.50%`) but had strong post-exit continuation (`post_exit_max_10b +8.35%`), which means the next worthwhile experiment is narrow and specific: execution timing plus entry-specific exit treatment for this subtype only - `high_zone_weak_b1` should not be promoted: `13` blocked samples, only `2` probe reentries, both losing (`same_close avg -3.52%`, `next_open avg -5.03%`) - `ql_rebound_weak_followthrough` remains hard-block justified: now `3` full-history blocked samples, `0` confirmed probe reentries, completed historical windows show `0%` confirm-like rate and `100%` next-3-bar sell-cross rate - latest live-relevant blocked case `2026-04-08` still sits in the ql subtype; through `2026-04-10` only `2/3` followthrough bars are observed, `0` ql reconfirm bars, and still no confirm-like delayed reentry - Practical conclusion for next sessions: - keep RC1 hard blocks unchanged for `ql_rebound_weak_followthrough` and `high_zone_weak_b1` - if further work is done, keep it lean and only test `mid_zone_very_weak_b1` on execution timing and entry-specific exit handling - On 2026-04-11, the next narrow experiment was completed for the only remaining promising subtype: - OpenSpec change: - `openspec/changes/followthrough-mid-exit-shadow-probe/` - New module: - `dragon_glued_followthrough_exit.py` - New shadow branch config: - `alpha_first_glued_followthrough_mid_exit_probe` - New review artifacts: - `dragon_followthrough_mid_exit_review.py` - `dragon_followthrough_mid_exit_branch_summary.csv` - `dragon_followthrough_mid_exit_trade_details.csv` - `dragon_followthrough_mid_exit_trade_diff.csv` - `dragon_followthrough_mid_exit_review.md` - New regression test: - `tests/test_followthrough_mid_exit_probe.py` - Also fixed a date-sensitive cache regression test so full-suite validation remains stable on weekends: - updated `tests/test_data_fetcher_tday_cache.py` - Validation after this round: - `py -3 -m unittest discover -s tests -v` passed with `26` tests - `py -3 dragon_daily_signal_pipeline.py` passed - `py -3 dragon_forward_observation_pipeline.py` passed - Core result: - the new shadow branch only changes the `2020-12-01` mid-zone followthrough reentry path - original mid probe path: - `2020-12-01 -> 2020-12-09` - sell `knife_take_profit_2_glued` - return about `-0.24%` - new mid-exit probe path: - `2020-12-01 -> 2021-02-19` - sell `high_regime_confirmed_exit:kdj_sell` - holding `80` days - return about `+26.65%` - Path interpretation: - the earlier loss was not a discovery problem anymore; it was an exit-treatment problem - by not cutting the repaired reentry on the first mild `kdj_only` wobble, the shadow branch merged that path into the later high-regime trend instead of splitting it into a small loss plus a later re-buy - Branch-level result on current replay: - same_close compounded return improved from base `1424.12%` to mid-exit probe `1460.02%` - next_open compounded return improved from base `1295.54%` to mid-exit probe `1332.91%` - Current practical conclusion: - keep this as a shadow branch and continue observing - do not yet promote it to formal RC1 because the evidence still comes from one repaired-trend historical path - 2026-06-04 daily/forward refresh: - official source data refreshed through `2026-06-03`, then intraday snapshot appended for `2026-06-04` - latest evaluated close `4439.771`, `a1=0.0439`, `b1=0.0123`, `c1=87.74` - latest markers all false (`KDJ buy/sell=False`, `QL buy/sell=False`) - all tracked branches remain in position from `2026-05-06` `BUY` `dual_gold_resonance_buy`, open return about `+10.33%` - no latest-bar events; forward rollout decision `FORWARD_OK`, active branch `alpha_first_glued_refined_hot_cap`