# IMPLEMENTATION_REPORT — ECR-002 **Date:** 2026-08-06 **Status:** Implemented(待 CODE_REVIEW) **Change Level:** L3(行为冻结) ## What changed 将 `web/services/runtime.py`(~1178 行)拆为包 `web/services/runtime/`: | Module | Responsibility | |--------|----------------| | `state.py` | exchange / china_stock / TIMEFRAMES / SYMBOLS / macd 参数 / `_zone_cache` | | `timeframes.py` | 周期换算、默认值、大小比较、zone TTL | | `market_data.py` | K 线拉取(datasvc / ccxt / A 股)、元信息刷新 | | `indicators.py` | `add_indicators` / `calculate_macd` | | `analyze.py` | `analyze_chan` / `classify_trend_stage` | | `serialize.py` | ChanMACD 序列化、JSON 清洗、未完成线段 | | `__init__.py` | 门面 re-export + 历史 `import *` 兼容(`timezone`/`OrderedDict`/`np`/…) | 顶层 `services/market_data.py` 等薄 shim 仍从 `services.runtime` 再导出。 **未做(ECR 可选):** `chart_tv.js` 拆分。 ## Compatibility - `from services.runtime import *` / `import services.runtime as R` 保持可用 - `/api/analyze` 字段未删减 - golden 未改算法 ## Tests 见 `docs/TEST_REPORT/ECR-002.md`(13 passed)。 ## Follow-ups - CODE_REVIEW Approve - 可选:`symbols.macd_config` POST 写回 `state.macd_*`(历史 quirks,本 ECR 未改)