From 4ecc40b284f6e5040e0ed740db503f8765fa3807 Mon Sep 17 00:00:00 2001 From: Codex Date: Fri, 22 May 2026 09:08:04 +0800 Subject: [PATCH] Add doctrine model playbook kernel --- SESSION.md | 3 +- TASKS.md | 3 +- ...el_ModelPlaybookKernel_D6_2026-05-22_v1.md | 89 ++++ ...playbook-strategy-backtest-fullpage-zh.png | Bin 0 -> 232942 bytes src/api/backtest.py | 34 ++ src/api/server.py | 4 + src/services/backtest/backtest_service.py | 88 ++++ src/services/ict_mainline/__init__.py | 12 + src/services/ict_mainline/doctrine.py | 411 ++++++++++++++++++ src/web/app.js | 40 +- src/web/i18n.js | 39 +- tests/unit/test_api_and_main.py | 20 + tests/unit/test_api_server.py | 16 + tests/unit/test_backtest_service.py | 12 + tests/unit/test_documentation_consistency.py | 1 + tests/unit/test_ict_doctrine.py | 68 +++ 16 files changed, 835 insertions(+), 5 deletions(-) create mode 100644 docs/AI_ICT_DoctrineKernel_ModelPlaybookKernel_D6_2026-05-22_v1.md create mode 100644 output/playwright/d6-model-playbook-strategy-backtest-fullpage-zh.png diff --git a/SESSION.md b/SESSION.md index 7828198..169b3f1 100644 --- a/SESSION.md +++ b/SESSION.md @@ -850,10 +850,11 @@ Automation execution-layer PXX remains closed and its known scope stays frozen. - D3 Liquidity Kernel is complete locally: added `DOCTRINE_LIQUIDITY_PHASE=D3_LIQUIDITY_KERNEL`, `LiquidityTargetRule`, `GET /trading/liquidity-kernel`, Strategy Backtest `liquidity_backtest_features` / `liquidity_kernel_status` / `liquidity_kernel_summary`, and `docs/AI_ICT_DoctrineKernel_LiquidityKernel_D3_2026-05-21_v1.md`. BSL / SSL / liquidity pool / stop run / sweep / raid are now target-ranking and no-trade/wait rules; `sweep_is_not_setup`, `missing_liquidity_target`, `missing_liquidity_pool`, `missing_working_draw`, and `manipulation_window_wait` block promotion until the Working Draw, ranked pool, post-take reaction, and objective reorder evidence are present. No execution/readiness/risk/trust/operator-confirmation gate was changed. - D4 PD Array / Reaction Kernel is complete, deployed, and remote-verified: added `DOCTRINE_REACTION_PHASE=D4_PD_ARRAY_REACTION_KERNEL`, `PdArrayReactionRule`, `GET /trading/pd-array-kernel`, Strategy Backtest `pd_array_backtest_features` / `pd_array_reaction_status` / `pd_array_reaction_summary`, and `docs/AI_ICT_DoctrineKernel_PDArrayReactionKernel_D4_2026-05-22_v1.md`. FVG / OB / Breaker / Mitigation / BPR/Rebalancing now stay reaction-location quality rankings rather than direction tags; `missing_pd_array`, `missing_pd_array_role`, `missing_array_location`, `fvg_is_not_setup`, `order_block_not_authorized`, and `breaker_without_failure_precondition` block promotion until role, rank, location, freshness, origin, reaction/retest, and invalidation are explicit. Validation passed focused D4/API/backtest/docs tests, full unit discovery (`839` tests), script static checks (`79` scripts), JS syntax checks, deploy smoke over 11 endpoints, remote ops smoke, read-only live analysis smoke, `/trading/pd-array-kernel` field smoke, `/trading/backtests` D4 field smoke, and Playwright screenshot evidence at `output/playwright/d4-pd-array-strategy-backtest-1366x768.png`. The read-only smoke initially exposed the expected external proxy blocker; starting the local v2rayN/sing-box proxy restored `192.168.3.73:10808` and the gate passed. No execution/readiness/risk/trust/operator-confirmation gate was changed. - D5 Time / Session Kernel is complete, deployed, and remote-verified: added `DOCTRINE_SESSION_PHASE=D5_TIME_SESSION_KERNEL`, `TimeSessionRule`, `GET /trading/time-session-kernel`, Strategy Backtest `time_session_backtest_features` / `time_session_kernel_status` / `time_session_kernel_summary`, and `docs/AI_ICT_DoctrineKernel_TimeSessionKernel_D5_2026-05-22_v1.md`. Asia / London / NY AM / NY PM, killzone, Judas/manipulation window, opening range, weekly profile, and news/no-trade time are now measurable session-quality gates; `missing_session_window`, `session_window_unverified`, `outside_session_window`, `session_not_allowed`, `missing_killzone`, `killzone_not_active`, `judas_window_wait`, `opening_range_unresolved`, `weekly_profile_missing`, `news_time_no_trade`, and `session_invalidation_missing` block promotion until timing is explicit. Validation passed focused D5/API/backtest/docs tests, full unit discovery (`846` tests), script static checks (`79` scripts), secret static checks, JS syntax checks, deploy smoke over 11 endpoints, remote ops smoke, read-only live analysis smoke, `/trading/time-session-kernel` field smoke, `/trading/backtests` D5 field smoke, and Playwright screenshot evidence at `output/playwright/d5-time-session-strategy-backtest-1366x768.png`. Remote latest backtest `#513` is correctly blocked by D5 as `study_only / session_window_unverified` instead of treating `ASIA` plus `mark_outside` as a verified session window. No execution/readiness/risk/trust/operator-confirmation gate was changed. +- D6 Model Playbook Kernel is complete, deployed, and remote-verified: added `DOCTRINE_MODEL_PLAYBOOK_PHASE=D6_MODEL_PLAYBOOK_KERNEL`, `ModelPlaybookRule`, `GET /trading/model-playbook-kernel`, Strategy Backtest `model_playbook_backtest_features` / `model_playbook_kernel_status` / `model_playbook_kernel_summary`, and `docs/AI_ICT_DoctrineKernel_ModelPlaybookKernel_D6_2026-05-22_v1.md`. Raw `model_code` values such as `SWEEP_MSS_FVG` now stay `study_only` until they resolve to a registered setup playbook with explicit Range / Draw / Liquidity / PD Array / Session / Confirmation / Invalidation / Target, batch cohort, quality-gate, journal-feedback, and operator-runbook contracts. Validation passed focused D6/API/backtest/docs tests, full unit discovery (`853` tests), script static checks (`79` scripts), secret static checks, JS syntax checks, deploy smoke over 11 endpoints, remote ops smoke, read-only live analysis smoke, `/trading/model-playbook-kernel` field smoke, `/trading/backtests` D6 field smoke, and Playwright screenshot evidence at `output/playwright/d6-model-playbook-strategy-backtest-fullpage-zh.png`. Remote latest backtest `#513` is correctly blocked by D6 as `study_only / missing_model_playbook` instead of promoting a surface-shape model as a tradeable setup. No execution/readiness/risk/trust/operator-confirmation gate was changed. ## Exact Next Step -Use `docs/AI_ICT_DoctrineKernel全书规则内核重建_D0_2026-05-21_v1.md`, `docs/AI_ICT_DoctrineKernel市场语言规则内核_D1_2026-05-21_v1.md`, `docs/AI_ICT_DoctrineKernel_PlaybookBacktestCohort_D2_2026-05-21_v1.md`, `docs/AI_ICT_DoctrineKernel_LiquidityKernel_D3_2026-05-21_v1.md`, `docs/AI_ICT_DoctrineKernel_PDArrayReactionKernel_D4_2026-05-22_v1.md`, `docs/AI_ICT_DoctrineKernel_TimeSessionKernel_D5_2026-05-22_v1.md`, `docs/ICT交易全书_出版终校版.md`, `docs/AI_ICT_实盘辅助分析决策助手ICT主线开发方案_2026-05-21_v1.md`, `docs/AI_ICT_批量历史回测验证_S16_2026-05-21_v1.md`, `SESSION.md`, and `TASKS.md` as the active anchors. Start D6 Model Playbook Kernel: convert the book-derived models into full setup playbooks with required Range / Draw / Liquidity / PD Array / Session / Confirmation / Invalidation / Target fields and batch-backtest cohorts. Do not restart external-context/archive/digest long-tail work, do not add order-submission features, do not physically delete S1 deprecated surfaces yet, and do not fabricate R2 paper samples from blocked candidates. Keep `execution_allowed`, `decision_support_ready`, `real_live_ready`, risk governor, trust bucket, and operator confirmation protocol unchanged. +Use `docs/AI_ICT_DoctrineKernel全书规则内核重建_D0_2026-05-21_v1.md`, `docs/AI_ICT_DoctrineKernel市场语言规则内核_D1_2026-05-21_v1.md`, `docs/AI_ICT_DoctrineKernel_PlaybookBacktestCohort_D2_2026-05-21_v1.md`, `docs/AI_ICT_DoctrineKernel_LiquidityKernel_D3_2026-05-21_v1.md`, `docs/AI_ICT_DoctrineKernel_PDArrayReactionKernel_D4_2026-05-22_v1.md`, `docs/AI_ICT_DoctrineKernel_TimeSessionKernel_D5_2026-05-22_v1.md`, `docs/AI_ICT_DoctrineKernel_ModelPlaybookKernel_D6_2026-05-22_v1.md`, `docs/ICT交易全书_出版终校版.md`, `docs/AI_ICT_硬性主线约束_必须遵循ICT交易全书_2026-05-21_v1.md`, `docs/AI_ICT_实盘辅助分析决策助手ICT主线开发方案_2026-05-21_v1.md`, `docs/AI_ICT_批量历史回测验证_S16_2026-05-21_v1.md`, `SESSION.md`, and `TASKS.md` as the active anchors. Start D7 Trader Product Rebuild / Playbook Promotion Gate: only playbook-mapped, backtest-supported, plan-approved setups can re-enter Trader Cockpit focus; keep study-only evidence in Strategy Backtest / Study Notes / System Ops, not trader-facing Review Now. Do not restart external-context/archive/digest long-tail work, do not add order-submission features, do not physically delete S1 deprecated surfaces yet, and do not fabricate R2 paper samples from blocked candidates. Keep `execution_allowed`, `decision_support_ready`, `real_live_ready`, risk governor, trust bucket, and operator confirmation protocol unchanged. ## Validation Commands Used Recently diff --git a/TASKS.md b/TASKS.md index b5743ba..12ad229 100644 --- a/TASKS.md +++ b/TASKS.md @@ -957,7 +957,8 @@ - [x] D3 Liquidity Kernel: rebuilt BSL / SSL / liquidity pool / stop run / sweep / raid from shape labels into target-ranking and no-trade/wait rules; sweep remains evidence component only, Strategy Backtest exposes liquidity features/status/summary, and `/trading/liquidity-kernel` exposes the D3 registry - [x] D4 PD Array / Reaction Kernel: rebuilt FVG / OB / Breaker / Mitigation / Rebalance / Void into reaction-location quality ranking and no-trade/wait rules; PD Array remains location/reaction evidence only, Strategy Backtest exposes PD Array features/status/summary, `/trading/pd-array-kernel` exposes the D4 registry, and remote deploy/ops/read-only smoke passed after the local proxy was restarted - [x] D5 Time / Session Kernel: rebuilt Asia / London / NY AM / NY PM / killzone / Judas window / opening range / weekly profile / news time into measurable session-quality gates instead of loose time labels; Strategy Backtest now exposes `time_session_backtest_features`, `time_session_kernel_status`, `time_session_kernel_summary`, and `/trading/time-session-kernel` without changing execution/readiness gates -- [ ] D6 next product gate: rebuild Model Playbook Kernel so book-derived models become full setup playbooks with required Range / Draw / Liquidity / PD Array / Session / Confirmation / Invalidation / Target fields and batch-backtest cohorts +- [x] D6 Model Playbook Kernel: raw model codes now stay study-only until they resolve to registered setup playbooks with Range / Draw / Liquidity / PD Array / Session / Confirmation / Invalidation / Target, batch-cohort, quality-gate, journal-feedback, and operator-runbook contracts; Strategy Backtest exposes D6 features/status/summary and `/trading/model-playbook-kernel` exposes the D6 registry without changing execution/readiness gates +- [ ] D7 Trader Product Rebuild / Playbook Promotion Gate: only playbook-mapped, backtest-supported, plan-approved setups may re-enter Trader Cockpit focus; keep study-only evidence in Strategy Backtest / Study Notes / System Ops rather than Review Now - [x] R3 OKX sandbox isolated smoke tooling: guarded script and service can call OKX demo submit/query/cancel/query/fills only when `OKX_SANDBOX_SMOKE_EXECUTE=1`; local validation, deploy smoke, and remote ops smoke passed - [ ] R3 sandbox credential permission gate deferred: current phase is assisted analysis / decision support only, so do not request trade-permission credentials or make submit/cancel smoke the next gate - [ ] Long-term target: complete `Real-time Assisted Trading V1` without enabling default live auto-trading diff --git a/docs/AI_ICT_DoctrineKernel_ModelPlaybookKernel_D6_2026-05-22_v1.md b/docs/AI_ICT_DoctrineKernel_ModelPlaybookKernel_D6_2026-05-22_v1.md new file mode 100644 index 0000000..aea749f --- /dev/null +++ b/docs/AI_ICT_DoctrineKernel_ModelPlaybookKernel_D6_2026-05-22_v1.md @@ -0,0 +1,89 @@ +# AI_ICT Doctrine Kernel Model Playbook Kernel D6 2026-05-22 v1 + +## Scope + +D6 rebuilds model identity from raw shape labels into book-derived setup playbooks. It follows `docs/ICT交易全书_出版终校版.md` and the hard mainline chain: + +`Range / Draw / Location -> Liquidity / Sweep / Inducement / Path -> Displacement / MSS / FVG / Retest / Session -> backtest evidence -> pre-market plan -> intraday unique focus or no-trade reason -> journal / study-notes feedback`. + +## Product Rule + +Raw `model_code` values such as `SWEEP_MSS_FVG` or `OSOK_DAILY_RANGE_SWEEP_MSS_FVG_RETRACE` are not tradable setups. They can remain historical research material, but they cannot support Trader Cockpit `Review Now` unless they resolve into a registered full-chain setup playbook. + +Every model playbook must declare: + +- Range contract +- Draw contract +- Liquidity contract +- PD Array contract +- Session contract +- Confirmation / trigger contract +- Invalidation contract +- Target / management contract +- Batch backtest cohort +- Journal / study-note feedback contract + +If any contract is missing, Strategy Backtest and Trader Cockpit must keep the setup as `study_only` or `wait`. + +## Implemented Kernel + +New phase: + +- `DOCTRINE_MODEL_PLAYBOOK_PHASE = D6_MODEL_PLAYBOOK_KERNEL` + +New registry/API: + +- `ModelPlaybookRule` +- `D6_MODEL_PLAYBOOK_RULES` +- `build_model_playbook_kernel_registry` +- `list_model_playbook_rules` +- `GET /trading/model-playbook-kernel` + +New backtest surface fields: + +- `model_playbook_backtest_features` +- `model_playbook_kernel_status` +- `model_playbook_kernel_summary` +- `model_playbook_kernel_status_counts` +- `model_playbook_kernel_reason_counts` +- `by_model_playbook` + +## D6 Rules + +1. `model_family_declared` + A model must point to a registered book-derived playbook before any backtest result can be trusted. + +2. `full_chain_contract_complete` + A playbook must define Range, Draw, Liquidity, PD Array, Session, Confirmation, Invalidation, and Target contracts. + +3. `confirmation_trigger_bound` + Displacement / MSS / FVG / Retest can confirm only after they serve the declared Draw. + +4. `risk_target_contract_bound` + Invalidation and IRL / ERL target architecture must be explicit before promotion. + +5. `batch_cohort_contract_ready` + Backtest evidence must be grouped by playbook cohort, not raw model code. + +6. `journal_feedback_contract_ready` + Every model failure must map back to journal and study-note error classes. + +## Promotion Gate + +The Doctrine Backtest Cohort now blocks promotion unless: + +- D2 playbook schema is complete, +- D3 Liquidity Kernel passes, +- D4 PD Array / Reaction Kernel passes, +- D5 Time / Session Kernel passes, +- D6 Model Playbook Kernel passes, +- Strategy Backtest quality gate passes, +- active Trading Plan gate passes. + +## Read-Only Boundary + +D6 does not add order submission, does not change `execution_allowed`, does not change `decision_support_ready`, does not change `real_live_ready`, and does not loosen risk governor / trust bucket / operator confirmation protocol. + +## Next Slice + +D7 should rebuild the trader-facing product gate: only playbook-mapped, backtest-supported, plan-approved setups can re-enter Trader Cockpit focus; all other evidence should remain under Strategy Backtest / Trading Plan / Journal / System Ops as study material. diff --git a/output/playwright/d6-model-playbook-strategy-backtest-fullpage-zh.png b/output/playwright/d6-model-playbook-strategy-backtest-fullpage-zh.png new file mode 100644 index 0000000000000000000000000000000000000000..725e93617e581838b2d7edd4ae98a5426dcbb87c GIT binary patch literal 232942 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 Lix-K#_Wu6>UKItb literal 0 HcmV?d00001 diff --git a/src/api/backtest.py b/src/api/backtest.py index de81e4f..af4b03f 100644 --- a/src/api/backtest.py +++ b/src/api/backtest.py @@ -8,17 +8,20 @@ from src.services.backtest import evaluate_backtest_quality from src.services.ict_mainline import ( build_doctrine_backtest_cohort, build_liquidity_backtest_features, + build_model_playbook_backtest_features, build_pd_array_backtest_features, build_time_session_backtest_features, build_backtest_quality_gate, build_ict_rulebook_mapping, evaluate_doctrine_research_status, evaluate_liquidity_kernel_status, + evaluate_model_playbook_kernel_status, evaluate_pd_array_reaction_status, evaluate_time_session_kernel_status, summarize_doctrine_backtest_cohorts, summarize_doctrine_rule_gaps, summarize_liquidity_kernel_statuses, + summarize_model_playbook_kernel_statuses, summarize_pd_array_reaction_statuses, summarize_time_session_kernel_statuses, ) @@ -45,6 +48,7 @@ def get_strategy_backtest_surface(instrument_id: Optional[int] = None, limit: in liquidity_kernel_summary = summarize_liquidity_kernel_statuses(items) pd_array_reaction_summary = summarize_pd_array_reaction_statuses(items) time_session_kernel_summary = summarize_time_session_kernel_statuses(items) + model_playbook_kernel_summary = summarize_model_playbook_kernel_statuses(items) return { "instrument_id": instrument_id, "item_count": len(items), @@ -57,6 +61,7 @@ def get_strategy_backtest_surface(instrument_id: Optional[int] = None, limit: in "liquidity_kernel_summary": liquidity_kernel_summary, "pd_array_reaction_summary": pd_array_reaction_summary, "time_session_kernel_summary": time_session_kernel_summary, + "model_playbook_kernel_summary": model_playbook_kernel_summary, "ict_rulebook_mapping": ict_rulebook_mapping, "items": items, } @@ -183,6 +188,25 @@ def normalize_backtest_summary_row(row: dict) -> dict: "time_session_backtest_features": time_session_backtest_features, } ) + model_playbook_backtest_features = build_model_playbook_backtest_features( + { + "subject_type": row.get("subject_type"), + "model_code": row.get("model_code"), + "candidate_model_code": row.get("candidate_model_code"), + "config": config, + "summary": summary, + } + ) + model_playbook_kernel_status = evaluate_model_playbook_kernel_status( + { + "subject_type": row.get("subject_type"), + "model_code": row.get("model_code"), + "candidate_model_code": row.get("candidate_model_code"), + "config": config, + "summary": summary, + "model_playbook_backtest_features": model_playbook_backtest_features, + } + ) doctrine_backtest_cohort = build_doctrine_backtest_cohort( { "subject_type": row.get("subject_type"), @@ -194,6 +218,7 @@ def normalize_backtest_summary_row(row: dict) -> dict: "liquidity_backtest_features": liquidity_backtest_features, "pd_array_backtest_features": pd_array_backtest_features, "time_session_backtest_features": time_session_backtest_features, + "model_playbook_backtest_features": model_playbook_backtest_features, }, quality_gate=dict(summary.get("quality_gate") or {}), ) @@ -210,6 +235,8 @@ def normalize_backtest_summary_row(row: dict) -> dict: "pd_array_reaction_status": pd_array_reaction_status, "time_session_backtest_features": time_session_backtest_features, "time_session_kernel_status": time_session_kernel_status, + "model_playbook_backtest_features": model_playbook_backtest_features, + "model_playbook_kernel_status": model_playbook_kernel_status, "doctrine_backtest_cohort": doctrine_backtest_cohort, } @@ -261,6 +288,13 @@ def _build_operator_summary(latest: Optional[dict]) -> dict: status = "time_session_kernel_blocked" decision = "do_not_promote_strategy" reason = str(time_session_reasons[0]) + model_playbook_status = dict(latest.get("model_playbook_kernel_status") or {}) + if not model_playbook_status.get("passed"): + model_playbook_reasons = list(model_playbook_status.get("reasons") or []) + if model_playbook_reasons: + status = "model_playbook_kernel_blocked" + decision = "do_not_promote_strategy" + reason = str(model_playbook_reasons[0]) if not (doctrine_cohort.get("promotion_gate") or {}).get("passed"): cohort_reasons = list((doctrine_cohort.get("promotion_gate") or {}).get("reasons") or []) if cohort_reasons: diff --git a/src/api/server.py b/src/api/server.py index 70c1f26..2566a3e 100644 --- a/src/api/server.py +++ b/src/api/server.py @@ -126,6 +126,7 @@ from src.services.ict_mainline import ( build_doctrine_playbook_registry, build_doctrine_rule_matrix, build_liquidity_kernel_registry, + build_model_playbook_kernel_registry, build_pd_array_reaction_registry, build_time_session_kernel_registry, ) @@ -233,6 +234,7 @@ def build_api_dependencies() -> dict: "trading_liquidity_kernel": build_liquidity_kernel_registry, "trading_pd_array_kernel": build_pd_array_reaction_registry, "trading_time_session_kernel": build_time_session_kernel_registry, + "trading_model_playbook_kernel": build_model_playbook_kernel_registry, "training_cases": get_training_cases, "training_case": get_training_case, "training_export_cases": export_training_case_package, @@ -864,6 +866,8 @@ def route_request( return 200, deps["trading_pd_array_kernel"]() if method == "GET" and path == "/trading/time-session-kernel": return 200, deps["trading_time_session_kernel"]() + if method == "GET" and path == "/trading/model-playbook-kernel": + return 200, deps["trading_model_playbook_kernel"]() if method == "GET" and len(path_parts) == 3 and path_parts[:2] == ["trading", "candidates"]: candidate = deps["trading_candidate_by_id"](_parse_path_int(path_parts[2], "candidate_id")) if candidate is None: diff --git a/src/services/backtest/backtest_service.py b/src/services/backtest/backtest_service.py index faf4f11..375974f 100644 --- a/src/services/backtest/backtest_service.py +++ b/src/services/backtest/backtest_service.py @@ -7,9 +7,11 @@ from src.services.backtest.replay import ReplaySwing, iter_historical_replay from src.services.ict_mainline import ( build_doctrine_backtest_cohort, build_liquidity_backtest_features, + build_model_playbook_backtest_features, build_pd_array_backtest_features, build_time_session_backtest_features, evaluate_liquidity_kernel_status, + evaluate_model_playbook_kernel_status, evaluate_pd_array_reaction_status, evaluate_time_session_kernel_status, extract_setup_playbook_id, @@ -167,6 +169,17 @@ class BacktestService: 'active_trading_plan': active_trading_plan, } ) + model_playbook_backtest_features = build_model_playbook_backtest_features( + { + 'subject_type': subject_type, + 'model_code': 'SWEEP_MSS_FVG', + 'candidate_model_code': candidate_model_code, + 'timeframe_set': timeframe_set, + 'session_codes': list(session_codes or []), + 'run_metadata': run_metadata, + 'active_trading_plan': active_trading_plan, + } + ) doctrine_backtest_cohort = build_doctrine_backtest_cohort( { 'subject_type': subject_type, @@ -177,6 +190,7 @@ class BacktestService: 'liquidity_backtest_features': liquidity_backtest_features, 'pd_array_backtest_features': pd_array_backtest_features, 'time_session_backtest_features': time_session_backtest_features, + 'model_playbook_backtest_features': model_playbook_backtest_features, } ) run_id = self.repository.insert_backtest_run( @@ -205,6 +219,8 @@ class BacktestService: 'pd_array_reaction_status': evaluate_pd_array_reaction_status(pd_array_backtest_features), 'time_session_backtest_features': time_session_backtest_features, 'time_session_kernel_status': evaluate_time_session_kernel_status(time_session_backtest_features), + 'model_playbook_backtest_features': model_playbook_backtest_features, + 'model_playbook_kernel_status': evaluate_model_playbook_kernel_status(model_playbook_backtest_features), 'doctrine_backtest_cohort': doctrine_backtest_cohort, 'run_metadata': run_metadata, }, @@ -227,12 +243,15 @@ class BacktestService: outcome_liquidity_features = _first_outcome_meta_value(outcomes, 'liquidity_backtest_features') or liquidity_backtest_features outcome_pd_array_features = _first_outcome_meta_value(outcomes, 'pd_array_backtest_features') or pd_array_backtest_features outcome_time_session_features = _first_outcome_meta_value(outcomes, 'time_session_backtest_features') or time_session_backtest_features + outcome_model_playbook_features = _first_outcome_meta_value(outcomes, 'model_playbook_backtest_features') or model_playbook_backtest_features summary['liquidity_backtest_features'] = dict(outcome_liquidity_features or {}) summary['liquidity_kernel_status'] = evaluate_liquidity_kernel_status(summary['liquidity_backtest_features']) summary['pd_array_backtest_features'] = dict(outcome_pd_array_features or {}) summary['pd_array_reaction_status'] = evaluate_pd_array_reaction_status(summary['pd_array_backtest_features']) summary['time_session_backtest_features'] = dict(outcome_time_session_features or {}) summary['time_session_kernel_status'] = evaluate_time_session_kernel_status(summary['time_session_backtest_features']) + summary['model_playbook_backtest_features'] = dict(outcome_model_playbook_features or {}) + summary['model_playbook_kernel_status'] = evaluate_model_playbook_kernel_status(summary['model_playbook_backtest_features']) summary['doctrine_backtest_cohort'] = build_doctrine_backtest_cohort( { 'subject_type': subject_type, @@ -244,6 +263,7 @@ class BacktestService: 'liquidity_backtest_features': summary['liquidity_backtest_features'], 'pd_array_backtest_features': summary['pd_array_backtest_features'], 'time_session_backtest_features': summary['time_session_backtest_features'], + 'model_playbook_backtest_features': summary['model_playbook_backtest_features'], }, quality_gate=summary['quality_gate'], ) @@ -297,6 +317,15 @@ class BacktestService: 'session_filter': 'outside_window' if len(sessions) == 0 else 'covered', } ) + signal_model_playbook_features = build_model_playbook_backtest_features( + { + 'signal': signal, + 'target_plan': target_plan, + 'run_metadata': run_metadata, + 'timeframe_set': timeframe_set, + 'session_codes': session_codes, + } + ) error_tags = ['no_future_candles'] if len(sessions) == 0: error_tags.append('outside_session_window') @@ -339,6 +368,8 @@ class BacktestService: 'pd_array_reaction_status': evaluate_pd_array_reaction_status(signal_pd_array_features), 'time_session_backtest_features': signal_time_session_features, 'time_session_kernel_status': evaluate_time_session_kernel_status(signal_time_session_features), + 'model_playbook_backtest_features': signal_model_playbook_features, + 'model_playbook_kernel_status': evaluate_model_playbook_kernel_status(signal_model_playbook_features), 'cost_r': 0.0, 'cost_model': cost_config.__dict__, 'backtest_mode': mode, @@ -438,12 +469,22 @@ class BacktestService: 'session_filter': 'outside_window' if session_filtered else 'covered', } ), + 'model_playbook_backtest_features': build_model_playbook_backtest_features( + { + 'signal': signal, + 'target_plan': extract_target_plan_from_signal_row(signal), + 'run_metadata': run_metadata, + 'timeframe_set': timeframe_set, + 'session_codes': session_codes, + } + ), 'weekday': _extract_weekday(signal['created_ts']), } ) record.meta['liquidity_kernel_status'] = evaluate_liquidity_kernel_status(record.meta['liquidity_backtest_features']) record.meta['pd_array_reaction_status'] = evaluate_pd_array_reaction_status(record.meta['pd_array_backtest_features']) record.meta['time_session_kernel_status'] = evaluate_time_session_kernel_status(record.meta['time_session_backtest_features']) + record.meta['model_playbook_kernel_status'] = evaluate_model_playbook_kernel_status(record.meta['model_playbook_backtest_features']) outcomes.append(record) self.repository.insert_backtest_result( backtest_run_id=run_id, @@ -465,12 +506,15 @@ class BacktestService: outcome_liquidity_features = _first_outcome_meta_value(outcomes, 'liquidity_backtest_features') or liquidity_backtest_features outcome_pd_array_features = _first_outcome_meta_value(outcomes, 'pd_array_backtest_features') or pd_array_backtest_features outcome_time_session_features = _first_outcome_meta_value(outcomes, 'time_session_backtest_features') or time_session_backtest_features + outcome_model_playbook_features = _first_outcome_meta_value(outcomes, 'model_playbook_backtest_features') or model_playbook_backtest_features summary['liquidity_backtest_features'] = dict(outcome_liquidity_features or {}) summary['liquidity_kernel_status'] = evaluate_liquidity_kernel_status(summary['liquidity_backtest_features']) summary['pd_array_backtest_features'] = dict(outcome_pd_array_features or {}) summary['pd_array_reaction_status'] = evaluate_pd_array_reaction_status(summary['pd_array_backtest_features']) summary['time_session_backtest_features'] = dict(outcome_time_session_features or {}) summary['time_session_kernel_status'] = evaluate_time_session_kernel_status(summary['time_session_backtest_features']) + summary['model_playbook_backtest_features'] = dict(outcome_model_playbook_features or {}) + summary['model_playbook_kernel_status'] = evaluate_model_playbook_kernel_status(summary['model_playbook_backtest_features']) summary['doctrine_backtest_cohort'] = build_doctrine_backtest_cohort( { 'subject_type': subject_type, @@ -482,6 +526,7 @@ class BacktestService: 'liquidity_backtest_features': summary['liquidity_backtest_features'], 'pd_array_backtest_features': summary['pd_array_backtest_features'], 'time_session_backtest_features': summary['time_session_backtest_features'], + 'model_playbook_backtest_features': summary['model_playbook_backtest_features'], }, quality_gate=summary['quality_gate'], ) @@ -1072,6 +1117,22 @@ def build_plan_replay_units(candidate_rows: list[dict]) -> list[dict]: } ) time_session_kernel_status = evaluate_time_session_kernel_status(time_session_backtest_features) + model_playbook_backtest_features = build_model_playbook_backtest_features( + { + 'first_candidate': first, + 'latest_candidate': latest, + 'confirmed_candidate': confirmed_row or {}, + 'entry_payload': entry_payload, + 'target_plan': target_plan, + 'setup_playbook_id': setup_playbook_id, + 'candidate_model_code': first.get('candidate_model_code'), + 'timeframe_set': { + 'setup_tf': first.get('setup_timeframe'), + 'trigger_tf': first.get('trigger_timeframe'), + }, + } + ) + model_playbook_kernel_status = evaluate_model_playbook_kernel_status(model_playbook_backtest_features) doctrine_backtest_cohort = build_doctrine_backtest_cohort( { 'setup_playbook_id': setup_playbook_id, @@ -1083,6 +1144,7 @@ def build_plan_replay_units(candidate_rows: list[dict]) -> list[dict]: 'liquidity_backtest_features': liquidity_backtest_features, 'pd_array_backtest_features': pd_array_backtest_features, 'time_session_backtest_features': time_session_backtest_features, + 'model_playbook_backtest_features': model_playbook_backtest_features, } ) units.append( @@ -1097,6 +1159,8 @@ def build_plan_replay_units(candidate_rows: list[dict]) -> list[dict]: 'pd_array_reaction_status': pd_array_reaction_status, 'time_session_backtest_features': time_session_backtest_features, 'time_session_kernel_status': time_session_kernel_status, + 'model_playbook_backtest_features': model_playbook_backtest_features, + 'model_playbook_kernel_status': model_playbook_kernel_status, 'candidate_model_code': first.get('candidate_model_code'), 'side': first.get('side'), 'session_code': first.get('session_code'), @@ -1190,6 +1254,14 @@ def build_plan_replay_meta( } ) time_session_kernel_status = evaluate_time_session_kernel_status(time_session_backtest_features) + model_playbook_backtest_features = build_model_playbook_backtest_features( + { + 'unit': unit, + 'model_playbook_backtest_features': dict(unit.get('model_playbook_backtest_features') or {}), + 'timeframe_set': timeframe_set, + } + ) + model_playbook_kernel_status = evaluate_model_playbook_kernel_status(model_playbook_backtest_features) return { 'subject_type': BACKTEST_SUBJECT_PLAN_REPLAY, 'trading_plan_id': unit.get('trading_plan_id'), @@ -1203,6 +1275,8 @@ def build_plan_replay_meta( 'pd_array_reaction_status': dict(unit.get('pd_array_reaction_status') or {}), 'time_session_backtest_features': time_session_backtest_features, 'time_session_kernel_status': time_session_kernel_status, + 'model_playbook_backtest_features': model_playbook_backtest_features, + 'model_playbook_kernel_status': model_playbook_kernel_status, 'plan_activated_ts': _normalize_meta_ts(unit.get('plan_activated_ts')), 'plan_created_ts': _normalize_meta_ts(unit.get('plan_created_ts')), 'candidate_id': unit.get('candidate_id'), @@ -1392,6 +1466,7 @@ def summarize_backtest_outcomes(outcomes: list[BacktestOutcome], subject_type: s grouped_by_liquidity_target_side: dict[str, dict] = {} grouped_by_pd_array_type: dict[str, dict] = {} grouped_by_time_session_code: dict[str, dict] = {} + grouped_by_model_playbook: dict[str, dict] = {} r_multiples: list[float] = [] cost_values: list[float] = [] mfe_r_values: list[float] = [] @@ -1408,6 +1483,8 @@ def summarize_backtest_outcomes(outcomes: list[BacktestOutcome], subject_type: s pd_array_reaction_status_counts: dict[str, int] = {} time_session_kernel_reason_counts: dict[str, int] = {} time_session_kernel_status_counts: dict[str, int] = {} + model_playbook_kernel_reason_counts: dict[str, int] = {} + model_playbook_kernel_status_counts: dict[str, int] = {} plan_total_r: dict[int, float] = {} plan_seen: set[int] = set() @@ -1464,6 +1541,13 @@ def summarize_backtest_outcomes(outcomes: list[BacktestOutcome], subject_type: s time_session_kernel_status_counts[time_session_status_key] = time_session_kernel_status_counts.get(time_session_status_key, 0) + 1 for reason in list(time_session_status.get('reasons') or []): time_session_kernel_reason_counts[str(reason)] = time_session_kernel_reason_counts.get(str(reason), 0) + 1 + model_playbook_features = dict(outcome.meta.get('model_playbook_backtest_features') or {}) + model_playbook_id = str(model_playbook_features.get('model_playbook_id') or outcome.meta.get('setup_playbook_id') or 'missing_model_playbook') + model_playbook_status = dict(outcome.meta.get('model_playbook_kernel_status') or evaluate_model_playbook_kernel_status(model_playbook_features)) + model_playbook_status_key = str(model_playbook_status.get('status') or 'unknown') + model_playbook_kernel_status_counts[model_playbook_status_key] = model_playbook_kernel_status_counts.get(model_playbook_status_key, 0) + 1 + for reason in list(model_playbook_status.get('reasons') or []): + model_playbook_kernel_reason_counts[str(reason)] = model_playbook_kernel_reason_counts.get(str(reason), 0) + 1 r_multiples.append(float(outcome.meta.get('r_multiple') or 0.0)) cost_values.append(float(outcome.meta.get('cost_r') or 0.0)) mfe_r_values.append(float(outcome.meta.get('mfe_r') or 0.0)) @@ -1477,6 +1561,7 @@ def summarize_backtest_outcomes(outcomes: list[BacktestOutcome], subject_type: s _accumulate_bucket(grouped_by_liquidity_target_side, liquidity_target_side, outcome) _accumulate_bucket(grouped_by_pd_array_type, pd_array_type, outcome) _accumulate_bucket(grouped_by_time_session_code, time_session_code, outcome) + _accumulate_bucket(grouped_by_model_playbook, model_playbook_id, outcome) for session_code in session_codes: _accumulate_bucket(grouped_by_session, str(session_code), outcome) @@ -1513,6 +1598,8 @@ def summarize_backtest_outcomes(outcomes: list[BacktestOutcome], subject_type: s 'pd_array_reaction_reason_counts': pd_array_reaction_reason_counts, 'time_session_kernel_status_counts': time_session_kernel_status_counts, 'time_session_kernel_reason_counts': time_session_kernel_reason_counts, + 'model_playbook_kernel_status_counts': model_playbook_kernel_status_counts, + 'model_playbook_kernel_reason_counts': model_playbook_kernel_reason_counts, 'avg_mfe': _average([outcome.mfe for outcome in outcomes]), 'avg_mae': _average([outcome.mae for outcome in outcomes]), 'avg_mfe_r': _average(mfe_r_values), @@ -1534,6 +1621,7 @@ def summarize_backtest_outcomes(outcomes: list[BacktestOutcome], subject_type: s 'by_liquidity_target_side': grouped_by_liquidity_target_side, 'by_pd_array_type': grouped_by_pd_array_type, 'by_time_session_code': grouped_by_time_session_code, + 'by_model_playbook': grouped_by_model_playbook, } result['session_performance'] = result['by_session'] return result diff --git a/src/services/ict_mainline/__init__.py b/src/services/ict_mainline/__init__.py index dc534ef..efbade2 100644 --- a/src/services/ict_mainline/__init__.py +++ b/src/services/ict_mainline/__init__.py @@ -20,21 +20,25 @@ from src.services.ict_mainline.feedback import ( from src.services.ict_mainline.doctrine import ( DOCTRINE_KERNEL_PHASE, DOCTRINE_LIQUIDITY_PHASE, + DOCTRINE_MODEL_PLAYBOOK_PHASE, DOCTRINE_PLAYBOOK_PHASE, DOCTRINE_REACTION_PHASE, DOCTRINE_SESSION_PHASE, build_doctrine_backtest_cohort, build_liquidity_backtest_features, + build_model_playbook_backtest_features, build_pd_array_backtest_features, build_time_session_backtest_features, build_doctrine_rule_matrix, build_doctrine_playbook_gate, build_doctrine_playbook_registry, build_liquidity_kernel_registry, + build_model_playbook_kernel_registry, build_pd_array_reaction_registry, build_time_session_kernel_registry, evaluate_doctrine_research_status, evaluate_liquidity_kernel_status, + evaluate_model_playbook_kernel_status, evaluate_pd_array_reaction_status, evaluate_time_session_kernel_status, extract_setup_playbook_id, @@ -42,11 +46,13 @@ from src.services.ict_mainline.doctrine import ( list_doctrine_setup_playbooks, list_doctrine_rules, list_liquidity_rules, + list_model_playbook_rules, list_pd_array_rules, list_time_session_rules, summarize_doctrine_backtest_cohorts, summarize_doctrine_rule_gaps, summarize_liquidity_kernel_statuses, + summarize_model_playbook_kernel_statuses, summarize_pd_array_reaction_statuses, summarize_time_session_kernel_statuses, ) @@ -54,18 +60,21 @@ from src.services.ict_mainline.doctrine import ( __all__ = [ "DOCTRINE_KERNEL_PHASE", "DOCTRINE_LIQUIDITY_PHASE", + "DOCTRINE_MODEL_PLAYBOOK_PHASE", "DOCTRINE_PLAYBOOK_PHASE", "DOCTRINE_REACTION_PHASE", "DOCTRINE_SESSION_PHASE", "ICT_MAINLINE_CHAIN", "build_doctrine_backtest_cohort", "build_liquidity_backtest_features", + "build_model_playbook_backtest_features", "build_pd_array_backtest_features", "build_time_session_backtest_features", "build_doctrine_rule_matrix", "build_doctrine_playbook_gate", "build_doctrine_playbook_registry", "build_liquidity_kernel_registry", + "build_model_playbook_kernel_registry", "build_pd_array_reaction_registry", "build_time_session_kernel_registry", "build_ict_rulebook_mapping", @@ -79,6 +88,7 @@ __all__ = [ "classify_ict_concepts", "evaluate_doctrine_research_status", "evaluate_liquidity_kernel_status", + "evaluate_model_playbook_kernel_status", "evaluate_pd_array_reaction_status", "evaluate_time_session_kernel_status", "extract_setup_playbook_id", @@ -87,12 +97,14 @@ __all__ = [ "list_doctrine_setup_playbooks", "list_doctrine_rules", "list_liquidity_rules", + "list_model_playbook_rules", "list_pd_array_rules", "list_time_session_rules", "list_ict_concepts", "summarize_doctrine_backtest_cohorts", "summarize_doctrine_rule_gaps", "summarize_liquidity_kernel_statuses", + "summarize_model_playbook_kernel_statuses", "summarize_pd_array_reaction_statuses", "summarize_time_session_kernel_statuses", "summarize_book_rule_errors", diff --git a/src/services/ict_mainline/doctrine.py b/src/services/ict_mainline/doctrine.py index 9f5b659..26aca02 100644 --- a/src/services/ict_mainline/doctrine.py +++ b/src/services/ict_mainline/doctrine.py @@ -11,6 +11,7 @@ DOCTRINE_PLAYBOOK_PHASE = "D2_PLAYBOOK_BACKTEST_COHORT" DOCTRINE_LIQUIDITY_PHASE = "D3_LIQUIDITY_KERNEL" DOCTRINE_REACTION_PHASE = "D4_PD_ARRAY_REACTION_KERNEL" DOCTRINE_SESSION_PHASE = "D5_TIME_SESSION_KERNEL" +DOCTRINE_MODEL_PLAYBOOK_PHASE = "D6_MODEL_PLAYBOOK_KERNEL" @dataclass(frozen=True) @@ -163,6 +164,34 @@ class TimeSessionRule: return payload +@dataclass(frozen=True) +class ModelPlaybookRule: + rule_id: str + stage: str + book_anchor: str + model_family: str + ranking_weight: int + required_inputs: tuple[str, ...] + measurable_fields: tuple[str, ...] + no_trade_when: tuple[str, ...] + wait_when: tuple[str, ...] + backtest_observable: str + operator_rule: str + aliases: tuple[str, ...] + + def to_public_dict(self) -> dict: + payload = asdict(self) + for key in ( + "required_inputs", + "measurable_fields", + "no_trade_when", + "wait_when", + "aliases", + ): + payload[key] = list(payload[key]) + return payload + + D1_DOCTRINE_RULES: tuple[DoctrineRule, ...] = ( DoctrineRule( rule_id="range_defined", @@ -796,6 +825,121 @@ D5_TIME_SESSION_RULES: tuple[TimeSessionRule, ...] = ( ) +D6_MODEL_PLAYBOOK_RULES: tuple[ModelPlaybookRule, ...] = ( + ModelPlaybookRule( + rule_id="model_family_declared", + stage="Model Identity", + book_anchor="ICT trading book models: continuation, reversal, sweep-to-displacement, HTF draw pullback, London/NY model", + model_family="book_derived_model", + ranking_weight=100, + required_inputs=("setup_playbook_id", "model_family", "model_variant"), + measurable_fields=("model_playbook_id", "model_family", "model_variant", "model_stage"), + no_trade_when=("missing_model_playbook", "unknown_model_playbook", "missing_model_family"), + wait_when=(), + backtest_observable="run_without_registered_model_playbook", + operator_rule="A model must point to a registered book-derived playbook before any backtest result can be trusted.", + aliases=("model_playbook_id", "setup_playbook_id", "model_family", "model_variant", "setup_family"), + ), + ModelPlaybookRule( + rule_id="full_chain_contract_complete", + stage="Full ICT Chain", + book_anchor="ICT trading book full setup chain: Range/Draw/Liquidity/PD Array/Session/Confirmation/Invalidation/Target", + model_family="full_chain_contract", + ranking_weight=95, + required_inputs=( + "range_contract", + "draw_contract", + "liquidity_contract", + "pd_array_contract", + "session_contract", + "confirmation_contract", + "invalidation_contract", + "target_contract", + ), + measurable_fields=( + "range_contract", + "draw_contract", + "liquidity_contract", + "pd_array_contract", + "session_contract", + "confirmation_contract", + "invalidation_contract", + "target_contract", + ), + no_trade_when=( + "missing_model_range_contract", + "missing_model_draw_contract", + "missing_model_liquidity_contract", + "missing_model_pd_array_contract", + "missing_model_session_contract", + "missing_model_confirmation_contract", + "missing_model_invalidation_contract", + "missing_model_target_contract", + ), + wait_when=(), + backtest_observable="model_playbook_without_full_chain_contract", + operator_rule="A playbook must define every upstream and downstream contract; no single shape is a setup by itself.", + aliases=("range_definition", "draw_rule", "liquidity_event_rule", "pd_array_rule", "session_timing_rule", "target_rule"), + ), + ModelPlaybookRule( + rule_id="confirmation_trigger_bound", + stage="Confirmation Trigger", + book_anchor="ICT trading book structure confirmation: displacement, MSS, FVG, and retest must serve the Draw", + model_family="confirmation_chain", + ranking_weight=90, + required_inputs=("confirmation_contract", "displacement_contract", "mss_contract", "fvg_retest_contract"), + measurable_fields=("confirmation_contract", "displacement_contract", "mss_contract", "fvg_retest_contract"), + no_trade_when=("missing_model_confirmation_contract",), + wait_when=("missing_model_trigger_contract",), + backtest_observable="model_without_confirmation_trigger_contract", + operator_rule="The model must state what confirms the setup and what is still only a wait condition.", + aliases=("confirmation_rule", "displacement_structure_rule", "mss", "fvg_retest", "trigger_contract"), + ), + ModelPlaybookRule( + rule_id="risk_target_contract_bound", + stage="Risk / Target", + book_anchor="ICT trading book invalidation and IRL/ERL target architecture", + model_family="risk_target_contract", + ranking_weight=90, + required_inputs=("invalidation_contract", "target_contract", "management_contract"), + measurable_fields=("invalidation_contract", "target_contract", "management_contract"), + no_trade_when=("missing_model_invalidation_contract", "missing_model_target_contract"), + wait_when=("missing_model_management_contract",), + backtest_observable="model_without_risk_target_contract", + operator_rule="The playbook must define invalidation and IRL/ERL targets before any historical result can become live focus evidence.", + aliases=("invalidation_rule", "target_rule", "management_rules", "irl", "erl"), + ), + ModelPlaybookRule( + rule_id="batch_cohort_contract_ready", + stage="Backtest Cohort", + book_anchor="ICT trading book study/backtesting: test the exact model, session, timeframe, and context cohort", + model_family="batch_backtest_cohort", + ranking_weight=85, + required_inputs=("backtest_cohort_family", "cohort_key_fields", "sample_basis", "quality_gate_contract"), + measurable_fields=("backtest_cohort_family", "cohort_key_fields", "sample_basis", "quality_gate_contract"), + no_trade_when=("missing_model_backtest_cohort",), + wait_when=("missing_model_quality_gate_contract",), + backtest_observable="model_without_batch_backtest_cohort", + operator_rule="Backtest evidence must be grouped by playbook cohort rather than raw model_code.", + aliases=("backtest_cohort", "cohort_family", "cohort_key_fields", "sample_basis", "quality_gate"), + ), + ModelPlaybookRule( + rule_id="journal_feedback_contract_ready", + stage="Journal / Study Notes", + book_anchor="ICT trading book study notes and journal feedback loop", + model_family="feedback_contract", + ranking_weight=75, + required_inputs=("journal_error_classes", "study_note_contract", "operator_runbook"), + measurable_fields=("journal_error_classes", "study_note_contract", "operator_runbook"), + no_trade_when=("missing_model_journal_feedback",), + wait_when=("missing_model_operator_runbook",), + backtest_observable="model_without_journal_feedback_contract", + operator_rule="Every model failure must map back to journal and study-note error classes.", + aliases=("journal_error_classes", "study_notes", "operator_runbook", "cockpit_sentence"), + ), +) + + def list_doctrine_rules() -> list[dict]: return [rule.to_public_dict() for rule in D1_DOCTRINE_RULES] @@ -846,6 +990,10 @@ def list_time_session_rules() -> list[dict]: return [rule.to_public_dict() for rule in D5_TIME_SESSION_RULES] +def list_model_playbook_rules() -> list[dict]: + return [rule.to_public_dict() for rule in D6_MODEL_PLAYBOOK_RULES] + + def build_liquidity_kernel_registry() -> dict: return { "phase": DOCTRINE_LIQUIDITY_PHASE, @@ -915,6 +1063,31 @@ def build_time_session_kernel_registry() -> dict: } +def build_model_playbook_kernel_registry() -> dict: + return { + "phase": DOCTRINE_MODEL_PLAYBOOK_PHASE, + "source": "docs/ICT交易全书_出版终校版.md model playbook chapters and docs/AI_ICT_DoctrineKernel全书规则内核重建_D0_2026-05-21_v1.md", + "status": "active", + "rule_count": len(D6_MODEL_PLAYBOOK_RULES), + "registered_playbook_count": len(D2_DOCTRINE_SETUP_PLAYBOOKS), + "hard_rules": [ + "Raw model_code is not a tradable setup.", + "Every model must resolve into a registered setup playbook before promotion.", + "A playbook must include Range, Draw, Liquidity, PD Array, Session, Confirmation, Invalidation, and Target contracts.", + "Batch backtest cohorts must be playbook-based, not shape-label based.", + "Journal and study-note errors must map back to the playbook rules.", + ], + "required_backtest_feature_fields": _dedupe( + field + for rule in D6_MODEL_PLAYBOOK_RULES + for field in rule.measurable_fields + ), + "rules": list_model_playbook_rules(), + "registered_playbooks": list_doctrine_setup_playbooks(), + "execution_boundary": "read_only_analysis_no_order_submission", + } + + def get_doctrine_setup_playbook(setup_playbook_id: str | None) -> dict | None: key = str(setup_playbook_id or "").strip() if not key: @@ -1001,6 +1174,7 @@ def build_doctrine_backtest_cohort(payload: object, *, quality_gate: dict | None liquidity_status = evaluate_liquidity_kernel_status(payload) pd_array_status = evaluate_pd_array_reaction_status(payload) time_session_status = evaluate_time_session_kernel_status(payload) + model_playbook_status = evaluate_model_playbook_kernel_status(payload) quality = dict(quality_gate or _extract_quality_gate(payload) or {}) quality_reasons = [str(item) for item in list(quality.get("reasons") or []) if item] quality_passed = bool(quality.get("passed")) @@ -1016,6 +1190,7 @@ def build_doctrine_backtest_cohort(payload: object, *, quality_gate: dict | None *([] if liquidity_status.get("passed") else [str(item) for item in list(liquidity_status.get("reasons") or []) if item]), *([] if pd_array_status.get("passed") else [str(item) for item in list(pd_array_status.get("reasons") or []) if item]), *([] if time_session_status.get("passed") else [str(item) for item in list(time_session_status.get("reasons") or []) if item]), + *([] if model_playbook_status.get("passed") else [str(item) for item in list(model_playbook_status.get("reasons") or []) if item]), *([] if quality_passed else quality_reasons), ] promotion_reasons = _dedupe(promotion_reasons) @@ -1035,6 +1210,8 @@ def build_doctrine_backtest_cohort(payload: object, *, quality_gate: dict | None "pd_array_backtest_features": dict(pd_array_status.get("features") or {}), "time_session_kernel_status": time_session_status, "time_session_backtest_features": dict(time_session_status.get("features") or {}), + "model_playbook_kernel_status": model_playbook_status, + "model_playbook_backtest_features": dict(model_playbook_status.get("features") or {}), "promotion_gate": { "passed": not promotion_reasons, "reasons": promotion_reasons, @@ -1042,6 +1219,7 @@ def build_doctrine_backtest_cohort(payload: object, *, quality_gate: dict | None "requires_liquidity_kernel_complete": True, "requires_pd_array_reaction_complete": True, "requires_time_session_kernel_complete": True, + "requires_model_playbook_kernel_complete": True, "requires_backtest_quality_gate": True, "requires_active_trading_plan": True, "execution_boundary": "read_only_analysis_no_order_submission", @@ -1072,6 +1250,8 @@ def summarize_doctrine_backtest_cohorts(items: Iterable[dict]) -> dict: "promotion_blocker_counts": {}, "liquidity_status_counts": {}, "pd_array_status_counts": {}, + "time_session_status_counts": {}, + "model_playbook_status_counts": {}, }, ) bucket["run_count"] += 1 @@ -1083,6 +1263,10 @@ def summarize_doctrine_backtest_cohorts(items: Iterable[dict]) -> dict: bucket["liquidity_status_counts"][liquidity_status] = int(bucket["liquidity_status_counts"].get(liquidity_status) or 0) + 1 pd_array_status = str((cohort.get("pd_array_reaction_status") or {}).get("status") or "unknown") bucket["pd_array_status_counts"][pd_array_status] = int(bucket["pd_array_status_counts"].get(pd_array_status) or 0) + 1 + time_session_status = str((cohort.get("time_session_kernel_status") or {}).get("status") or "unknown") + bucket["time_session_status_counts"][time_session_status] = int(bucket["time_session_status_counts"].get(time_session_status) or 0) + 1 + model_playbook_status = str((cohort.get("model_playbook_kernel_status") or {}).get("status") or "unknown") + bucket["model_playbook_status_counts"][model_playbook_status] = int(bucket["model_playbook_status_counts"].get(model_playbook_status) or 0) + 1 for reason in list((cohort.get("promotion_gate") or {}).get("reasons") or []): reason_key = str(reason) bucket["promotion_blocker_counts"][reason_key] = int(bucket["promotion_blocker_counts"].get(reason_key) or 0) + 1 @@ -1651,6 +1835,225 @@ def summarize_time_session_kernel_statuses(items: Iterable[dict]) -> dict: } +def build_model_playbook_backtest_features(payload: object) -> dict: + model_playbook_id = _string_or_empty( + _extract_first_present_value( + payload, + keys=("model_playbook_id", "setup_playbook_id", "doctrine_setup_id", "playbook_id"), + ) + ) + playbook = get_doctrine_setup_playbook(model_playbook_id) + playbook_backtest_cohort = dict((playbook or {}).get("backtest_cohort") or {}) + playbook_promotion_gate = dict((playbook or {}).get("promotion_gate") or {}) + model_family = _string_or_empty( + _extract_first_present_value( + payload, + keys=("model_family", "playbook_model_family", "setup_family", "cohort_family"), + ) + or playbook_backtest_cohort.get("cohort_family") + ) + model_variant = _string_or_empty( + _extract_first_present_value(payload, keys=("model_variant", "setup_variant", "model_name")) + or (playbook or {}).get("setup_name") + ) + cohort_key_fields = _as_string_list( + _extract_first_present_value(payload, keys=("cohort_key_fields",)) + or playbook_backtest_cohort.get("cohort_key_fields") + ) + model_timeframe_contract = _as_string_list( + _extract_first_present_value(payload, keys=("model_timeframe_contract", "timeframe_contract")) + or [field for field in cohort_key_fields if str(field).endswith("_tf")] + ) + journal_error_classes = _as_string_list( + _extract_first_present_value(payload, keys=("journal_error_classes", "journal_errors", "book_rule_error_classes")) + or (playbook or {}).get("journal_error_classes") + ) + target_contract = _contract_fields(payload, playbook, "target_contract", "target_rule") + features = { + "model_playbook_id": model_playbook_id, + "model_playbook_known": bool(playbook), + "model_family": model_family, + "model_variant": model_variant, + "model_stage": _string_or_empty( + _extract_first_present_value(payload, keys=("model_stage", "playbook_stage")) + or ("registered_setup_playbook" if playbook else "") + ), + "model_timeframe_contract": model_timeframe_contract, + "required_rule_ids": _as_string_list((playbook or {}).get("required_rule_ids")), + "range_contract": _contract_fields(payload, playbook, "range_contract", "range_definition"), + "draw_contract": _contract_fields(payload, playbook, "draw_contract", "draw_rule"), + "liquidity_contract": _contract_fields(payload, playbook, "liquidity_contract", "liquidity_event_rule"), + "pd_array_contract": _contract_fields(payload, playbook, "pd_array_contract", "pd_array_rule"), + "session_contract": _contract_fields(payload, playbook, "session_contract", "session_timing_rule"), + "confirmation_contract": _contract_fields(payload, playbook, "confirmation_contract", "confirmation_rule"), + "displacement_contract": _contract_fields(payload, playbook, "displacement_contract", "displacement_structure_rule"), + "mss_contract": _as_string_list( + _extract_first_present_value(payload, keys=("mss_contract",)) + or _contract_fields(payload, playbook, "confirmation_contract", "confirmation_rule") + ), + "fvg_retest_contract": _as_string_list( + _extract_first_present_value(payload, keys=("fvg_retest_contract",)) + or _contract_fields(payload, playbook, "pd_array_contract", "pd_array_rule") + ), + "invalidation_contract": _contract_fields(payload, playbook, "invalidation_contract", "invalidation_rule"), + "target_contract": target_contract, + "management_contract": _as_string_list( + _extract_first_present_value(payload, keys=("management_contract", "management_rules")) + or [field for field in target_contract if "management" in str(field).lower()] + ), + "backtest_cohort_family": _string_or_empty( + _extract_first_present_value(payload, keys=("backtest_cohort_family", "cohort_family")) + or playbook_backtest_cohort.get("cohort_family") + ), + "cohort_key_fields": cohort_key_fields, + "sample_basis": _string_or_empty( + _extract_first_present_value(payload, keys=("sample_basis",)) + or playbook_backtest_cohort.get("sample_basis") + ), + "quality_gate_contract": _as_string_list( + _extract_first_present_value(payload, keys=("quality_gate_contract",)) + or ( + ["requires_backtest_quality_gate"] + if playbook_promotion_gate.get("requires_backtest_quality_gate") + else [] + ) + ), + "journal_error_classes": journal_error_classes, + "study_note_contract": _as_string_list( + _extract_first_present_value(payload, keys=("study_note_contract", "study_notes_contract")) + or journal_error_classes + ), + "operator_runbook": _string_or_empty( + _extract_first_present_value(payload, keys=("operator_runbook", "playbook_operator_runbook")) + or (playbook or {}).get("cockpit_sentence") + ), + } + features["has_full_chain_contracts"] = all( + bool(features.get(key)) + for key in ( + "range_contract", + "draw_contract", + "liquidity_contract", + "pd_array_contract", + "session_contract", + "confirmation_contract", + "invalidation_contract", + "target_contract", + ) + ) + features["has_batch_backtest_cohort"] = bool( + features["backtest_cohort_family"] and features["cohort_key_fields"] and features["sample_basis"] + ) + features["has_journal_feedback_contract"] = bool(features["journal_error_classes"] and features["study_note_contract"]) + return features + + +def evaluate_model_playbook_kernel_status(payload: object) -> dict: + features = build_model_playbook_backtest_features(payload) + no_trade_reasons: list[str] = [] + wait_reasons: list[str] = [] + + if not features["model_playbook_id"]: + no_trade_reasons.append("missing_model_playbook") + elif not features["model_playbook_known"]: + no_trade_reasons.append("unknown_model_playbook") + + if not features["model_family"]: + no_trade_reasons.append("missing_model_family") + for contract_key, reason in ( + ("range_contract", "missing_model_range_contract"), + ("draw_contract", "missing_model_draw_contract"), + ("liquidity_contract", "missing_model_liquidity_contract"), + ("pd_array_contract", "missing_model_pd_array_contract"), + ("session_contract", "missing_model_session_contract"), + ("confirmation_contract", "missing_model_confirmation_contract"), + ("invalidation_contract", "missing_model_invalidation_contract"), + ("target_contract", "missing_model_target_contract"), + ): + if not features.get(contract_key): + no_trade_reasons.append(reason) + + if not features["model_timeframe_contract"]: + wait_reasons.append("missing_model_timeframe_contract") + if not features["displacement_contract"] or not features["mss_contract"] or not features["fvg_retest_contract"]: + wait_reasons.append("missing_model_trigger_contract") + if not features["management_contract"]: + wait_reasons.append("missing_model_management_contract") + if not features["has_batch_backtest_cohort"]: + no_trade_reasons.append("missing_model_backtest_cohort") + elif not features["quality_gate_contract"]: + wait_reasons.append("missing_model_quality_gate_contract") + if not features["has_journal_feedback_contract"]: + no_trade_reasons.append("missing_model_journal_feedback") + elif not features["operator_runbook"]: + wait_reasons.append("missing_model_operator_runbook") + + reasons = _dedupe([*no_trade_reasons, *wait_reasons]) + passed = not reasons + if passed: + status = "model_playbook_mapped" + elif no_trade_reasons: + status = "study_only" + else: + status = "wait" + return { + "phase": DOCTRINE_MODEL_PLAYBOOK_PHASE, + "status": status, + "passed": passed, + "reason": "" if passed else reasons[0], + "reasons": reasons, + "no_trade_reasons": _dedupe(no_trade_reasons), + "wait_reasons": _dedupe(wait_reasons), + "features": features, + "can_promote_to_playbook": passed, + "operator_summary": ( + "Model resolves to a full book-derived setup playbook with batch cohort and feedback contracts." + if passed + else "Keep this model study-only until it maps to a registered full-chain playbook and cohort contract." + ), + "execution_boundary": "read_only_analysis_no_order_submission", + } + + +def summarize_model_playbook_kernel_statuses(items: Iterable[dict]) -> dict: + reason_counts: dict[str, int] = {} + status_counts: dict[str, int] = {} + playbook_counts: dict[str, int] = {} + model_family_counts: dict[str, int] = {} + total = 0 + passed_count = 0 + for item in items: + total += 1 + status = dict(item.get("model_playbook_kernel_status") or evaluate_model_playbook_kernel_status(item)) + status_key = str(status.get("status") or "unknown") + status_counts[status_key] = int(status_counts.get(status_key) or 0) + 1 + if status.get("passed"): + passed_count += 1 + features = dict(status.get("features") or {}) + playbook_id = str(features.get("model_playbook_id") or "missing_model_playbook") + model_family = str(features.get("model_family") or "missing_model_family") + playbook_counts[playbook_id] = int(playbook_counts.get(playbook_id) or 0) + 1 + model_family_counts[model_family] = int(model_family_counts.get(model_family) or 0) + 1 + for reason in list(status.get("reasons") or []): + key = str(reason) + reason_counts[key] = int(reason_counts.get(key) or 0) + 1 + return { + "phase": DOCTRINE_MODEL_PLAYBOOK_PHASE, + "item_count": total, + "passed_count": passed_count, + "blocked_count": max(0, total - passed_count), + "status_counts": status_counts, + "reason_counts": reason_counts, + "playbook_counts": playbook_counts, + "model_family_counts": model_family_counts, + "operator_summary": ( + "No backtest items available for Model Playbook review." + if not total + else "Review Model Playbook blockers before trusting raw model_code backtests." + ), + } + + def evaluate_doctrine_research_status( payload: object, *, @@ -1823,6 +2226,14 @@ def _missing_playbook_sections(playbook: dict) -> list[str]: return missing +def _contract_fields(payload: object, playbook: dict | None, payload_key: str, playbook_section: str) -> list[str]: + payload_fields = _as_string_list(_extract_first_present_value(payload, keys=(payload_key,))) + if payload_fields: + return payload_fields + section = dict((playbook or {}).get(playbook_section) or {}) + return _as_string_list(section.get("required_fields")) + + def _extract_quality_gate(payload: object) -> dict | None: if isinstance(payload, dict): quality_gate = payload.get("quality_gate") diff --git a/src/web/app.js b/src/web/app.js index d9c239f..a3ae701 100644 --- a/src/web/app.js +++ b/src/web/app.js @@ -5561,6 +5561,17 @@ function renderStrategyBacktests(payload) { doctrineCohort.time_session_backtest_features || timeSessionStatus.features || {}; + const modelPlaybookStatus = + latest.model_playbook_kernel_status || + summary.model_playbook_kernel_status || + doctrineCohort.model_playbook_kernel_status || + {}; + const modelPlaybookFeatures = + latest.model_playbook_backtest_features || + summary.model_playbook_backtest_features || + doctrineCohort.model_playbook_backtest_features || + modelPlaybookStatus.features || + {}; strategyBacktestPanel.appendChild( buildInfoGrid([ @@ -5583,6 +5594,10 @@ function renderStrategyBacktests(payload) { ['Time / Session Reason', formatBacktestDecision(timeSessionStatus.reason || 'missing_session_window')], ['Session', timeSessionFeatures.session_code || 'missing_session_window'], ['Killzone', timeSessionFeatures.killzone_name || 'missing_killzone'], + ['Model Playbook Kernel', formatBacktestDecision(modelPlaybookStatus.status || 'study_only')], + ['Model Playbook Reason', formatBacktestDecision(modelPlaybookStatus.reason || 'missing_model_playbook')], + ['Model Playbook', modelPlaybookFeatures.model_playbook_id || 'missing_model_playbook'], + ['Model Family', modelPlaybookFeatures.model_family || 'missing_model_family'], ['Promotion Gate', doctrinePromotionGate.passed ? 'Passed' : 'Blocked'], ['Instrument ID', latest.instrument_id ?? 'n/a'], ['Timeframe', formatJsonInline(latest.timeframe_set || {})], @@ -5632,6 +5647,13 @@ function renderStrategyBacktests(payload) { formatList((timeSessionStatus.reasons || []).map(formatBacktestDecision), 'Time / Session chain mapped') ) ); + cards.appendChild( + buildMetricCard( + 'Model Playbook Kernel', + modelPlaybookStatus.passed ? 'Mapped' : 'Blocked', + formatList((modelPlaybookStatus.reasons || []).map(formatBacktestDecision), 'Model Playbook chain mapped') + ) + ); strategyBacktestPanel.appendChild(cards); strategyBacktestPanel.appendChild(buildBacktestCurve(summary.cumulative_r_curve || [])); @@ -5673,6 +5695,15 @@ function renderStrategyBacktests(payload) { .map((item) => [formatBacktestDecision(item.key), String(item.value)]) ) ); + detailGrid.appendChild( + buildItemCard( + 'Model Playbook Kernel', + `${payload?.model_playbook_kernel_summary?.passed_count ?? 0} mapped / ${payload?.model_playbook_kernel_summary?.blocked_count ?? 0} blocked`, + topCountEntries(payload?.model_playbook_kernel_summary?.reason_counts || summary.model_playbook_kernel_reason_counts || {}) + .slice(0, 5) + .map((item) => [formatBacktestDecision(item.key), String(item.value)]) + ) + ); detailGrid.appendChild( buildItemCard( 'PD Array Kernel', @@ -5753,8 +5784,13 @@ function topCountEntries(countMap) { } function formatBacktestDecision(value) { - const text = String(value || 'n/a').replace(/_/g, ' '); - return text.replace(/\b\w/g, (letter) => letter.toUpperCase()); + const raw = String(value || 'n/a'); + const translate = window.I18N?.t; + const translatedRaw = typeof translate === 'function' ? translate(raw) : raw; + if (translatedRaw !== raw) return translatedRaw; + const text = raw.replace(/_/g, ' '); + const title = text.replace(/\b\w/g, (letter) => letter.toUpperCase()); + return typeof translate === 'function' ? translate(title) : title; } function renderLiveReadiness(payload) { diff --git a/src/web/i18n.js b/src/web/i18n.js index 487ef4c..da74f1f 100644 --- a/src/web/i18n.js +++ b/src/web/i18n.js @@ -90,6 +90,11 @@ 'Time / Session Kernel': '时间 / 时段内核', 'Time / Session Reason': '时间 / 时段原因', 'Time / Session chain mapped': '时间 / 时段链路已映射', + 'Model Playbook Kernel': '模型 Playbook 内核', + 'Model Playbook Reason': '模型 Playbook 原因', + 'Model Playbook': '模型 Playbook', + 'Model Family': '模型族', + 'Model Playbook chain mapped': '模型 Playbook 链路已映射', 'Killzone': 'Killzone 时段', 'Mapped': '已映射', 'mapped': '已映射', @@ -810,7 +815,7 @@ ['missing_playbook', '缺少 playbook'], ['Doctrine Cohort', 'Doctrine 回测分组'], ['Doctrine Cohorts', 'Doctrine 回测分组'], - ['Setup Playbook', 'Setup Playbook'], + ['Setup Playbook', 'Setup 剧本'], ['Doctrine Completeness', 'Doctrine 完整度'], ['Liquidity Kernel', '流动性内核'], ['Liquidity Reason', '流动性原因'], @@ -820,7 +825,39 @@ ['Time / Session Kernel', '时间 / 时段内核'], ['Time / Session Reason', '时间 / 时段原因'], ['Time / Session chain mapped', '时间 / 时段链路已映射'], + ['Model Playbook Kernel', '模型 Playbook 内核'], + ['Model Playbook Reason', '模型 Playbook 原因'], + ['Model Playbook', '模型 Playbook'], + ['Model Family', '模型族'], + ['Model Playbook chain mapped', '模型 Playbook 链路已映射'], + ['model_playbook_mapped', '模型 Playbook 已映射'], + ['model_playbook_kernel_blocked', '模型 Playbook 内核阻塞'], + ['missing_model_playbook', '缺少模型 Playbook'], + ['unknown_model_playbook', '未知模型 Playbook'], + ['missing_model_family', '缺少模型族'], + ['missing_model_range_contract', '缺少模型区间合同'], + ['missing_model_draw_contract', '缺少模型 Draw 合同'], + ['missing_model_liquidity_contract', '缺少模型流动性合同'], + ['missing_model_pd_array_contract', '缺少模型 PD Array 合同'], + ['missing_model_session_contract', '缺少模型时段合同'], + ['missing_model_confirmation_contract', '缺少模型确认合同'], + ['missing_model_invalidation_contract', '缺少模型失效合同'], + ['missing_model_target_contract', '缺少模型目标合同'], + ['missing_model_timeframe_contract', '缺少模型周期合同'], + ['missing_model_trigger_contract', '缺少模型触发合同'], + ['missing_model_management_contract', '缺少模型管理合同'], + ['missing_model_backtest_cohort', '缺少模型回测分组'], + ['missing_model_quality_gate_contract', '缺少模型质量门合同'], + ['missing_model_journal_feedback', '缺少模型复盘反馈合同'], + ['missing_model_operator_runbook', '缺少模型操作话术'], ['Killzone', 'Killzone 时段'], + ['cohorts', '个分组'], + ['cohort', '个分组'], + ['runs', '次运行'], + ['run', '次运行'], + ['passed', '通过'], + ['mapped', '已映射'], + ['blocked', '已阻塞'], ['Promotion Gate', '晋级门'], ['complete', '完整'], ['incomplete', '不完整'], diff --git a/tests/unit/test_api_and_main.py b/tests/unit/test_api_and_main.py index 15f9757..40a80ca 100644 --- a/tests/unit/test_api_and_main.py +++ b/tests/unit/test_api_and_main.py @@ -99,6 +99,8 @@ class ApiTests(unittest.TestCase): self.assertIn("missing_pd_array", result[0]["pd_array_reaction_status"]["reasons"]) self.assertEqual(result[0]["time_session_kernel_status"]["status"], "study_only") self.assertIn("missing_session_window", result[0]["time_session_kernel_status"]["reasons"]) + self.assertEqual(result[0]["model_playbook_kernel_status"]["status"], "study_only") + self.assertIn("missing_model_playbook", result[0]["model_playbook_kernel_status"]["reasons"]) def test_normalize_backtest_summary_row_preserves_existing_quality_gate(self) -> None: row = {"id": 10, "summary": {"total_signals": 3, "quality_gate": {"passed": True}, "by_symbol": {"BTC-USDT": {"count": 3}}}} @@ -134,6 +136,8 @@ class ApiTests(unittest.TestCase): self.assertIn("missing_pd_array", result["pd_array_reaction_summary"]["reason_counts"]) self.assertEqual(result["time_session_kernel_summary"]["item_count"], 1) self.assertIn("missing_session_window", result["time_session_kernel_summary"]["reason_counts"]) + self.assertEqual(result["model_playbook_kernel_summary"]["item_count"], 1) + self.assertIn("missing_model_playbook", result["model_playbook_kernel_summary"]["reason_counts"]) def test_route_request_trading_doctrine_rules_returns_d1_matrix(self) -> None: status, payload = route_request( @@ -210,6 +214,22 @@ class ApiTests(unittest.TestCase): self.assertEqual(payload["phase"], "D5_TIME_SESSION_KERNEL") self.assertEqual(payload["rules"][0]["rule_id"], "session_window_verifiable") + def test_route_request_trading_model_playbook_kernel_returns_d6_registry(self) -> None: + status, payload = route_request( + "/trading/model-playbook-kernel", + {}, + dependencies={ + "trading_model_playbook_kernel": lambda: { + "phase": "D6_MODEL_PLAYBOOK_KERNEL", + "rules": [{"rule_id": "model_family_declared"}], + } + }, + ) + + self.assertEqual(status, 200) + self.assertEqual(payload["phase"], "D6_MODEL_PLAYBOOK_KERNEL") + self.assertEqual(payload["rules"][0]["rule_id"], "model_family_declared") + def test_route_request_trading_candidates_returns_items_payload(self) -> None: status, payload = route_request( "/trading/candidates", diff --git a/tests/unit/test_api_server.py b/tests/unit/test_api_server.py index b0039c5..18448cb 100644 --- a/tests/unit/test_api_server.py +++ b/tests/unit/test_api_server.py @@ -166,6 +166,22 @@ class ApiServerRoutingTests(unittest.TestCase): self.assertEqual(payload["phase"], "D5_TIME_SESSION_KERNEL") self.assertEqual(payload["rule_count"], 6) + def test_routes_trading_model_playbook_kernel(self) -> None: + status, payload = route_request( + "/trading/model-playbook-kernel", + {}, + dependencies={ + "trading_model_playbook_kernel": lambda: { + "phase": "D6_MODEL_PLAYBOOK_KERNEL", + "rule_count": 6, + } + }, + ) + + self.assertEqual(status, 200) + self.assertEqual(payload["phase"], "D6_MODEL_PLAYBOOK_KERNEL") + self.assertEqual(payload["rule_count"], 6) + def test_routes_trading_alert_quality_summary(self) -> None: status, payload = route_request( "/trading/alerts/quality-summary", diff --git a/tests/unit/test_backtest_service.py b/tests/unit/test_backtest_service.py index 2d05921..0dd4d26 100644 --- a/tests/unit/test_backtest_service.py +++ b/tests/unit/test_backtest_service.py @@ -324,6 +324,9 @@ class BacktestOutcomeTests(unittest.TestCase): self.assertEqual(summary["time_session_kernel_status_counts"]["study_only"], 4) self.assertEqual(summary["time_session_kernel_reason_counts"]["missing_session_window"], 4) self.assertEqual(summary["by_time_session_code"]["LONDON"]["count"], 3) + self.assertEqual(summary["model_playbook_kernel_status_counts"]["study_only"], 4) + self.assertEqual(summary["model_playbook_kernel_reason_counts"]["missing_model_playbook"], 4) + self.assertEqual(summary["by_model_playbook"]["missing_model_playbook"]["count"], 4) self.assertEqual(summary["by_session"]["LONDON"]["max_consecutive_losses"], 2) self.assertEqual(summary["by_session"]["LONDON"]["executed"], 3) self.assertAlmostEqual(summary["by_session"]["LONDON"]["executed_expectancy_r"], 0.2 / 3) @@ -411,6 +414,7 @@ class BacktestOutcomeTests(unittest.TestCase): "candidate_id": 1, "trading_plan_id": 77, "candidate_model_code": "OSOK", + "setup_playbook_id": "ICT-CH1-6-LONDON-DISCOUNT-REVERSAL", "side": "buy", "setup_timeframe": "15m", "trigger_timeframe": "5m", @@ -428,6 +432,7 @@ class BacktestOutcomeTests(unittest.TestCase): "candidate_id": 2, "trading_plan_id": 77, "candidate_model_code": "OSOK", + "setup_playbook_id": "ICT-CH1-6-LONDON-DISCOUNT-REVERSAL", "side": "buy", "setup_timeframe": "15m", "trigger_timeframe": "5m", @@ -510,6 +515,8 @@ class BacktestOutcomeTests(unittest.TestCase): self.assertEqual(units[0]["pd_array_reaction_status"]["status"], "pd_array_mapped") self.assertEqual(units[0]["time_session_backtest_features"]["session_code"], "LONDON") self.assertEqual(units[0]["time_session_kernel_status"]["status"], "time_session_mapped") + self.assertEqual(units[0]["model_playbook_backtest_features"]["model_playbook_id"], "ICT-CH1-6-LONDON-DISCOUNT-REVERSAL") + self.assertEqual(units[0]["model_playbook_kernel_status"]["status"], "model_playbook_mapped") class BacktestServiceRunTests(unittest.TestCase): @@ -883,6 +890,11 @@ class BacktestServiceRunTests(unittest.TestCase): self.assertEqual(repository.summary["by_pd_array_type"]["fvg"]["count"], 1) self.assertEqual(repository.summary["time_session_kernel_status"]["status"], "time_session_mapped") self.assertEqual(repository.summary["by_time_session_code"]["LONDON"]["count"], 1) + self.assertEqual(repository.summary["model_playbook_kernel_status"]["status"], "model_playbook_mapped") + self.assertEqual( + repository.summary["by_model_playbook"]["ICT-CH1-6-LONDON-DISCOUNT-REVERSAL"]["count"], + 1, + ) def test_normalize_timeframe_set_and_bucket_helpers(self) -> None: normalized = normalize_timeframe_set({"bias_tf": "1h", "setup_tf": "15m"}) diff --git a/tests/unit/test_documentation_consistency.py b/tests/unit/test_documentation_consistency.py index 9971688..cc95693 100644 --- a/tests/unit/test_documentation_consistency.py +++ b/tests/unit/test_documentation_consistency.py @@ -23,6 +23,7 @@ ACTIVE_TOP_LEVEL_DOCS = { "AI_ICT_DoctrineKernel_LiquidityKernel_D3_2026-05-21_v1.md", "AI_ICT_DoctrineKernel_PDArrayReactionKernel_D4_2026-05-22_v1.md", "AI_ICT_DoctrineKernel_TimeSessionKernel_D5_2026-05-22_v1.md", + "AI_ICT_DoctrineKernel_ModelPlaybookKernel_D6_2026-05-22_v1.md", "AI_ICT_硬性主线约束_必须遵循ICT交易全书_2026-05-21_v1.md", "AI_ICT_实盘辅助分析决策助手ICT主线开发方案_2026-05-21_v1.md", "AI_ICT_主线裁剪审计_S1_2026-05-21_v1.md", diff --git a/tests/unit/test_ict_doctrine.py b/tests/unit/test_ict_doctrine.py index 8a87f35..4e002ca 100644 --- a/tests/unit/test_ict_doctrine.py +++ b/tests/unit/test_ict_doctrine.py @@ -3,24 +3,29 @@ import unittest from src.services.ict_mainline import ( DOCTRINE_KERNEL_PHASE, DOCTRINE_LIQUIDITY_PHASE, + DOCTRINE_MODEL_PLAYBOOK_PHASE, DOCTRINE_PLAYBOOK_PHASE, DOCTRINE_REACTION_PHASE, DOCTRINE_SESSION_PHASE, build_doctrine_backtest_cohort, build_liquidity_backtest_features, + build_model_playbook_backtest_features, build_pd_array_backtest_features, build_time_session_backtest_features, build_doctrine_playbook_gate, build_doctrine_playbook_registry, build_doctrine_rule_matrix, build_liquidity_kernel_registry, + build_model_playbook_kernel_registry, build_pd_array_reaction_registry, build_time_session_kernel_registry, evaluate_doctrine_research_status, evaluate_liquidity_kernel_status, + evaluate_model_playbook_kernel_status, evaluate_pd_array_reaction_status, evaluate_time_session_kernel_status, summarize_liquidity_kernel_statuses, + summarize_model_playbook_kernel_statuses, summarize_pd_array_reaction_statuses, summarize_time_session_kernel_statuses, summarize_doctrine_rule_gaps, @@ -214,6 +219,51 @@ class IctDoctrineKernelTests(unittest.TestCase): self.assertGreater(summary["reason_counts"]["outside_session_window"], 0) self.assertEqual(summary["session_code_counts"]["LONDON"], 1) + def test_d6_model_playbook_kernel_registry_exposes_full_chain_contracts(self) -> None: + registry = build_model_playbook_kernel_registry() + + self.assertEqual(registry["phase"], DOCTRINE_MODEL_PLAYBOOK_PHASE) + self.assertEqual(registry["status"], "active") + self.assertGreaterEqual(registry["rule_count"], 6) + self.assertIn("model_playbook_id", registry["required_backtest_feature_fields"]) + self.assertIn("Raw model_code is not a tradable setup.", registry["hard_rules"]) + + def test_raw_model_without_playbook_stays_study_only(self) -> None: + status = evaluate_model_playbook_kernel_status( + {"model_code": "OSOK_DAILY_RANGE_SWEEP_MSS_FVG_RETRACE"} + ) + + self.assertFalse(status["passed"]) + self.assertEqual(status["phase"], DOCTRINE_MODEL_PLAYBOOK_PHASE) + self.assertEqual(status["status"], "study_only") + self.assertIn("missing_model_playbook", status["reasons"]) + self.assertIn("missing_model_range_contract", status["reasons"]) + self.assertIn("missing_model_backtest_cohort", status["reasons"]) + + def test_registered_model_playbook_maps_without_execution_permission(self) -> None: + status = evaluate_model_playbook_kernel_status( + {"setup_playbook_id": "ICT-CH1-6-LONDON-DISCOUNT-REVERSAL"} + ) + + self.assertTrue(status["passed"]) + self.assertEqual(status["status"], "model_playbook_mapped") + self.assertEqual(status["features"]["model_family"], "london_discount_reversal") + self.assertIn("range_id", status["features"]["range_contract"]) + self.assertEqual(status["execution_boundary"], "read_only_analysis_no_order_submission") + + def test_model_playbook_summary_counts_blockers(self) -> None: + summary = summarize_model_playbook_kernel_statuses( + [ + {"model_code": "SWEEP_MSS_FVG"}, + {"setup_playbook_id": "ICT-CH1-6-LONDON-DISCOUNT-REVERSAL"}, + ] + ) + + self.assertEqual(summary["item_count"], 2) + self.assertEqual(summary["passed_count"], 1) + self.assertGreater(summary["reason_counts"]["missing_model_playbook"], 0) + self.assertEqual(summary["playbook_counts"]["ICT-CH1-6-LONDON-DISCOUNT-REVERSAL"], 1) + def test_playbook_gate_blocks_missing_and_passes_registered_schema(self) -> None: missing = build_doctrine_playbook_gate({"model_code": "SWEEP_MSS_FVG"}) @@ -313,6 +363,8 @@ class IctDoctrineKernelTests(unittest.TestCase): self.assertEqual(cohort["liquidity_kernel_status"]["status"], "liquidity_mapped") self.assertEqual(cohort["pd_array_reaction_status"]["status"], "pd_array_mapped") self.assertEqual(cohort["time_session_kernel_status"]["status"], "time_session_mapped") + self.assertEqual(cohort["model_playbook_kernel_status"]["status"], "model_playbook_mapped") + self.assertTrue(cohort["promotion_gate"]["requires_model_playbook_kernel_complete"]) missing = build_doctrine_backtest_cohort({"model_code": "SWEEP_MSS_FVG"}) @@ -321,6 +373,7 @@ class IctDoctrineKernelTests(unittest.TestCase): self.assertIn("missing_liquidity_target", missing["promotion_gate"]["reasons"]) self.assertIn("missing_pd_array", missing["promotion_gate"]["reasons"]) self.assertIn("missing_session_window", missing["promotion_gate"]["reasons"]) + self.assertIn("missing_model_playbook", missing["promotion_gate"]["reasons"]) def test_liquidity_backtest_features_extract_nested_candidate_fields(self) -> None: features = build_liquidity_backtest_features( @@ -385,6 +438,21 @@ class IctDoctrineKernelTests(unittest.TestCase): self.assertEqual(features["killzone_name"], "NY_AM_KILLZONE") self.assertEqual(features["opening_range_state"], "defined") + def test_model_playbook_features_extract_nested_playbook_fields(self) -> None: + features = build_model_playbook_backtest_features( + { + "candidate": { + "entry": { + "setup_playbook_id": "ICT-CH1-6-LONDON-DISCOUNT-REVERSAL", + } + } + } + ) + + self.assertEqual(features["model_playbook_id"], "ICT-CH1-6-LONDON-DISCOUNT-REVERSAL") + self.assertEqual(features["model_family"], "london_discount_reversal") + self.assertIn("liquidity_target_side", features["liquidity_contract"]) + def _complete_pd_array_payload() -> dict: return {