mirror of
https://ghfast.top/https://github.com/aeroxw/easy-tdx.git
synced 2026-09-12 16:54:17 +08:00
release: v1.17.0 — 回测可视化 Web UI(单标的/组合/寻优/对比)
回测从命令行升级到浏览器可视化。Vue3 + ECharts 单页应用,零代码完成 单标的回测、组合回测、参数网格寻优、结果对比四大场景。 后端新增回测 REST API + 策略注册表 + 后台任务执行器, 内置策略从 5 个扩充到 18 个。823 单测全绿。 README 新增 Web UI 章节,CHANGELOG 记录本次全部变更。
This commit is contained in:
@@ -2,6 +2,45 @@
|
||||
|
||||
本文件记录 easy-tdx 的版本变更。格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/)。
|
||||
|
||||
## [1.17.0] — 2026-07-03
|
||||
|
||||
**回测可视化 Web UI 大版本** —— 从命令行回测升级到浏览器可视化。Vue3 + ECharts 单页应用,零代码完成单标的回测、组合回测、参数寻优、结果对比四大场景。后端新增回测 REST API + 策略注册表 + 后台任务执行器,内置策略从 5 个扩充到 18 个。**823 单测全绿**,ruff / mypy strict / vue-tsc 全部通过。
|
||||
|
||||
### 新增
|
||||
|
||||
- **回测可视化 Web UI**(`web-ui/`)—— Vue3 + Vite + TypeScript + Pinia + ECharts 单页应用,四个功能页:
|
||||
- **单标的回测**:选标的取行情(日期范围 + 自动翻页),18 个内置策略任选,参数表单按 schema 动态渲染,K 线主图标买卖点(markPoint 按 datetime 对齐),净值回撤双轴图,19 项绩效指标表,成交明细
|
||||
- **组合回测**:多只股票等权组合,组合净值曲线(各标的按日期并集 forward-fill 对齐求和),各标的净值归一化叠加对比,横向绩效表
|
||||
- **参数寻优**:勾选 1-2 个参数填取值列表,itertools.product 网格遍历,排名表 + 二维热力图(ECharts heatmap),最优点一键跳转单标的页用该参数回测
|
||||
- **结果对比**:选 2-4 个已完成回测任务,归一化净值叠加,8 项指标横向 PK,支持单标的 + 组合混合对比
|
||||
- **回测 REST API**(`web/routers/backtest.py`)—— 6 个端点:
|
||||
- `GET /backtest/strategies` 策略枚举 + 参数 schema
|
||||
- `POST /backtest/run` 同步回测(内联 OHLCV)
|
||||
- `POST /backtest/run/async` 后台任务回测
|
||||
- `POST /backtest/portfolio/run/async` 组合回测
|
||||
- `POST /backtest/optimize/run/async` 参数网格寻优
|
||||
- `GET /backtest/tasks` + `GET /backtest/tasks/{id}` 任务列表 + 轮询
|
||||
- **策略注册表**(`backtest/strategies/`)—— `Param` schema 声明机制 + `ParametrizedStrategy` 基类,策略参数自描述供 Web 表单动态渲染。`@register_strategy` 装饰器登记到全局 registry
|
||||
- **后台任务执行器**(`web/task_runner.py`)—— ThreadPoolExecutor + 进程内 LRU 任务表,status-aware 淘汰(不淘汰 running 任务),线程安全单例 + lifespan shutdown 接入
|
||||
- **参数网格寻优器**(`backtest/optimizer.py`)—— `ParamGridOptimizer` 遍历参数笛卡尔积,按收益排序,2 参数生成热力图矩阵,网格上限 200 防爆炸,寻优时跳过参数范围检查(探索超范围值是寻优目的)
|
||||
- **内置策略扩充 5 → 18 个**(`backtest/strategies/builtin.py`),新增 13 个经典策略:
|
||||
- 趋势类:EMA 双线交叉、三均线系统、DMI 趋向指标、TRIX 三重平滑
|
||||
- 通道/突破类:唐安奇通道突破(海龟)、肯特纳通道(ATR-based)、ATR 通道突破
|
||||
- 震荡/反转类:CCI 超卖反弹、WR 威廉超卖、BIAS 乖离反弹、EMV 简易波动、DPO 区间震荡
|
||||
- 均线类:BBI 多空指标
|
||||
- **组合回测引擎改造**(`portfolio_engine.py`)—— 接受策略实例(参数透传到每个标的),新增组合净值曲线(按日期并集 forward-fill 对齐求和 + 回撤计算)
|
||||
|
||||
### 修复
|
||||
|
||||
- **取数翻页拼接后未排序**(`web-ui/src/api.ts`)—— 翻页拼接 concat 后页间时间逆序(page1=最新段,page2=更旧段),导致超过 800 根时图表/成交记录错乱。修复:concat 后按 datetime 排序
|
||||
- **日线 x 轴丢年份**(`KlineChart.vue`)—— `isIntraday` 用 `length > 10` 判断分钟线,但日线归一化后带 `T00:00:00` 后缀长度也 19,误判为分钟线走 slice(5,16) 砍年份。改为检查时分秒是否非零
|
||||
- **组合回测取数不翻页**(`routers/backtest.py` `_fetch_portfolio_bars`)—— 固定 count=800 不翻页,超 800 天数据缺失。改为翻页循环 + sort_values 排序
|
||||
- **寻优跳转参数未填充**(`BacktestView.vue`)—— OptimizeView 跳转传 query 参数,但 BacktestView 未读 route.query。加 useRoute() + nextTick 填充
|
||||
- **参数校验安全加固**(`registry.py` `Param.validate`)—— 拦截 NaN/Inf/giant-int(防 DoS),int(inf) 的 OverflowError 统一转 ValueError;ohlcv max_length=2000 防内存耗尽
|
||||
- **task_runner 并发竞态**(`task_runner.py`)—— LRU 淘汰跳过 running 任务(修复结果丢失),get_runner double-checked locking(修复单例竞态),shutdown 接入 lifespan(修复资源泄漏),submit+executor 原子化(消除注册-淘汰窗口)
|
||||
- **对比页只认单标的**(`CompareView.vue`)—— 校验只认 BacktestResult 结构,组合/寻优任务报错。新增 extractComparable() 支持组合(combined_equity)
|
||||
- **日线 bars 返回 date 列**(`api.ts` `normalizeBar`)—— 日线 bars 返回 `date` 列非 `datetime`,前端归一化为统一 datetime 字段
|
||||
|
||||
## [1.16.3] — 2026-07-02
|
||||
|
||||
### 修复
|
||||
|
||||
@@ -15,7 +15,9 @@ easy-tdx 要做的事很简单:**把机构的数据锁砸开,扔到每个普
|
||||
|
||||
**34个技术指标**(MACD、KDJ、RSI、BOLL……连”捉妖大师”和”30日乖离率信号”都给你算好)开箱即用。
|
||||
**缠论分析**(笔、中枢、买卖点、背驰)一键出结果——你不再需要手画分型、猜线段。
|
||||
**内置回测引擎**——写个策略文件,一行命令跑回测,16 个经典策略自带,多因子组合、策略选股扫描,批量对比哪个最赚钱一目了然。
|
||||
**内置回测引擎**——写个策略文件,一行命令跑回测,18 个经典策略自带,多因子组合、策略选股扫描,批量对比哪个最赚钱一目了然。
|
||||
|
||||
**回测可视化 Web UI**(v1.17 新增)——Vue3 + ECharts 单页应用,浏览器里选标的、挑策略、调参数,K 线买卖点、净值回撤、19 项绩效指标一目了然。支持组合回测、参数网格寻优、多策略结果对比,全程零代码。
|
||||
|
||||
装上就能跑。**Python API + CLI + Web API 三通道**,输出 JSON 天然喂给 AI Agent:Claude Code、OpenClaw、Hermes 直接吃。`easy-tdx serve` 一键起 REST 服务,浏览器打开就是交互式 API 文档。
|
||||
|
||||
@@ -432,7 +434,31 @@ easy-tdx portfolio --stocks SZ:000001,SH:600519 \
|
||||
| `--allocation` | 资金分配方式(目前支持 `equal` 均等分配) |
|
||||
| `--chanlun-level` | 自动计算缠论分析并注入策略(如 DAILY/30MIN) |
|
||||
|
||||
输出示例(以 SZ 300308 为例):
|
||||
**回测可视化 Web UI(v1.17 新增):**
|
||||
|
||||
不想写命令行?用浏览器。`easy-tdx serve` 启动后端,`web-ui/` 目录跑前端,浏览器打开就是完整的回测可视化界面。
|
||||
|
||||
```bash
|
||||
# 终端 1:启动后端
|
||||
easy-tdx serve --port 8000
|
||||
|
||||
# 终端 2:启动前端(web-ui/ 目录)
|
||||
cd web-ui && npm install && npm run dev
|
||||
# 浏览器打开 http://localhost:5173
|
||||
```
|
||||
|
||||
四个功能页,全程零代码:
|
||||
|
||||
| 页面 | 功能 |
|
||||
|------|------|
|
||||
| **单标的回测** | 选标的取行情,挑 18 个内置策略之一,调参数,K 线主图标买卖点,净值回撤双轴图,19 项绩效指标,成交明细 |
|
||||
| **组合回测** | 多只股票等权组合,组合净值曲线(按日期对齐求和),各标的净值叠加对比,横向绩效表 |
|
||||
| **参数寻优** | 勾选 1-2 个参数,填取值列表,网格遍历所有组合,排名表 + 二维热力图,最优点一键跳转回测 |
|
||||
| **结果对比** | 选 2-4 个已完成回测,归一化净值叠加,8 项指标横向 PK |
|
||||
|
||||
取行情支持日期范围选择,超过 800 根自动翻页拼接。技术栈:Vue 3 + Vite + TypeScript + Pinia + ECharts(按需引入)。
|
||||
|
||||
|
||||
|
||||
```
|
||||
发现 9 个策略文件
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "easy-tdx"
|
||||
version = "1.16.3"
|
||||
version = "1.17.0"
|
||||
description = "通达信 TCP 协议行情数据客户端,支持在线行情、离线数据读取与写入同步"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.10"
|
||||
|
||||
Reference in New Issue
Block a user