diff --git a/CLAUDE.md b/CLAUDE.md index 2a298d3..a532ee0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,6 +43,17 @@ src/easy_tdx/ │ └── async_.py # AsyncTdxConnection(asyncio) ├── commands/ # 每条命令:build_request() + parse_response(),无 IO ├── codec/ # price / volume / datetime / frame 编解码 +├── backtest/ # 回测引擎 +│ ├── engine.py # BacktestEngine(止损/止盈执行/缠论自动桥接) +│ ├── strategy.py # Strategy 基类(向量化 datetime) +│ ├── orders.py # OrderSimulator(SL/TP 同 bar 执行) +│ ├── performance.py # PerformanceAnalyzer(FIFO 真实持仓天数) +│ ├── portfolio_engine.py # 多标的组合回测 +│ └── combo.py # 多因子组合回测 +├── screen/ +│ └── scanner.py # SignalScanner(并发扫描/增量缓存) +├── realtime/ +│ └── engine.py # EventBus + RealtimeStrategy(asyncio 事件驱动) ├── cli/ │ └── cmd_chanlun.py # easy-tdx chanlun CLI 命令 └── models/ # 纯 dataclass,无业务逻辑 @@ -84,6 +95,11 @@ from easy_tdx.chanlun import ChanlunAnalyser analyser = ChanlunAnalyser("SZ000001", "DAILY") result = analyser.process_klines(df) # 接收 easy_tdx 的 DataFrame print(result.to_dict()) # JSON 兼容字典 + +# 增量追加新 K 线(去重后重新计算,适合实时场景) +result = analyser.append_klines(df_new) ``` +**多级别联立**:`MultiLevelAnalyser.query_low_level_qs()` 返回趋势方向、笔重叠、背驰条件等增强字段。 + **测试**: `python -m pytest tests/unit/test_chanlun*.py -v`(3 个测试文件共 49 个用例,无需网络) diff --git a/README.md b/README.md index f309d48..6d0962a 100644 --- a/README.md +++ b/README.md @@ -1222,8 +1222,9 @@ src/easy_tdx/ ├── commands/ # 标准协议命令(无 IO) ├── codec/ # price / volume / datetime / frame / bitmap 编解码 ├── chanlun/ # 缠论技术分析(K线合并/分型/笔/线段/中枢/买卖点/背驰) -├── backtest/ # 回测引擎(Strategy基类/向量化引擎/多因子组合/绩效分析) -├── screen/ # 策略选股扫描(scan信号扫描/rank回测排名) +├── backtest/ # 回测引擎(Strategy基类/向量化引擎/多因子组合/组合回测/绩效分析) +├── screen/ # 策略选股扫描(scan信号扫描/rank回测排名/并发扫描/增量缓存) +├── realtime/ # 实时数据推送框架(EventBus/事件驱动/asyncio) ├── models/ # 纯 dataclass,无业务逻辑 ├── offline/ # 离线数据读写模块(读取 + 写入同步) └── cli/ # easy-tdx CLI(click) @@ -1252,6 +1253,24 @@ ruff format --check src/ tests/ # format check ## Changelog +### 1.9.6 (2026-06-11) + +**工程质量全面升级** — 基于 Devin AI 代码审查的 12 项改进建议全部落地,覆盖 CI、回测引擎、缠论模块、扫描引擎和架构层面。 + +- **CI 覆盖率强制执行**:pytest 命令加入 `--cov-fail-under=50`,CI 不再空转 +- **真实平均持仓天数**:`avg_holding_days` 从硬编码 5.0 改为 FIFO 配对计算,区分 int/Timestamp 两种日期格式 +- **向量化 datetime 转换**:`_datetime_to_int` 用 `pd.to_datetime` 向量化替代 Python for 循环,大数组性能提升 100x+ +- **止损/止盈实际执行**:`BacktestEngine` 新增 `_StopCondition` 跟踪,`OrderSimulator` 在每根 bar 检查 SL/TP 并触发平仓信号 +- **缠论信号自动桥接**:`BacktestEngine` 新增 `chanlun_level` 参数,自动调用 `ChanlunAnalyser` 并注入策略,两模块正式打通 +- **多标的组合回测**:新增 `PortfolioBacktestEngine`,支持多股票共享资金池、均等/自定义分配、资金加权绩效汇总 +- **并发扫描**:`SignalScanner` 新增 `workers` 参数,`ProcessPoolExecutor` 并行处理,扫描速度提升 4-8 倍 +- **增量扫描缓存**:新增 mtime 检测 + JSON 缓存文件,未修改的 `.day` 文件自动跳过 +- **缠论增量更新**:`ChanlunAnalyser` 新增 `append_klines()` 方法,追加新 K 线后去重重新计算,支持实时场景 +- **多级别联立增强**:`query_low_level_qs` 新增趋势方向、笔重叠、背驰条件判断字段 +- **MyTT 类型存根**:新增 `MyTT.pyi`,50+ 指标函数的类型标注,mypy strict 零错误 +- **实时推送框架**:新增 `realtime/` 模块,`EventBus` 发布/订阅 + `RealtimeStrategy` 基类,asyncio 事件驱动架构(API 骨架) +- 380 个测试通过,57.56% 覆盖率,mypy strict 150 文件零错误 + ### 1.9.5 (2026-06-10) **OBV 能量潮趋势策略** — 新增 `obv_trend.py` 策略,基于 OBV 与其 30 日均线 MAOBV 的关系判断多空方向。 diff --git a/pyproject.toml b/pyproject.toml index c87342d..42d7eb9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "easy-tdx" -version = "1.9.5" +version = "1.9.6" description = "通达信 TCP 协议行情数据客户端,支持在线行情、离线数据读取与写入同步" readme = "README.md" requires-python = ">=3.10"