## 2026-04-08 - Ran `dragon_daily_signal_pipeline.py` on request date `2026-04-08`. - Latest available market bar resolved to `2026-04-07`. - Latest `399673` snapshot on `2026-04-07`: - close `3325.910` - `a1 = -0.0182` - `b1 = -0.1651` - `c1 = 44.35` - `KDJ buy/sell = False/False` - `QL buy/sell = False/False` - No branch fired any new event on the latest bar. - `workbook_preserving`, `alpha_first_selective_veto`, and `alpha_first_glued_refined_hot_cap` all remain flat. - Latest real event for all three branches is still `2026-02-13 SELL knife_take_profit_2_glued`. - User-facing answer for this run: no buy trigger on the latest available bar. - Also ran `dragon_forward_observation_pipeline.py` to persist the daily check. - Forward-observation result on `2026-04-07`: - signal-change count `0` - divergence level `none` - warnings `0` - hard breaches `0` - missing data metrics `0` - Later on `2026-04-08`, upgraded the live-signal path to support intraday realtime triggering. - Implementation: - `dragon/data_fetcher_v2.py` now supports realtime snapshot fetch and conditional current-day snapshot append. - `dragon_indicators.py` now supports `fetch_daily_data(include_intraday_snapshot=True)` and exposes fetch metadata. - `dragon_daily_signal_pipeline.py` now uses intraday snapshot mode by default for same-day checks and reports: - `data_mode` - `historical_latest_bar_date` - `snapshot_timestamp` - explicit note that current market price is used as today's provisional `close` - Verified live run after the upgrade: - latest evaluated bar became `2026-04-08` via realtime snapshot - historical latest official bar remained `2026-04-07` - snapshot timestamp example: `2026-04-08T14:47:31` - live price snapshot close around `3524.990` - latest markers on all three branches: - `KDJ buy=True` - `QL buy=True` - but no real `BUY` event fired - local decision check on the last bar shows all three branches were blocked by: - `buy_block_glued_high_weak_rebound` - Verified `dragon_forward_observation_pipeline.py` still runs successfully after the schema change. - Analyzed `buy_block_glued_high_weak_rebound` on `2026-04-08`. - Current rule location: - `dragon_strategy.py` `_buy_filter_glued_high_weak_rebound(...)` - official daily-bar replay through `2026-04-07` shows the same historical block count on all three tracked branches: - full history block count `17` - release-window (`2016-01-01 -> 2025-12-31`) block count `15` - subtype split in the release window: - `high_zone_weak_b1`: `11` - `mid_zone_very_weak_b1`: `2` - `ql_rebound_weak_followthrough`: `2` - release-window block dates: - `2016-04-29`, `2017-09-27`, `2018-04-18`, `2019-04-24`, `2019-10-10`, `2020-08-18`, `2020-08-24`, `2020-11-30`, `2021-07-29`, `2021-12-09`, `2022-08-01`, `2024-06-04`, `2024-06-17`, `2025-10-21`, `2025-11-13` - including the intraday realtime snapshot on `2026-04-08`, RC1 block count becomes `18` total; the current live block belongs to the `ql_rebound_weak_followthrough` clause. - Effect check by disabling only this filter while keeping the rest of the strategy unchanged: - `workbook_preserving`: trades `106 -> 121`, avg_return `2.57% -> 2.13%`, profit_factor `3.37 -> 2.90` - `alpha_first_selective_veto`: trades `102 -> 117`, avg_return `2.86% -> 2.36%`, profit_factor `4.04 -> 3.38` - `alpha_first_glued_refined_hot_cap` / RC1: trades `91 -> 106`, avg_return `3.42% -> 2.80%`, profit_factor `5.11 -> 4.08` - In all three branches the filter removal adds `15` trades and removes `0`. - Added-trade quality is weak: - avg_return about `-0.99%` - win_rate about `26.7%` - Therefore current judgment: this filter is materially useful and should be treated as a real quality filter, not noise. - Added detailed blocked-trade artifacts: - `dragon_glued_high_weak_rebound_block_review.md` - `dragon_glued_high_weak_rebound_blocked_trades.csv` - RC1 blocked-trade detail sorted by realized return shows the worst candidates were: - `2020-08-18 -> 2020-08-19` `-3.91%` - `2019-04-24 -> 2019-04-25` `-3.42%` - `2018-04-18 -> 2018-04-20` `-3.10%` - best completed blocked candidates were: - `2020-11-30 -> 2020-12-09` `+2.44%` - `2017-09-27 -> 2017-10-16` `+1.60%` - `2020-08-24 -> 2020-08-25` `+0.90%` - one extra blocked date `2025-11-13` is present as a candidate date but its corresponding exit falls outside the release-window trade summary, so it has no completed in-window trade row. - Checked the original reconstruction branch (`workbook_preserving`) on the intraday snapshot later on `2026-04-08`. - Snapshot example: - evaluated timestamp `2026-04-08T15:56:41` - close `3532.798` - `a1 = -0.0073` - `b1 = -0.0777` - `c1 = 47.86` - `KDJ buy = True` - `QL buy = True` - original branch decision was still: - `BLOCK buy_block_glued_high_weak_rebound` - User later requested the 2026 RC1 buy/sell points. - Extracted real-trade RC1 points for calendar year 2026: - `2026-01-05 BUY dual_gold_resonance_buy @ 3488.230` - `2026-01-20 SELL ql_mid_zone_take_profit @ 3419.621` - `2026-01-27 BUY glued_buy @ 3476.169` - `2026-02-02 SELL knife_take_profit_2_glued @ 3432.873` - `2026-02-09 BUY glued_buy @ 3493.591` - `2026-02-13 SELL knife_take_profit_2_glued @ 3423.045` - As of the intraday snapshot on `2026-04-08`, RC1 remains flat and no new real event has been added after `2026-02-13`. - Later analysis of why no intraday buy fired on `2026-04-08`: - the live snapshot did create raw buy markers (`KDJ buy=True`, `QL buy=True`) and satisfied glued-state entry context (`abs(a1) < 0.02`) - but the final buy decision was blocked by `buy_block_glued_high_weak_rebound` - exact subtype was `ql_rebound_weak_followthrough` - snapshot values around `2026-04-08T14:48:51`: - `a1 = -0.00779` - `b1 = -0.08157` - `c1 = 47.62` - this matched the veto window: - `35 < c1 < 55` - `b1 < -0.06` - `a1 > -0.013` - `ql_buy = True` - the move was therefore interpreted as a fast intraday rebound with still-weak followthrough rather than a confirmed real buy - Follow-up judgment on whether this may miss a real rally or reflect overfitting: - yes, any veto rule can miss an individual future rally - but current evidence does not support calling this specific filter an obvious overfit blocker - disabling `buy_block_glued_high_weak_rebound` adds `15` release-window trades and weakens all three tracked branches - RC1 added-trade set stats if allowed: - win rate about `26.7%` - avg return about `-0.99%` - best completed blocked trade only about `+2.44%` - today's exact subtype `ql_rebound_weak_followthrough` has only two historical daily examples and both were losers (`-2.20%`, `-1.04%`) - nuanced conclusion: - strategy-level overfitting risk remains medium-to-high overall because of rule-tree complexity - but today's specific veto is more likely a useful quality filter than a clear case of overfit signal suppression - remaining uncertainty is concentrated in the sparse `ql_rebound_weak_followthrough` subclause because its sample is still small - Direct advisory judgment for the user: - if forced to decide on the live `2026-04-08` snapshot, the correct call is still `do not buy yet` - do not weaken the global `buy_block_glued_high_weak_rebound` rule because of this one signal - safer future research path, if needed, is a subtype-specific second-chance release after stronger followthrough repair, not removal of the veto itself - Later nuance after the user suggested this may be the start of a big trend: - that concern is legitimate; broad neighborhood analysis around today's indicator shape is not obviously bearish - among the 12 nearest historical RC1 buy-shape neighbors to the `2026-04-08` snapshot, avg return was about `+2.09%`, median about `+1.67%`, win rate about `66.7%`, with `3` trades above `+5%` and `1` above `+10%` - however, the exact vetoed subclause neighborhood (`ql_rebound_weak_followthrough`) still has only 2 historical blocked daily examples and both were losers - operational interpretation: - there is a non-trivial chance today is an early stage of a larger move - but current evidence still does not justify overriding RC1 on this bar alone - if followthrough continues and either `B1` repairs above the current veto threshold or the setup migrates out of this weak-followthrough window, the bull case should be re-evaluated quickly rather than dismissed - Later projected tomorrow's `B1` using the latest available intraday snapshot around `2026-04-08T18:25:09` with `close = 3532.798`. - Using the current `Y2/Y3` recursion and assuming no new 38-day extreme beyond the projected close: - if tomorrow closes flat near `3532.798`, projected `B1` is about `-0.0229` - if tomorrow closes `-1%`, projected `B1` is about `-0.0421` - if tomorrow closes `-2%`, projected `B1` is about `-0.0614` - approximate threshold for `B1 >= -0.06` is tomorrow close around `3464.7`, about `-1.93%` vs the latest snapshot close - practical takeaway: - yes, under the current snapshot baseline, “tomorrow not falling” should place `B1` above `-0.06` - but that only means the current `ql_rebound_weak_followthrough` veto likely stops applying - it does not guarantee a real buy tomorrow because `KDJ buy` / `QL buy` are cross-event flags and may not re-fire on the next bar - Later reviewed the external recommendation file `dragon_v2_rc1_restructuring_recommendations_for_codex_CN.md` and wrote a local implementation proposal `dragon_v2_rc1_restructuring_proposal_cn.md`. - Main judgment on that external recommendation: - directionally correct on freezing RC1, splitting core / secondary / bridge, downgrading predictive logic, and adding golden tests - but too aggressive as a direct big-bang refactor for the current repo - key verified repo facts used in the proposal: - `dragon_strategy.py` has `1297` lines - `StrategyContext` has `50` fields - `_buy_decision()` about `125` lines - `_sell_decision()` about `303` lines - `StrategyConfig` has `102` fields - current repo still has no `tests/` directory - `reason` strings are already a de facto interface across strategy, daily pipeline, path trace, and html reporting - proposal conclusion: - do not directly rewrite RC1 or remove reason strings - first add structured decision metadata with legacy reason compatibility - first add golden baselines and layer attribution - only then isolate weak families (`deep_oversold`, `predictive`, `post_sell_rebound`) into separate modules on a research path - Executed the first implementation pass for proposal Phase 0-2 without changing RC1 live behavior. - Added governance and scaffolding modules: - `dragon_rc1_frozen_policy.md` - `dragon_reason_types.py` - `dragon_decision_types.py` - `dragon_rule_catalog.py` - Added executable scripts: - `dragon_rc1_golden_baseline.py` - `dragon_rule_layer_attribution.py` - Generated new baseline artifact: - `dragon_rc1_golden_manifest.json` - generated_at `2026-04-08T23:43:07` - evaluation window `2016-01-01 -> 2025-12-31` - RC1 trade_count `91`, event_count `272`, win_rate `52.75%`, avg_return `3.42%` - indicator source used: `dragon_indicator_snapshot_full.csv` - Generated layer-attribution report: - `dragon_rule_layer_attribution.md` - key entry-layer read: - `core/glued` remains dominant (`50` trades, avg_return `4.92%`, PF `7.15`) - `secondary/deep_oversold` remains weak (avg_return `-0.19%`, PF `0.80`) - `bridge/predictive_break` count still low (`1` entry trade in-window) - key exit-layer read: - `secondary/post_sell_rebound` exits show weak quality (avg_return `-2.00%`, PF `0.02`) - `core/high_regime` exits remain strong (avg_return `11.63%`, PF `107.38`) - mapping audit is now clean in the generated markdown (`no unknown reason mapping`) - Important repo note: - generated `.csv` artifacts from these scripts are covered by `.gitignore` (`*.csv`) and are not tracked by default - Later answered the user's question about what profitable indicator profiles look like in RC1. - Main conclusion: - the best-performing trades are not primarily deep-oversold knife catches - profitable trades are concentrated in `glued_buy`, plus smaller contributions from `early_crash_probe_buy` / `oversold_recovery_buy` - holding duration matters strongly: - `00-05d` avg return about `-2.03%` - `06-10d` avg return about `-0.81%` - `21-40d` avg return about `+6.33%` - `41d+` avg return about `+24.13%` - top-profit trades (`>=10%`) mostly look like: - `A1` near zero / mild glue rather than deeply negative - `B1` around zero to mildly positive more often than the full sample - `C1` mainly in the `20-60` middle zone rather than extreme `<20` oversold - `KDJ buy` is almost always present - `QL buy` is helpful but not mandatory - strongest actionable read: - large profits mostly come from entries that can transition into long trend holds and exit through regime/trend management (`prewarning_reduction_exit`, `crash_protection_exit`, high-regime exits), not from short rebound scalps