Skip to content

Releases: handsomejustin/easy_tdx

v1.10.0 — Web API 层(FastAPI REST + WebSocket)

11 Jun 19:37

Choose a tag to compare

🌐 easy-tdx v1.10.0 — Web API 层

将 easy-tdx 一键暴露为 REST + WebSocket HTTP API,支持跨语言、跨平台、远程调用。

✨ 新功能

  • FastAPI REST API — 全部 AsyncTdxClient 方法暴露为 REST 端点
    • /api/v1/security/* — 证券列表、实时报价、市场统计
    • /api/v1/bars/* — K线、指数K线、分时、逐笔成交
    • /api/v1/xdxr, /api/v1/finance/* — 除权除息、财务、公司信息
    • /api/v1/block — 板块信息
    • /api/v1/chanlun/analyze — 缠论分析(POST)
  • WebSocket 实时行情/ws/realtime/{symbol},支持多标的动态订阅
  • CLI easy-tdx serve — 一行命令启动 Web 服务器
  • 自动 API 文档 — Swagger UI (/docs) + ReDoc (/redoc)
  • 可选依赖pip install easy-tdx[web],核心安装不受影响

🚀 快速开始

pip install easy-tdx[web]
easy-tdx serve
# 浏览器打开 http://127.0.0.1:8000/docs 查看完整 API 文档

🐛 Bug 修复

  • 修复 deps.py 运行时 NameError(500 → 正常启动)
  • 修复 market/category 参数不支持小写和非法值(500 → 400 Bad Request)

📊 测试覆盖

  • 20 个离线单元测试(无需网络)
  • 409 全量单元测试通过,无回归
  • mypy strict 零错误
  • ruff check + format 全通过

📁 新增文件(14 个)

src/easy_tdx/web/
├── __init__.py          # 公共 API
├── app.py               # FastAPI app factory + lifespan
├── deps.py              # 依赖注入
├── schemas.py           # Pydantic 模型
├── convert.py           # 参数转换(大小写 + 验证)
├── errors.py            # 异常处理
└── routers/
    ├── market.py        # 行情路由
    ├── bars.py          # K线路由
    ├── finance.py       # 财务路由
    ├── block.py         # 板块路由
    ├── chanlun.py        # 缠论路由
    └── realtime.py      # WebSocket 路由

v1.9.10 — 板块 N 日涨跌幅排行

11 Jun 09:41

Choose a tag to compare

新功能:板块 N 日涨跌幅排行

新增 board-change-ranking 命令,支持按行业/概念/风格板块计算指定日期前 N 个交易日的涨跌幅并排行。

CLI 用法

# 行业板块 20 日涨跌幅排行(默认全部)
easy-tdx board-change-ranking --table

# 概念板块 10 日涨跌幅排行
easy-tdx board-change-ranking --type GN --days 10 --table

# 指定截止日期
easy-tdx board-change-ranking --type HY --date 20250530 --days 20 --table

# 行业跌幅前 10
easy-tdx board-change-ranking --type HY --top 10 --asc

Python API

from easy_tdx.mac.client import MacClient
from easy_tdx.mac.enums import BoardType

with MacClient.from_best_host() as c:
    # 全部行业板块 20 日涨跌幅
    df = c.get_board_change_ranking(BoardType.HY, days=20)

    # 概念板块指定日期前 10 日涨跌幅 Top 15
    df = c.get_board_change_ranking(
        BoardType.GN, target_date=20250530, days=10, top_n=15
    )

变更摘要

  • 新增 MacClient.get_board_change_ranking() / AsyncMacClient 同名异步方法
  • 新增 CLI 命令 easy-tdx board-change-ranking
  • 利用板块指数 K 线直接计算,无需逐个聚合成分股
  • 支持指定截止日期,周末/节假日自动回退到前一交易日
  • 默认列出全部板块,--top N 截断
  • 12 个单元测试覆盖计算正确性、边界条件、排序方向

Full Changelog: v1.9.9...v1.9.10

v1.9.9 — 修复并发扫描 Pickle Bug

10 Jun 20:24

Choose a tag to compare

v1.9.9 修复并发扫描 Pickle Bug

问题

--workers N 并发模式使用动态 importlib 加载的策略类时,子进程无法 pickle 反序列化,导致静默返回空结果。

根因

ProcessPoolExecutor 将策略类对象 pickle 序列化后发送到子进程。动态加载的类模块(如 strategy_module)未注册到子进程的 sys.modules,反序列化失败。异常被 except Exception: continue 静默吞掉。

修复

  • _scan_parallel 改为传递策略文件路径(字符串),子进程内自行通过 _load_strategy_class 加载
  • 新增 _get_strategy_file:从类方法 co_filename 反查策略源文件路径
  • 新增回归测试 TestParallelPickleFix

验证

  • 381 测试全部通过(含新增回归测试)
  • ruff check 全绿
  • 并发模式 --workers 4 现在可正常返回信号

Full Changelog: v1.9.8...v1.9.9

v1.9.8 — CI 修复

10 Jun 20:13

Choose a tag to compare

v1.9.8 CI 修复

修复 CI 流水线配置问题,无功能变更。

修复

  • MyTT.pyi 类型存根排除 ruff 行长度检查(.pyi 文件签名天然较长)
  • 添加 pytest-asyncio 开发依赖,修复 test_realtime.py 异步测试
  • 修复 test_backtest_engine.py 未使用变量 lint 警告

验证

  • 380 测试全部通过
  • ruff check 全绿
  • 覆盖率 57%+

Full Changelog: v1.9.7...v1.9.8

v1.9.7 — CLI 全量集成

10 Jun 19:59

Choose a tag to compare

v1.9.7 CLI 全量集成

v1.9.6 新增的 6 项功能全部暴露到 CLI,修复缠论多级别联立的 client 生命周期 bug。

新增 CLI 参数

  • screen scan --workers N — 并发扫描,ProcessPoolExecutor 并行处理,推荐 4-8 进程,速度提升 4-8 倍
  • screen scan --cache PATH — 增量扫描缓存,mtime 检测未修改的 .day 文件自动跳过
  • backtest --chanlun-level LEVEL — 缠论自动桥接,引擎自动计算缠论分析并注入策略 self.chanlun
  • portfolio — 全新命令,多标的组合回测(共享资金池、均等分配、汇总绩效)
  • chanlun --multi-level PERIOD — 多级别联立分析,分析高级别最后一笔在低级别中的趋势方向、笔重叠、背驰条件

Bug 修复

  • cmd_chanlun.py client 生命周期 bug_run_multi_levelwith 块外使用 client,导致已关闭连接报错,已将 multi-level 逻辑移入 with 块内

用法示例

# 并发扫描 + 增量缓存
easy-tdx screen scan --strategy strategies/rsi_reversal.py --workers 4 --cache scan_cache.json

# 缠论自动桥接回测
easy-tdx backtest SZ 000001 --strategy-file chanlun_strategy.py --chanlun-level DAILY --table

# 多标的组合回测
easy-tdx portfolio --stocks SZ:000001,SH:600519,SH:600036 --strategy-file ma_cross.py --table

# 多级别缠论联立
easy-tdx chanlun SZ 000001 --multi-level 30MIN --table

Full Changelog: v1.9.6...v1.9.7

v1.9.5 — OBV 能量潮趋势策略

10 Jun 10:53

Choose a tag to compare

新增:OBV 能量潮趋势策略

strategies/obv_trend.py — 基于 OBV 与其 30 日均线 MAOBV 的关系判断多空方向。

策略逻辑

  • 入场:OBV 超过 MAOBV 达 2% 缓冲带,且 MAOBV 趋势向上(20 根 K 线确认)
  • 出场:OBV 跌破 MAOBV,资金流向转空即离场
  • MAOBV 趋势仅作入场过滤,出场只看 OBV/MAOBV 交叉信号,避免过度交易

设计要点

  • 缓冲带 obv_buffer=0.02:过滤 OBV 与 MAOBV 交叉区域的假突破噪声
  • MAOBV 趋势回溯 maobv_lookback=20:30 日均线用 20 根确认趋势,稳定可靠
  • 可调参数:maobv_period(30)、maobv_lookback(20)、obv_buffer(0.02)

使用

easy-tdx backtest SZ 000001 --strategy-file strategies/obv_trend.py --count 500 --table

完整变更

  • 新增 strategies/obv_trend.py 策略文件
  • 更新 README.md 策略表格和 Changelog
  • 更新 strategies/README.md 策略列表
  • 版本号升级至 1.9.5

v1.9.4 修复 version 命令硬编码版本号

09 Jun 19:41

Choose a tag to compare

v1.9.4 Bug 修复

修复 easy-tdx version 命令硬编码版本号 1.1.0 的问题,改为从 pyproject.toml 动态读取。

修复

  • 修复 cmd_admin.pyversion 命令硬编码 1.1.0 的问题
  • 版本号现在通过 importlib.metadatapyproject.toml 动态获取,不再需要手动同步

变更文件

  • 修改 src/easy_tdx/cli/cmd_admin.py — 移除硬编码版本号,改为动态读取
  • 修改 pyproject.toml — 版本号升级 1.9.4
  • 修改 README.md — 更新 Changelog

v1.9.3 新增 run-all CLI 命令:一行命令批量跑完所有策略

09 Jun 19:25

Choose a tag to compare

v1.9.3 新增 run-all CLI 命令

一行命令批量运行 strategies/ 目录下所有策略并排名,与 run_all_strategies.py 脚本功能完全一致。

新增

  • easy-tdx run-all CLI 命令,支持以下参数:
    • --count / --cash / --commission / --adjust / --period — 回测参数
    • --combo / --combo-mode — 多因子组合回测
    • --show — 显示最佳策略资金曲线 vs 股价对比图
    • --strategies-dir — 自定义策略文件目录

输出内容

  • 策略绩效排名(按总收益率降序)
  • 综合评分排名(Sharpe×0.4 + Ret/DD×0.3 + WinRate×0.3)
  • 最佳策略详细交易明细
  • 可选多因子组合回测(自动遍历 C(N,k) 所有组合)
  • 可选 matplotlib 资金曲线图表

用法

# 基本用法
easy-tdx run-all SZ 300308 --count 2000 --cash 1000000 --adjust QFQ

# 多因子组合回测
easy-tdx run-all SZ 300308 --combo 2 --combo-mode MAJORITY

# 显示图表
easy-tdx run-all SZ 300308 --show

变更文件

  • 新增 src/easy_tdx/cli/cmd_run_all.py — run-all 命令实现
  • 修改 src/easy_tdx/cli/__init__.py — 注册命令
  • 修改 README.md — 文档更新
  • 修改 pyproject.toml — 版本号升级

v1.8.2 - 内置回测引擎,增加资金曲线展示

09 Jun 15:20

Choose a tag to compare

策略扩充 + 可视化 — 新增 6 个策略(共 15 个)、--show 资金曲线图、茅台 demo 截图。

新增 run_all_strategies.py --show 参数:自动弹出最佳策略资金曲线 vs 股价归一化对比图(matplotlib 双轴图 + 买卖点标记)
新增 zhuoyao_momentum 策略:ZHUOYAO 多周期共振(SHORT/TREND/MID 三重过滤)
新增 dmi_trend 策略:DMI/ADX 趋势强度跟踪
新增 cci_breakout 策略:CCI ±100 区间突破
新增 mfi_volume 策略:MFI 量价反转(带成交量权重的 RSI)
新增 trix_cross 策略:TRIX 三重平滑趋势交叉
新增 mtm_momentum 策略:MTM 动量零线穿越
新增 SH600519 贵州茅台 demo 截图

v1.8.0 - 内置回测引擎

09 Jun 12:42

Choose a tag to compare

1.8.0 (2026-06-09)
回测引擎 — 内置向量回测引擎,支持自定义策略回测和全策略批量对比。

新增 backtest 子包:Strategy 基类、BacktestEngine、OrderSimulator、PortfolioTracker、PerformanceAnalyzer
新增 easy-tdx backtest CLI 命令,支持 --strategy-file、--cash、--commission、--adjust 等参数
绩效报告包含 19 项指标:总收益率、年化收益、最大回撤、夏普比率、索提诺、卡玛、胜率、盈亏比等
新增 strategies/ 目录,包含 9 个开箱即用的策略示例(MA/EMA/MACD/BOLL/RSI/KDJ/BIAS/海龟/量价)
新增 run_all_strategies.py 批量对比脚本,一键跑完全部策略并按收益率和综合评分排名
自带策略在 SZ 300308 上 3 年回测:收益率最高 1413%(expma_cross),综合最优 turtle_breakout
30+ 离线单元测试覆盖,零网络依赖