V2026.5.26
Changelog
2026.5.26
Added
- 自定义模式(可视化策略/指标构建器) — 策略实验室和指标实验室新增「自定义模式」按钮,弹出 VisualBuilder 模态面板,通过下拉框/滑块/开关可视化配置入场/出场规则、风控参数,编译为 Python 代码并加载到编辑器。策略实验室新增
/v1/strategy-lab/compile端点,compiler 新增compile_signal_engine()函数 - AI 对话面板 — 代码编辑器下方新增可折叠 AiChatPanel,用户输入自然语言描述,AI 流式生成代码直接写入编辑器,完成后自动保存并同步右侧列表。后端内置策略/指标合约系统提示词,无需用户手动编写
- 圆角卡片式页面布局 — 新增
.section-cardCSS 类,页面分隔从硬边框 (border-b/border-l) 改为rounded-2xl border shadow-sm圆角卡片 +gap-3 p-3间距,视觉更柔和
Changed
- AI Generate 按钮移除 — 页面头部的「AI 生成」按钮已由 AiChatPanel 替代,减少按钮拥挤
- 侧边栏折叠状态持久化 — 两个实验室的侧边栏折叠状态写入 localStorage,切换页面不再丢失
- 侧边栏列表滚动位置保持 — 点击列表项后不再跳回顶部,useLayoutEffect 自动恢复滚动位置
- 两个实验室标签汉化 — ChartPanel 中 Symbol→标的、Start→开始、End→结束、Source→数据源、Interval→周期、Load Data→加载数据、初始资金→ptInitialCapital(支持中英切换)
- 回测「Equity & Drawdown」汉化 — 硬编码英文替换为 i18n
equityDrawdown键(净值与回撤) - 会话列表空标题 — 新建会话不再显示裸 hex id(
c50f2760bf14),改为「未命名 #c50f2760」 - 未输入标的前端禁用回测按钮 — ChartPanel 中 symbol 为空时「加载数据」和「运行回测」按钮置灰不可点击
- 相关性矩阵移除「API 文档与指南」按钮
- 策略实验室默认代码模板汉化 — docstring、注释从英文翻译为中文
- i18n 新增 ~30 个键 — aiChat*、customMode、visualBuilder*、chartLoadData、unnamedSession、cancel 等
Fixed
-
Alpha 因子库调用报错修复 — indicator_lab_routes.py 生成的代码中
df["close"](Series)改为df[["close"]](单列 DataFrame),修复'Series' object has no attribute 'columns'错误,alpha 因子的compute()函数不再崩溃 -
回测引擎前瞻性偏差(4 项改进) — 审计发现策略可通过
generate()访问未来数据,导致回测虚高- Fast 模式渐进式信号生成 —
_run_fast()将一次性generate(data_map)替换为逐 bar 扩展窗口调用,策略在时点 T 只能看到data[0..T],从根源消除未来数据泄漏 - Simulation 模式数据截断 —
on_bar_batch()重排序:先generate()再追加新 bar,策略看不到当前 bar 数据,与_align()shift(1) 语义一致 - 止损/止盈支持 bar 内高低价 —
RiskPipeline新增check_position_intraday()方法,使用 bar high/low 检测止损/止盈在 bar 内触及,跳空以开盘价成交;优先级:止损 > 追迹止损 > 止盈 - 开盘价涨跌停判断 —
ChinaAEngine.can_execute()新增 open-based 涨跌停检查,开盘即封板时直接阻止交易,避免用收盘价判断但开盘价执行的时机不一致
- Fast 模式渐进式信号生成 —
-
MCP 服务器设计缺陷(5 项修复)
run_swarm移除 360×5s 轮询阻塞,立即返回 run_id,通过get_swarm_status/get_run_result异步查询write_file/read_file新增run_dir参数,默认工作目录~/.AStockPursue/workspace/,修复文件操作完全失效的问题_run_sync替换为持久后台事件循环_get_mcp_loop(),避免每次 MCP 调用创建新线程_unresolved返回格式从[code]升级为[{code, reason}],不再静默吞掉错误原因- MCP 配置文件写入后
chmod 0o600,防止凭证泄露
Changed
- Lab 模块重组 —
sandbox.py移至src/security/,repository.py/pg_repository.py移至src/lab/storage/,alpha_bench_store.py新建于src/db/ - Docker Compose 合并 —
docker-compose.pg.yml合并入docker-compose.yml,通过--profile pg按需启动 PostgreSQL - API 版本化 — 所有路由挂载
/v1前缀,前端request()统一拼接/v1前缀 - 前端类型拆分 — API 合约类型从
lib/api.ts提取到独立types/api.ts - i18n 新增 AlphaZoo/IndicatorLab 相关 key
- 前端 UX 全面优化
- 回测指标卡片化 — ChartPanel 回测指标从 K 线图底部文字条移至图表上方网格卡片,不会被工具栏按钮遮挡
- 权益曲线 Y 轴修复 — EquityChart grid 边距从 8px 增至 60px,containLabel 不再与绘图区域重叠
- 模拟盘代码/预览分离 — PaperTrading
codes状态拆分为deployCodes(部署弹窗)和previewSymbol(右侧预览),互不污染 - 模拟盘快速部署 — 策略库卡片新增「快速部署」按钮,一键填入代码 + 打开部署弹窗
- 模拟盘克隆修复 — 克隆从
/v1/runs/{runId}/configAPI 读取原始 codes - 模拟盘风控保存 — 风控 tab 新增「保存风控配置」按钮,调用
PUT /v1/runs/{runId}/risk - 模拟盘 SSE 切换 — 切换运行实例时自动断开旧 SSE 连接,避免事件串扰
- 模拟盘 K 线高度自适应 — 选中运行后 K 线图 220→320px,权益曲线 ResizeObserver 动态撑满
- 策略实验室移除空壳 Monitor tab — 删除无实际功能的运行监控面板及跨页面耦合
- 策略实验室 AI 取消 — 代码生成按钮旁新增取消按钮(AbortController),可中断长时间 SSE 流
- 策略实验室批量删除 — 删除策略前弹出 confirm 确认,防止误删
- useBacktest hook 提取 — PaperTrading/StrategyLab/IndicatorLab 共享回测状态管理,减少 ~200 行重复代码
- 自选股搜索输入 — WatchlistPanel 纯文本输入替换为 StockInput 组件,支持代码/名称/拼音搜索
- 自选股实时价格 — 新增 10 秒轮询自动刷新价格,无需手动点刷新
- 免费数据源卡片 — Settings 页面免费数据源区域加边框卡片 + 内层描边,层级分明
2026.5.25
Added
- TradingEngine — 统一回测和实盘执行引擎 — 新建
agent/src/trading/包(6 个模块,~1100 行),回测和模拟盘共享同一套on_bar()管道,SignalEngine 策略一次编写、两个场景运行TradingEngine— 统一on_bar(bar, ts) → BarResult管道:market hooks → 信号生成 → 优化器 → 风控检查 → 状态机约束 → 撮合执行 → 权益快照SignalAdapter— 自动检测 batch/tick 模式,batch 模式等价于_align()shift(1),tick 模式委托TickHandler.on_bar()BacktestDriver— 快速模式(预计算权重,回测结果 100% 向后兼容)+ 模拟模式(逐 bar 增量生成,匹配实盘行为)LiveDriver— 从PaperTradingScheduler提取异步实盘循环,连续错误熔断 + 心跳 + 种子历史数据OptimizerAdapter— 滚动窗口在线组合优化(Phase 2),支持风险平价等优化器RiskPipeline— 从papertrade/risk_manager.py迁移,止损/止盈/追迹止损/日内亏损限制FlatStateMachine— 从papertrade/state_machine.py迁移,强制 flat→long→flat→short 状态转换
- 回测模拟模式 —
BacktestDriver新增 simulation 模式,逐 bar 通过完整 signal pipeline,用于验证策略在真实环境中不会出现未来函数 - 状态代理模式 —
TradingEngine通过 property 代理将 capital/positions/trades 读写穿透到BaseEngine,确保CryptoEngine.on_bar()等子类 hook 看到一致状态
Changed
- 回测执行路径重组 —
BaseEngine._execute_bars()/_rebalance()/run_backtest()委托给BacktestDriver;backtest/runner.py直接使用BacktestDriver.run() - 模拟盘调度器简化 —
PaperTradingScheduler删除内联轮询循环,委托给LiveDriver.run(),调度器只保留 SSE 推送 + DB 持久化 - papertrade/ 向后兼容 —
engine.py/tick_handler.py/risk_manager.py/state_machine.py改为 re-export,所有外部 import 路径不受影响 - api_server.py 拆分 — 2650 行巨型文件拆分为 6 个路由模块(runs/sessions/settings/auth/system)+ 共享工具 common.py,缩减 88%
- API 版本化 — 所有路由挂载
/v1前缀,为未来 API 变更预留空间 - Docker Compose 合并 —
docker-compose.pg.yml合并入docker-compose.yml,通过--profile pg按需启动 PostgreSQL - Lab/ 模块重组 —
sandbox.py移至src/security/,repository.py/pg_repository.py移至src/lab/storage/,职责更清晰 - 前端类型拆分 — API 合约类型从
lib/api.ts(508 行)提取到独立types/api.ts(~290 行) - SSE 管理统一 — 提取
lib/sseClient.ts共享工具(LRU 去重 + 指数退避重连),useSSEhook 和paperTradingStore统一使用 - 前端 request() 去重 —
services/paperTrading.ts删除重复的request()实现,改用lib/api.ts导出
Fixed
- user_id 硬编码 — 26 处
auth.get("user_id", 1)防御性回退替换为auth["user_id"],由require_auth保证存在 - auth 端点速率限制 —
/api/auth/login和/register增加内存滑动窗口限流(5 次/分钟),防暴力破解
Added
- 前端测试基础设施 — vitest + testing-library + jsdom,3 个测试文件 17 个测试用例(api/apiAuth/StockInput)
Full Changelog: dev-2026.5.24...V2026.5.26