shy3130
|
5825c7b537
|
docs(promo): DeepSeek v4.1 Flash 折扣文案 6 折 → 3 折
RunningHub 推广调整, 上游 /v1/models 实测 discountRate=0.3;
模型列表折扣徽章为动态下发无需改动, 仅同步三处硬编码文案。
|
2026-10-16 22:04:27 +08:00 |
|
shy3130
|
8f9251c77f
|
chore: v0.3.8
|
2026-10-16 18:26:43 +08:00 |
|
shy3130
|
d6f6962909
|
feat(guard): 二次开发升级保护 — 程序文件常备备份/升级对比报告/一键恢复
|
2026-10-16 16:45:03 +08:00 |
|
shy3130
|
be7db8d8b8
|
feat(ui): AI 设置操作卡新增测试连接按钮与内联结果徽章
|
2026-10-16 16:44:54 +08:00 |
|
intfoo
|
991cb6768c
|
feat(strategy): 策略参数 UI 元数据(级联显隐 / 分组 / 预设批量应用) (#447)
* feat(strategy): 策略参数 UI 元数据(级联显隐 / 分组 / 预设批量应用)
META["params"] 的 dict 项本就由后端 _normalize_param_item 原样透传额外
key,三个可选 UI 元数据字段零后端改动即可生效,未声明的参数行为不变:
- visible_if: 级联显隐,支持 {param,in} 单条件与 all/any 递归组合;
隐藏仅是显示层过滤,参数值仍按当前值随请求提交(策略语义不受影响)
- group: 相同组名的相邻参数在参数面板归并为一节(带节标题)
- option_applies: select 选中某选项时批量应用一组参数值(如标的池预设)
实现:
- 新增 lib/strategyParams.ts(递归条件求值 + 分组归并,含 vitest 单测)
- 回测页参数面板:分节渲染 + 级联联动 + 命名组内横排布局
- 策略设置弹窗:同样分节 + 级联 + 预设应用
- paramSweep:级联隐藏参数不参与扫描(按持久化默认值判定显隐)
- strategy-guide 双文档补元数据说明
* fix(strategy): 精简指南移除 UI 元数据注释行 — 修复 5000 字符上限测试
* fix(frontend): 参数扫描面板短标签加组名前缀 — paramDisplayLabel
分组内短标签(「止盈」「入池」)脱离分组上下文后不可区分: 扫描面板是
平铺列表, 同名参数挤在一起无法辨认, 级联隐藏提示行同样不可读。
新增 paramDisplayLabel (组名 · 标签), 用于扫描行与隐藏提示;
参数面板本身有组标题不受影响。
|
2026-10-16 14:06:37 +08:00 |
|
intfoo
|
d3363b5a10
|
perf(frontend): 策略设置界面渲染优化 — 行级 memo/去 backdrop-filter (#448)
两处策略设置界面在参数较多时交互与滚动掉帧,根因与修法相同:
1. 参数行无差别重渲: 任何参数修改都触发整个界面重渲染。ParamField
(选股页策略设置弹窗) 与 StrategyParamInput (回测页高级策略设置抽屉)
memo 化, onChange 改 (pid, v) 签名 + 父组件 useCallback 稳定回调,
单参数修改只重渲对应行
2. backdrop-filter 拖垮滚动合成路径: 移除选股弹窗面板 backdrop-blur-xl
(背景 95% 不透明, 模糊视觉无感) 与回测抽屉遮罩 backdrop-blur-[1px]
(1px 模糊视觉无感)
3. 选股弹窗 Section 新增 animateCollapse prop (默认 true 行为不变):
内容很高的「策略参数」区跳过 framer-motion height 0→auto 动画
(每帧全量 layout 导致展开卡顿), 直接显隐
无行为/语义变化, 纯渲染性能优化
|
2026-10-16 13:46:48 +08:00 |
|
shy3130
|
72e97cc790
|
fix(ui): 端点测速应用按钮打开即显示
不再要求测速成功才出现, 测速期间保持可点击。
|
2026-10-15 12:27:59 +08:00 |
|
shy3130
|
a292f7bc58
|
feat(migrate): 内置策略按 ID 种入 custom — 修复升级丢失 25 个策略
启动时按文件名补缺, 不覆盖已有, 标记防复活; 桌面打包 datas 落盘,
前端迁移 toast 同步提示。
|
2026-10-15 12:27:59 +08:00 |
|
shy3130
|
db300cad45
|
refactor(ui): 页面包更名为页面插件
消除断句歧义, 与数据源插件命名对齐; 仅改文案, 代码层标识不动。
|
2026-10-15 12:27:59 +08:00 |
|
intfoo
|
2a1c076831
|
fix(frontend): AI 未配置提示跳转链接改用 BASE_URL,兼容子路径部署 (#476)
* fix(frontend): AI 未配置提示链接改用 BASE_URL,兼容子路径部署
CustomSignalDialog 的 <a href="/settings?tab=ai"> 硬编码根路径,
部署在子路径(vite base ≠ /,如反向代理挂载子目录)时点击会落到
站点根被兜底 404;改为模板字符串拼 import.meta.env.BASE_URL,
根部署(BASE_URL=/)行为完全不变。
验证: pnpm build (tsc -b && vite build) 通过。
* fix(frontend): 三处 AI 未配置跳转改用 BASE_URL,兼容子路径部署
StockAnalysisDialog / AiAnalysisDialog / StrategyBuilderDialog 的
window.location.href = '/settings?tab=ai' 同样硬编码根路径,子路径
部署下 404;统一改为 import.meta.env.BASE_URL 拼接,根部署行为不变。
验证: pnpm build (tsc -b && vite build) 通过。
|
2026-10-14 19:11:25 +08:00 |
|
shy3130
|
ec8307eb3b
|
chore: v0.3.7
|
2026-10-14 15:11:55 +08:00 |
|
shy3130
|
b14f3679d5
|
feat(paper): 模拟盘重构 — 多账户对比与策略自动执行
- 对比榜单 14 列可排序, 盘中实时估值; 行展开完整账户操作台
- 创建即绑策略自动执行: 入场信号买入 · 出场信号全平, 支持最大持仓
(对齐回测口径)、仓位、订单类型、冷却; 批量创建同享
- 账户删除 (两步强确认)、冻结; 回合明细; 基础配置 (新账户默认参数)
- 策略联想下拉重设计: 全量候选、两行式选项、portal 防裁剪
|
2026-10-14 15:11:54 +08:00 |
|
shy3130
|
ac7d8c1c8f
|
fix(ui): 无全市场分钟能力时隐藏板块轮动卡
|
2026-10-14 15:11:46 +08:00 |
|
shy3130
|
ca7801dc14
|
fix(ui): 界面缩放改用 transform scale — 修复缩放非 100% 时图表鼠标命中偏移
|
2026-10-14 15:11:46 +08:00 |
|
shy3130
|
ecb49cbaca
|
release: v0.3.6 — 核心+扩展架构完善版
合并 0.3.6 分支全部内容 (36 提交, 详细历史见 0.3.6 分支):
■ 数据与插件
- TdxQuant 数据源: 通达信量化接入 (实时/五档/日K/复权/分钟), tdxaidata 收进默认依赖
- 扩展表两级拉取配方: 概念/行业出厂即带完整可拉配置, 可作自定义接入参考示例
- 能力门禁日志带生效源; 标的池解析只走 instruments 维表
■ 页面扩展化
- 11 个官方页面全量迁移为单文件扩展 (custom/*/extension.tsx), 删目录即卸载
- 运行时页面包系统: 打包产物上传即挂载, 免重建宿主
- 新装用户扩展页默认隐藏, 老用户升级菜单无感
■ AI
- Responses 协议接入; 会话历史与长任务跨设备同步 (服务端注册表)
- 助手头部快捷入口 + 悬浮球拖拽 zoom 坐标系修复 + 系统设置开关
■ 界面
- 设置「关于」子菜单: 版权/更新/打赏 + 开源许可弹窗与合规声明双保险
- 侧栏两态收起、数据/AI 助手快捷行 (同步呼吸光晕)、核心/扩展 ext 标记
- 界面缩放默认 90%; 菜单设置徽标 Swiss 化; 策略池「叠加」分组
- 情绪评分口径可配置; 财务画像 5 张子表手动拉取
■ 文档与其他
- README 重构「核心+扩展」主线 + 架构图重画; 开放端点数核实为 65
- 版本号 bump 0.3.6; tdx 物化库测试夹具补 macOS dylib
|
2026-10-13 13:40:17 +08:00 |
|
shy3130
|
350ffbf612
|
chore(build): 精简 Dockerfile 可选构建阶段, 清理文档与引导页冗余引用
|
2026-10-11 15:42:55 +08:00 |
|
shy3130
|
c565afefd9
|
fix(ui): AI 助手双入口降至 z-30 常驻入口层, 弹窗不再被悬浮图标遮挡
菜单侧栏对话入口(z-[55])与可拖动悬浮球(z-[59])原本高于 z-50 标准弹窗层,
任何弹窗打开时都悬浮其上且可点击遮挡。统一降至 z-30 常驻入口层:
高于页面内容、低于 z-40 遮罩与 z-50 弹窗; AI 助手面板(z-60)仍在入口之上。
|
2026-10-11 10:46:43 +08:00 |
|
shy3130
|
c3afd3470a
|
refactor(ui): 分区命名统一 —「纪律与触发」改为「风控触发」(弹窗+回测抽屉+测试+文档)
|
2026-10-11 10:44:26 +08:00 |
|
shy3130
|
da51ff5711
|
feat(migrate): 旧数据目录一次性自动迁移 — 信号自动种入 + 失效策略自动归档
老环境升级后进入策略页逐文件报错刷屏、信号库为空, 需要用户手动搬运。
改为启动时自动完成, 前端只提示一次:
- 信号种子: data/user_data/custom_signals 为空且从未种过(.seeded_v1
标记防重)时写入 20 个默认定义(原内置信号, 带 signal_* 列名), 写入
即用户数据可编辑可删; 用户已有自定义信号时不掺入只落标记; 全删后
重启不复活
- 失效策略归档: 引擎加载后把「内置残留」类失败(composite 子策略断链/
import 已删内置模块/引用不存在的策略)移入同目录 _archive_unloadable/
(引擎只扫顶层 *.py), 归档后 reload; 语法错误等普通失败不归档仍走
原提示; 同名碰撞追加序号不覆盖
- 提示一次: /api/strategies 透出 legacy_migration 摘要, 前端按迁移
指纹 localStorage 防重, 一条 toast 说明种入/归档结果
单一事实源: app/strategy/signal_seeds.py (tests/fixtures JSON 同内容,
tests/signal_seeds.py 改为从此读取)。回归: 6 个新迁移测试 + 后端 66
passed + 前端 vitest 125 + tsc 0; 本机实启验证 66 策略/0 错误/不重复
种入(标记落盘)
|
2026-10-10 22:15:17 +08:00 |
|
shy3130
|
9fdf7266a3
|
fix(screener): 旧数据目录升级的宽容降级 — 兼容垫片 + run_all 跳过失效 ID + 报错聚合
内置策略移除后, 老环境(策略池残留内置 ID / 自定义文件 import 旧模块 /
composite 断链)进入策略页会刷屏报错。三层修复:
- 兼容垫片: app/strategy/builtin/factor_rank_research 透明转发到
app.strategy.research —— 旧策略文件 import 零改动继续可用
- /run_all 宽容: 混合未知 ID 跳过继续跑并回 skipped_unknown(全部未知
才 404); 前端据此自动清策略池并提示一次, 空库场景 prune 的兜底
- 前端 load_errors toast 聚合: 多个失败合并为一条带文件名与修复指引,
不再逐条刷屏
配套回归: tests/test_legacy_upgrade_degrade.py(垫片转发/混合跳过/全未知
404); 后端 34 passed + 前端 vitest 125 passed + tsc 0 错
|
2026-10-10 21:47:46 +08:00 |
|
shy3130
|
918c7ade7e
|
refactor(core): 策略与信号全面去内置化, 转为用户自定义定义
- 策略: 引擎只加载 data/strategies/{custom,ai,composite} 与研究模板目录,
原 25 个内置策略一次性迁移为用户自定义文件(ID 不变, 引用零迁移);
研究模板移至 app/strategy/research, 打包 spec 同步; 新装环境策略库为空
- 信号: 管线不再硬编码任何信号表达式; 涨跌停判定价成为运行时列
limit_up_price/limit_down_price(生效价∓0.005 容差), 20 个信号转为
data/user_data/custom_signals 定义(显式 column 沿用 signal_* 原列名);
依赖解析/注入顺序/当日路径 prev-join 全部定义驱动; 语义统一为历史路径
口径(顺带修正当日路径 BOLL 比较符与翘板/炸板空值两处既有偏差)
- 前端: 信号库单列表(全部可编辑), SignalPicker/监控选项/信号标签全走
定义接口; 回测页新增免责声明(模拟性质/数据源准确性不作保证/不构成
投资建议)
- 测试: 25 个策略夹具与 20 个信号种子入库 tests/fixtures, 受影响测试
全部自包含化(不依赖运行目录用户数据); 77 万行 MA 死叉新旧表达式对拍
逐行一致; 回测实跑 45 笔卖点信号出场验证矩阵链路
- 同批包含工作区既有进度: 策略结果 ext 列同日投影修复(含测试)、数据源插件、fuyao/auth/api_gateway/data_integrity 调整、README 信号库
描述与 strategy.md 导入路径补充
验证: 后端 2592 passed(空数据目录 CI 模拟 2588 passed, 4 例为模拟环境
伪影复验排除); 前端 vitest 125 passed + tsc 0 错 + vite build 通过
|
2026-10-10 21:10:44 +08:00 |
|
shy3130
|
b65d2691d9
|
feat(strategy): 每策略「叠加条件」overlay_filter — 零代码硬过滤叠加
策略设置新增「叠加条件」分区: 字段+运算符+值 多行 AND 硬过滤, 直接叠加在
策略自身规则之上, 选股/回测/监控三处一致生效, 不改策略代码、无需另建
信号或叠加策略 (扩展数据因子如 ext_ext_fuyao_hot_rank 可直接选)。
- 条件结构与自定义信号同源 (allowed_fields 白名单含注册表因子/字符串扩展
字段), 禁用日期偏移, 最多 8 条
- 只挡入场/候选: exit_signal_hits 在过滤前收集, 已持仓卖出不受影响
(与 basic_filter 既有口径一致)
- null/缺数据 ≡ 不命中 (fail-closed); 引用列缺失时报可读错误
- 仅日线 polars_expr/matrix_native 支持, composite/minute 保存期+运行期双拦;
matrix 路径拒绝字符串字段 (矩阵 fields 为 float 数组)
- 保存时条件实际变化才清策略结果缓存, 普通保存不受波及
- 回测: polars 路径在裁剪前完整 panel 上评估掩码 AND 入场; matrix 路径条件
字段并入 feature_plan 进矩阵 fields, NaN 一律不命中
- 前端提取 ConditionEditor 共享组件, 自定义信号弹窗复用 (净减 ~240 行)
测试: 后端新增 16 项 + 回测/关联模块回归全绿; ruff 对比基线零新增;
前端 6 项组件测试 + tsc/vite build 通过。
|
2026-10-09 00:19:59 +08:00 |
|
shy3130
|
fb69f382e7
|
fix(screener): 策略池草稿区仅列 AI 来源草稿,非 AI 研究模板不再显示发布按钮
内置研究模板 factor_rank_research 带 research_only=True,此前混入 AI 草稿
分区并渲染「发布」按钮,点击必被发布闸(仅接受 source=ai)以 400 拒绝。
草稿过滤补 source==='ai' 校验;新增 vitest 测试复现该问题(无修复时红)。
|
2026-10-08 22:02:13 +08:00 |
|
shy3130
|
17093a8c36
|
fix(front): 对齐 @tanstack/react-query 至 5.104.1, 与持久化配套包同版
三包此前后台实际为 react-query 5.100.11 + persist-client/persister 5.104.1,
peer 依赖形式上不满足且打包存在 query-core 双拷贝。统一到 5.104.1 后
peer 精确满足, query-core 收敛为单一版本。安装/构建/vitest 105 例/
node:test 5 例全部通过。
|
2026-10-08 13:27:10 +08:00 |
|
shy3130
|
f17260587b
|
fix(watchlist): 分时缩略图续画按资产类型行情日期守卫, ETF 旧价不再拼尾K
enriched 响应新增 dates; 未开实时拉取的资产类型 (enriched close 为旧日K回退值)
不续画, 修复自选页 ETF 分时尾部错价长刺。
|
2026-10-08 12:04:41 +08:00 |
|
shy3130
|
625f5c7b56
|
chore: bump version to 0.3.5 — 前后端版本同源(package.json 唯一权威, fallback/VERSION 同步)
|
2026-10-08 10:36:26 +08:00 |
|
shy3130
|
a358e07b01
|
feat(paper): 模拟盘持仓表显示股票名称 (#454)
代码列内联灰色小字显示名称(股票/ETF/指数), 批量 instrumentNames 查询
(与监控/持仓提醒页同模式, 5min staleTime, 空持仓不发请求), 查不到名称优雅降级不显示。
|
2026-10-07 22:24:33 +08:00 |
|
shy3130
|
39f2543ccc
|
chore: bump version to 0.3.4 — 前后端版本同源(package.json 唯一权威, fallback/VERSION 同步)
|
2026-10-07 21:49:30 +08:00 |
|
shy3130
|
badab07619
|
feat(adj): 除权因子独立同步 + 事件明细扩列 + 按需窗口优化
- 扩列: adj_factor 表扩至 8 列(dividend/bonus/allot/allot_price/prev_close 明细, 可空), fuyao 从事件 dump 原始成分回填; merge 变更检测按 ex_factor diff>1e-9, 仅明细回填不计入受影响列表; 字段说明补齐
- 独立同步: /api/pipeline/adj-factor/run 端点(共用任务机制: 单飞+重任务槽+行情暂停), Data 页除权因子卡片设置齿轮弹窗(生效数据源/能力徽标/TickFlow 无明细提示), 因子变更个股自动 enriched 局部重算
- 按需优化: 独立同步事件窗口钳到本地日K起点(更早事件在前复权 cum/total 两侧抵消, 对已存价格零影响); fuyao 配价由全有或全无改为逐只按需(远古事件只拖累自己, 不再整轮回退单标的接口); 实测全市场因子阶段 15min+ → ~11s, 配价 3676/3676 走本地 dump 零回退
- 盘后管道步骤条显示各能力路由徽标(矩阵驱动); README 补桌面端 macOS 安装注意事项
- 测试: 明细列 merge 语义 4 例 / 独立同步联动 5 例 / 远古事件不连累全场回归; 全量回归通过(2 例历史遗留失败与本改动无关, 基线同样失败)
|
2026-10-07 21:45:40 +08:00 |
|
shy3130
|
2b73e89b81
|
feat(app): 桌面端体验优化 — 界面缩放(80%-150%, 修复缩放黑条)/每小时检查更新/侧栏橘黄色呼吸灯下载图标(点击定位并自动检查)/发现新版本徽章带版本号/官网入口/顶部工具栏不折行/页面标题渐变字效; build: 安装包文件名带版本号 + 安装后自动刷新图标缓存
|
2026-10-06 12:10:32 +08:00 |
|
shy3130
|
af63614610
|
perf(front,back): 查询缓存持久化 + staleTime 分层 — 重开应用秒出上次数据, 不再全量重拉
- 新增 lib/queryPersist.ts: PersistQueryClientProvider 接入 localStorage 持久化,
白名单 13 个慢变查询族 (设置/偏好/能力矩阵/自选清单与分组/策略池/regime 全家/自定义信号),
键首段精确匹配不误伤 watchlist-enriched 等实时行情族; 24h maxAge + 版本 buster;
快变数据 (实时价/分钟K/告警) 刻意不持久化, 避免陈旧价格误导
- staleTime 分层: settings/preferences 30s, capability-matrix 5min, 自选清单 30s,
策略池 60s, 自定义信号 60s — 切页不再对慢变数据反复请求
- regime_builder.load_regime_history 加 (path,mtime,size) 签名缓存: Regime 页
三个端点原先每请求各自全量重读同一 parquet, 现共享一份, 写入后 mtime 失效
验证: pnpm build 通过; 浏览器实测持久化恢复路径 (注入缓存刷新后守卫直接放行,
不再整屏 loading); regime 相关 pytest 22 passed; ruff 零新增; git diff --check 干净
|
2026-10-05 15:16:16 +08:00 |
|
shy3130
|
f3804215f9
|
perf(front,back): 首屏弹窗/设置页懒加载落地页 -1.5MB + 后端取数锁收窄/分钟K分区直读/缓存治理 + 错误态与轮询门控
前端 (bundle/渲染/体验):
- StockPreviewDialog/DimensionMembersDialog/ListColumnCustomizer 拆薄壳+lazy 内容 (关闭不挂载, 保留 300ms 退出动画), 落地页静态依赖不再含 echarts/lightweight-charts (~2.2MB→~540KB); Settings 八 tab 与 Onboarding/Auth 按需加载; 字体自托管 @fontsource 替换 CDN 外链; 删除零引用依赖与 buildQuoteMap 死代码
- Watchlist O(n²) symbol 派生链修复 + 批量查询 placeholderData; LimitUpLadder 回调稳定化让 memo 生效; AbnormalMoves 两行组件 memo 化
- 非交易时段轮询降频 (quote_status.is_trading_hours 门控, 字段缺失保持原频); StockPreviewDialog 尊重异动页主开关不再意外触发全市场计算
- 六处错误伪装空态补 isError+重试 (新增共享 ErrorState); Monitor 涨跌色统一 priceColorClass (修 0 值显红); AI 复盘取消生成 (修 reviewStore 中断空指针与半途归档); Regime 主线过滤面板配置晚到回填
后端 (热路径):
- quote_service 监控评估链移出 _fetch_lock, 独立 _evaluate_lock 保两轮不并发; depth_service 网络拉取出锁, parquet 写仍串行
- get_minute/get_minute_batch 优先直读 date= 分区 (缺失回退全树扫描); get_daily_batch 复用 300 天 enriched 历史缓存 (与单股 get_daily 同源判据)
- secrets_store mtime 缓存; 总览 ext 读取 (path,mtime) memo; screener 历史缓存 LRU 硬上限; final 同步状态按日清理; webhook 线程池挂入 lifespan shutdown
验证: pnpm build 通过; 后端 pytest 全量 2489 passed (test_worker_process 1 例时序 flaky 已隔离复跑确认与本次无关); ruff 修改文件零新增告警
|
2026-10-05 15:07:53 +08:00 |
|
shy3130
|
490c62bca7
|
fix(paper): 对比榜单三处小修 — 空值恒垫底/副标题随排序可变/徽章高亮去歧义
- 可空列 (累计收益/最新日/盈亏比/最近结算) 无值行排序时恒垫底, 不再随升序翻到顶部
- 页头副标题去掉写死的「收益降序」, 改为「点表头排序」
- # 徽章仅在累计收益降序时高亮为收益名次, 其他排序弱化为列位
验证: pnpm build 通过; 浏览器实测默认高亮/名排序弱化/全空列升降序稳定
|
2026-10-05 00:13:27 +08:00 |
|
shy3130
|
3aa07d5ef5
|
feat(paper): 对比榜单加盈亏比列 (胜率旁, 可排序) — 无亏损回合显示 —, 排序空值垫底
后端 compare 已返回 profit_loss_ratio (round 2位), 纯前端改动:
表头 12 列 + 排序键 + 展开行 colSpan 同步, min-w 860→920
验证: pnpm build 通过; 浏览器实测列显示/排序切换/空值 — 正常
|
2026-10-04 22:19:01 +08:00 |
|
shy3130
|
35e21cf126
|
feat(paper): 对比榜单表头点击排序 — 8 列升降序切换, 统计卡与净值图固定收益口径
- 可排序列: 账户/总资产/累计收益/最新日/胜率/回合/持仓/最近结算; 默认累计收益降序, 同列再点翻转
- 空值垫底 (数值 -1e9 / 字符串空串), 账户名换列默认升序, 其余默认降序
- 「收益最高」统计卡与归一化净值叠加 (收益前 8) 不受表头排序影响, 始终按收益口径
- 排序表头样式随 Review._DtTh (活动列方向箭头, 非活动列 hover 淡箭头)
验证: pnpm build 通过; 浏览器实测点「账户」表头升降序切换正确、活动列指示正确、恢复默认排序正常、截图无布局错乱
|
2026-10-04 22:17:39 +08:00 |
|
shy3130
|
379b7d283a
|
feat(paper): 对比视图二期 — 全面去擂台化措辞 + 行内嵌完整账户面板替代跳转
- 措辞: 擂台/参赛/比拼全部改为对比定位 (标题/按钮/卡片/测试/端点文案), 移除 Trophy/Swords 图标
- 交互: 删除「进入」按钮, 点行展开内嵌 AccountPanel (下单/跟单/费用/冻结/持仓/台账/净值/策略对比), 单账户视图仅保留新建向导
- compare 增量字段: created_at/last_nav_date/day_change_pct/auto_rules/auto_enabled/holdings_count (加法契约)
验证: pytest 全量 2485 passed 6 skipped; ruff 通过; pnpm build 通过; 浏览器实测展开面板无擂台字样、无跳转、布局正常
|
2026-10-04 22:11:55 +08:00 |
|
shy3130
|
ca30bdaa84
|
feat(paper): 模拟盘擂台主视图 — 多账户收益对比榜单 + 同规格批量创建
参考擂台模式重构模拟盘默认视图, 对比从弹窗提升为页面主形态;
数据层零改动, 老账户自动上榜, 原单账户记账功能全量保留为下钻视图。
后端 (加法契约):
- POST /api/paper/arena/batch_create: 同本金/同费率一次开 N 个账户
(≤20, 服务端生成 arena_ id), 各绑一条自动跟单规则; 规则整体先校验
再落盘, 任一非法 400 不留半创建状态
- GET /api/paper/compare 增量字段: holdings_count / created_at /
last_nav_date / day_change_pct(末两定版净值) / auto_rules / auto_enabled,
旧前端可忽略
- 开放契约快照 +1 端点 (test_openapi_contract)
前端:
- Paper.tsx 拆为 ArenaView(默认: 摘要卡 + 归一化净值叠加 + 收益降序
榜单[排名/徽章/迷你走势/跟单规则chip] + 行展开持仓与近期成交) 与
AccountView(原视图全量保留, 头部加返回擂台); compare 查询 60s 轻轮询
- ArenaCreateModal: 策略/监控规则联想添加 + 全部策略一键加入(≤20),
方向/仓位/订单类型/冷却为全表共享参数保证同规格
- api.ts: PaperCompareRow 扩展可选擂台字段 + PaperArenaSource 类型
与 paperArenaCreate; 查询键复用 paperCompare/paperAll
验证: 全量 pytest 2485 passed (含新增 test_paper_arena 4 用例);
ruff 通过; pnpm build 通过; 浏览器实测擂台渲染/行展开/下钻返回/
批量创建弹窗交互均正常 (未在真实数据目录实际建账户)
|
2026-10-04 22:01:59 +08:00 |
|
intfoo
|
3e105a475d
|
feat(strategy): 支持 string 类型策略参数
META["params"] 新增 string 类型(自由文本),后端本就按非数值类型
原样透传,无需改动;本 PR 补齐前端渲染与扫描守卫:
- StrategyParamDef.type 联合类型加 'string'
- 回测页/策略设置弹窗参数面板:string 渲染为文本输入框
(此前未知类型会掉进 number 分支,文本值被 Number() 转成 NaN)
- paramSweep:string 参数标记「文本参数不可扫描」,buildGrid
防御性跳过(后端 _candidates_for 只支持 float/int 范围展开)
- strategy-guide / compact 指南与 AI 生成 prompt 同步参数类型说明
|
2026-10-01 21:07:56 +08:00 |
|
shy3130
|
18cc8f27b2
|
feat(frontend): favicon 与侧栏菜单图标换新品牌渐变 — 新增 BrandIcons 组件族(19 个 24 网格直角图标, currentColor 跟随主题), nav 全量替换并清理未用 lucide 导入
|
2026-09-28 18:17:26 +08:00 |
|
shy3130
|
39981d2537
|
feat(dashboard): 默认布局定稿 v2(用户手动调整版) — 中段四列等高(分布/雷达 h7→8), 双热度/四榜单行顶对齐(y12/y21); 坐标为压实稳定形态, 恢复默认等值落null闭环复验通过
|
2026-09-27 11:12:29 +08:00 |
|
shy3130
|
1a37e5515f
|
feat(dashboard): 用户定稿布局设为代码默认 — 四列中段(分布/雷达/趋势/梯队)+双热度+右侧监控高栏(22行)+四榜单; 坐标取竖直压实稳定形态(列内不留空隙), 保证恢复默认的JSON等值判断成立并落null
|
2026-09-26 23:58:24 +08:00 |
|
shy3130
|
a39f8f4520
|
fix(dashboard): 根治组件内容溢出互相压盖 — 格子内容自然高度可大于定高格子(热度+35/榜单+88/监控+146px, overflow:visible 直接画到下一排上, 榜单DOM靠后把概念热度第5行盖住), 格子 overflow-hidden + 卡片 h-full 物理根除; 默认布局高度按实测校准(热度9/榜单13/监控14行)默认视图零裁切
|
2026-09-26 23:05:41 +08:00 |
|
shy3130
|
2f657e3d07
|
feat(dashboard): 编辑态交互重设计 — 整卡可拖(顶部被遮挡也能从任意位置拖起), 内容 pointer-events:none 阻断内部点击/悬停/iframe 吞拖拽, 八向缩放(四边通长细条+四角直角标线, accent 主题色), 占位格虚线框吸附反馈; 修复 RGL 浏览态残留 104 个隐形手柄 span 挡内容/滚动条(display:none 根除)
|
2026-09-26 22:47:33 +08:00 |
|
shy3130
|
fbf390187f
|
fix(dashboard): 布局加载路径消解重叠坐标 — normalizeLayout 渲染前 compactLayout 兜底, 异常保存的 blob 不再组件压盖(注入重叠blob实测: gainers/losers 自动下沉), 拖拽回写同防线, 修正不实注释
|
2026-09-26 22:36:52 +08:00 |
|
shy3130
|
e65002a478
|
fix(dashboard): 添加组件弹层 portal 到 body + fixed 锚定 — 按钮移入头部后 absolute 弹层受祖先层叠上下文遮挡, 改为脱离文档流顶层渲染(z-9999), 右缘视口钳位, 页面滚动关闭/面板内滚动不关
|
2026-09-26 22:23:43 +08:00 |
|
shy3130
|
2461c3df96
|
fix(dashboard): 默认布局复刻原版排布 — 监控中心回到右栏(榜单右侧/梯队下方), 四榜单收窄为2列占左8列, 不再整行占满把监控挤到页面最底部
|
2026-09-26 22:20:26 +08:00 |
|
shy3130
|
553a38a44e
|
feat(dashboard): 自定义布局入口移至看板头部「重载」右侧 — 编辑态控制组(添加组件/恢复默认/完成)同处一排, editing 状态提升至 Dashboard 页, 网格组件只保留编辑提示与覆盖层
|
2026-09-26 22:13:03 +08:00 |
|
shy3130
|
64e69dffd7
|
feat(update): 启动静默检查新版本, 侧栏左下角版本号旁显示 NEW 徽标 — 共享单例 updateCheck store(24h 本地缓存+latest.json 兜底), 设置→系统检查更新同源复用, 仓库地址修正为改名后名称
|
2026-09-26 22:08:53 +08:00 |
|
shy3130
|
44e8b7ebbd
|
feat(dashboard): 布局后端持久化(preferences链路) + 外部链接组件(sandbox iframe+新窗口兜底) + 添加组件面板 + useDashboardLayout持久化hook(7用例)
|
2026-09-26 20:52:04 +08:00 |
|
shy3130
|
26e23ef01a
|
feat(dashboard): 12列吸附网格自定义布局 — react-grid-layout v2 封装, 编辑态拖拽/角柄调宽高/删除/恢复默认, 布局规范化与默认布局复刻原排布
|
2026-09-26 20:12:42 +08:00 |
|