Skip to content

V2026.5.26

Choose a tag to compare

@SZWzz SZWzz released this 26 May 14:48

Changelog

2026.5.26

Added

  • 自定义模式(可视化策略/指标构建器) — 策略实验室和指标实验室新增「自定义模式」按钮,弹出 VisualBuilder 模态面板,通过下拉框/滑块/开关可视化配置入场/出场规则、风控参数,编译为 Python 代码并加载到编辑器。策略实验室新增 /v1/strategy-lab/compile 端点,compiler 新增 compile_signal_engine() 函数
  • AI 对话面板 — 代码编辑器下方新增可折叠 AiChatPanel,用户输入自然语言描述,AI 流式生成代码直接写入编辑器,完成后自动保存并同步右侧列表。后端内置策略/指标合约系统提示词,无需用户手动编写
  • 圆角卡片式页面布局 — 新增 .section-card CSS 类,页面分隔从硬边框 (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 涨跌停检查,开盘即封板时直接阻止交易,避免用收盘价判断但开盘价执行的时机不一致
  • 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}/config API 读取原始 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() 委托给 BacktestDriverbacktest/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 去重 + 指数退避重连),useSSE hook 和 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