shy3130
|
d9ff91fa12
|
fix(dialog): 日K视图左右双栏同步实时刷新 — 蜡烛与内嵌分时接入独立轮询
上个提交只覆盖了「分时」标签页 (StockMultiDayIntradayChart); 默认日K视图
的 StockPanel 双栏仍不刷新:
- 左侧蜡烛 (StockDailyKChart): 日K查询挂载后从不轮询, 今日实时蜡烛
(后端 _maybe_inject_live_candle 注入) 不随行情更新 → 透传
refetchIntervalMs 到 StockDailyKChart 接入同一轮询
- 右侧内嵌分时 (StockIntradayChart): 对话框漏传 refetchIntervalMs 给
StockPanel 日K分支, 且请求未带 live → 补传参数; 轮询上下文中
klineMinute 带 live=1, 当日盘中直接实时拉取 (历史日期后端自行忽略)
浏览器实测 (实时行情关闭): 日K视图下 kline/daily 与
kline/minute?date=当日&live=1 均以约 6s 节奏持续轮询
|
2026-08-30 19:05:16 +08:00 |
|
shy3130
|
974a3dccd2
|
chore(dialog): 移除 StockPreviewDialog 残留的 useQuoteStatus 导入
|
2026-08-30 19:05:15 +08:00 |
|
shy3130
|
08701f8886
|
fix(kline): 个股详情分时图独立轮询, 盘中直接实时拉取最新K
- /api/kline/minute 新增 live 参数: 当日连续竞价时段跳过本地优先直接
实时拉取, 避免盘中分钟增量落盘后 90% 完整度启发式让详情分时图停在
上一增量轮 (>=60s 滞后), 与行情列表节奏脱节
- StockPreviewDialog 打开即独立轮询 (间隔沿用偏好, 默认 6s), 不再要求
「分时刷新开关 + 实时行情运行」双条件 — PR #114 引入的门槛默认冻结详情图
- market_time 抽出公共 in_continuous_session, minute_refresh 复用同一实现
- 新增 12 个单测覆盖 live 路径, 本地回退与连续竞价时段边界
|
2026-08-30 19:05:14 +08:00 |
|
shy3130
|
68579f1b10
|
style(screener): 分钟周期徽章换 sky 色系, 与 AI 来源徽章的紫色区分
|
2026-08-30 19:05:12 +08:00 |
|
shy3130
|
8ccb681214
|
feat(settings): 补全设置卡片定位闪烁锚点体系
此前「从业务页引导去设置」只有 depth-fix 一处孤例 (SealedBadge → 连板
梯队修正卡片闪烁), 其余 8 个引导链接只带 tab 参数跳转, 用户落地后要
自己在设置页里找目标卡片。
- 通用锚点机制: useCardFlash hook (/settings?tab=X&highlight=<anchor>
打开时目标卡片 scrollIntoView 居中 + ring 高亮 2s, 一次会话仅触发
一次防 StrictMode 重放) + AnchorWrap 包裹层 (无统一 Card 组件的面板用)
- Settings 把 highlight 传给全部面板 (面板类型本就声明了 highlight?: string)
- 锚点落位: 监控页 Card 组件 anchor 化 — quotes(行情轮询)/webhooks(推送
通知)/minute-refresh(盘中分钟增量)/intraday-refresh(分时图刷新)/
depth-fix(原实现迁移到统一机制); AI ai-connection; 数据源 data-sources;
信号库 signals
- 8 个引导链接补 &highlight=: RuleEditor/Review webhook 未配置提示 →
webhooks; Layout 实时无权限/监控入口 → data-sources/quotes; Data 页
数据源入口 → data-sources; 信号触发器 → signals
验证: pnpm build 通过; 浏览器实测 8 个锚点全部滚动定位+闪烁; 顺带补验
40e54ea 统一策略池欠的界面项 (双池→统一迁移 17/33、分钟徽章、三态筛选
只过滤显示不动池、ETF 视角无分钟策略、分钟卡片实时单跑)。
|
2026-08-30 19:05:10 +08:00 |
|
shy3130
|
a342d94238
|
feat(screener): 策略池统一 — 日线/分钟合并单池, 执行按策略声明周期路由
原设计: 日线/分钟双池隔离 (strategy-pool / strategy-pool-1m), 页面按
周期开关切换两套世界。拆池根因是列表按周期过滤 + 页面级周期切换: 分钟
视角下池内日线策略解析不到才显示「失效」, 属于修补表象而非消除根因。
- 池合并: 双 key 一次性迁移为单池 (日线在前、分钟在后、按 ID 去重,
完成后删旧分钟 key 保证幂等, StrictMode/HMR 重放安全)
- 执行路由真相来源从 UI 开关改为策略自身 timeframes 声明: 日线走盘后
缓存/runAll, 分钟走本地分钟K分区实时单跑 (卡片点击/参数保存重跑均
按各自周期传参)
- 周期开关降级为三态显示筛选 (全部/日线/分钟, 默认全部), 只过滤卡片
显示, 不影响池与执行; runAll 自动跑仅覆盖池内日线子集
- ETF 置灰移除: 分钟策略 asset_types 仅股票, ETF 列表自然不含
- 池对话框取全量列表, 待选/已选两侧显示「分钟」徽章; 失效判定回归
全周期合并列表, 消解「切视角整池失效」问题类别
- 后端零改动: /api/strategies 的 timeframe 为空本就不过滤, 前端 'all'
时省略参数; 其余依赖默认日线过滤的 strategyList 调用方行为不变
验证: pnpm build 通过; git diff --check 干净; 3 处 run.mutate 调用点
均带周期参数; 迁移幂等路径 (双池/仅分钟/空池) 走查通过。界面手工验证
待实机执行 (池迁移/分钟徽章/筛选空态/ETF 视角)。
|
2026-08-30 19:05:10 +08:00 |
|
shy3130
|
bfa87d1f0b
|
fix(screener): 策略池按日线/分钟周期隔离, 修复分钟视角下整池显示失效
原设计: 日线/分钟共用一份策略池。切到分钟模式后, 池中 15 个日线策略
在分钟策略列表里解析不到, 策略池对话框右侧全部标成「失效」; 此时确认
还会把混合名单回写全局池, 日线池同样被污染。
- 池按周期隔离: 'strategy-pool' (日线, 沿用原 key 存量无损) +
'strategy-pool-1m' (分钟, 新 key); useStrategyPool(timeframe) 返回
当前周期的池, 任一池变更幂等落库双 key, 切换周期不会交叉写
- 「失效」徽章回归本义: 仅当策略真被删除 (不在本周期列表) 时出现
- prune 解除仅日线限制: 各周期用自身策略列表清理各自的池, 互不误删
- 策略构建器/叠加策略创建的是日线策略, 固定入日线池 (即使分钟页保存)
验证: 分钟对话框无失效列表、可正常添加分钟红7; 日线 15/31 ↔ 分钟 1/1
往返切换稳定; 刷新后双池持久。
注: 开发中 vite HMR 热替换瞬间曾把本地日线池写空 (旧代码对话框与新
模块混布的开发态一次性产物, 生产构建无 HMR 不受影响); 已从用户截图
复原原 15 策略及顺序 (boll_breakout → five_consecutive_yang)。
|
2026-08-30 19:05:08 +08:00 |
|
shy3130
|
1746a0e305
|
feat(minute): 分钟红7改用开盘窗口 + 盘中增量卡片移至设置右列
分钟红7: 检查窗口从「最近7根」改为「当日最早7根(开盘7根)」—
捕捉开盘急拉形态, 窗口在早盘即固定, 不随盘中新K线漂移;
close 取开盘窗口末根收盘价 (基础过滤口径同步更新)。
- 窗口选择: tail → head (sort 后 int_range < bars), 输出列契约不变
- 新增两个区分性测试: 开盘命中后转绿仍命中且 close 取窗口末根;
开盘不足红K数、尾盘转红不救回 (旧最近窗口口径会命中)
- 实盘验证: 252 只命中, 每只窗口末时间均为 9:36 (开盘第7根)
- 设置页「盘中分钟增量」卡片从左列顶部移至右列 (连板梯队修正之后)
注: 本地 runtime 覆盖文件 minute_red_streak.json 的 description
快照已同步新文案 (gitignored, 不入库)
|
2026-08-30 19:05:07 +08:00 |
|
shy3130
|
2f8d1e5e60
|
refactor(settings): 盘中分钟增量刷新开关迁至实时监控设置
该功能是交易时段常驻运行的实时服务, 心智模型归实时行情设置更合理;
数据页分钟K弹窗还原为纯盘后批量同步语义。
- 配置端点归属迁移: minute_refresh_enabled/interval 由 PUT
/api/settings/preferences/realtime-monitor 拥有 (set_realtime_monitor_config
写入 + getter 返回, clamp [60,300] 不变); minute-sync 端点还原原状
- 前端 Monitoring.tsx 新增「盘中分钟增量」卡片 (开关/间隔滑杆 60-300s/
运行轮次状态行), 沿用 Card/ToggleRow/滑杆防抖既有模式
- MinuteSyncConfig 移除盘中增量区块; api.ts updateMinuteSync 还原 3 参签名
- 新增归属测试: realtime_monitor_config 拥有 refresh 键且越界 clamp
验证: 28 项分钟相关测试通过; UI 开关双向回路 (curl 置开→UI 显示开,
UI 点击→偏好翻转 False 且服务 gate_reason=disabled); 数据页弹窗无残留
|
2026-08-30 19:05:06 +08:00 |
|
shy3130
|
5e2358ce48
|
feat(minute): 分钟策略执行后端 + 分钟红7策略 + 盘中增量落盘 (Expert)
一期 · 分钟策略执行链路:
- 引擎新增 minute_filter 执行后端: 策略声明 filter_minute_history(df, params),
timeframes 必须且仅为 ["1m"]; 输入为当日分钟K窗口, 命中行事后联表 enriched
快照补基础过滤列 (name/total_shares/change_pct), close 用最新分钟价
- 内置策略「分钟红7」(minute_red_streak): 最近 N 根(默认7)分钟K至少 5 根
close>open, 且按最高价排序的最高的 2 根全红; 全向量化, 671k 行约 230ms;
参数 bars/min_red/top_red/rank_by_close, 不足 N 根不触发, 同值取更晚K线
- ScreenerService 1m context: 优先读 as_of 当日 kline_minute 分区, 缺失回退
全市场最近分区; 单分区直读与全量 glob 解耦
- run_preset/run_all 分钟周期结果不写日线盘后缓存 (语义隔离)
二期 · 盘中分钟增量落盘 (Expert 专有):
- kline_sync.fetch_intraday_full_market_burst: intraday.batch 独立限流池,
全市场 5546/200=28 块线程池一次打出, 轮内不重试
- MinuteRefreshService: 后台线程, 门控链 = 开关→自定义分钟源让位→INTRADAY_BATCH
能力→连续竞价时段(9:30-11:30/13:00-15:00); 固定节奏 next=max(起点+间隔,完成),
不补跑; 每轮单次合并落盘 (_write_minute_partition unique 幂等)
- 偏好 minute_refresh_enabled(默认关)/minute_refresh_interval([60,300]s 默认60);
GET /api/settings/minute-refresh/status 状态端点
前端:
- 策略页日线/分钟周期切换 (1m 下 ETF 置灰、不触发盘后 runAll、prune 仅日线),
策略卡片「分钟」徽章, 策略池对话框按周期拉取
- 数据页分钟K设置弹窗新增盘中增量区块: 开关/间隔(60-300s)/能力缺失置灰/
服务状态行(运行中·时段暂停·最近一轮)
测试: 26 项新增 (形态7/引擎4/context4/服务11), 更新 3 个 matrix 不变量测试;
全量 1112 passed; 前端 build 通过; 浏览器端到端实测通过
|
2026-08-30 19:05:05 +08:00 |
|
shy3130
|
196af2fa06
|
feat(monitor): 策略监控新建规则默认通知事件改为选股结果
DEFAULT_STRATEGY_NOTIFY_EVENTS 从买/卖信号改为进入/移出选股结果,
新建规则、类型切换、策略页创建监控三处默认随之生效; 与后端省略
notify_events 字段时的回填口径一致。旧规则空值回退(LEGACY)不变。
|
2026-08-25 09:52:56 +08:00 |
|
shy3130
|
b14ffda1bd
|
feat(ui): 数据源能力卡片显示 TickFlow 订阅档位要求与全档位标识
每张能力卡右上角显示该能力所需最低档位(全档位/Starter+/Pro+/Expert+,
配色与左侧菜单档位体系一致, 当前档位不足时琥珀描边提示), 替代原
"当前提供方"徽标(信息已由下方高亮标签承载)。TickFlow 详情头部与
列表卡片在"第三方"后增加 Expert 三色渐变的"已适配全档位"标识。
|
2026-08-24 17:14:48 +08:00 |
|
shy3130
|
6c7c7088a9
|
feat(ui): 数据源能力卡片标签式路由 — 每个数据集单独选择提供方
- 每个数据源详情展示能力卡片, 卡片上以可点标签列出所有具备该能力的
数据源(TickFlow 恒为候选), 点标签即刻切换该数据集路由, 跨源自由组合
- 右上角徽标显示当前提供方; 除权因子含「跟随日K」标签(默认态)
- TickFlow 详情含全部能力 + 恢复默认; 插件 Key 配置区对齐 TickFlow 布局
- 插件详情「整体切换为该源」= 一键套用其全部适配能力, 其余回退 TickFlow
|
2026-08-24 14:21:45 +08:00 |
|
shy3130
|
ea746b97c7
|
feat(plugins): 新增 fuyao 同花顺官方实时行情插件(默认 hidden)与插件 Key 界面配置
- fuyao 插件: 全市场实时快照分页拉取, 字段对齐数据契约(pct 百分制÷100),
兼容官方文档与实际返回两种信封/字段名; 优化完成前 plugin.yaml 标记
hidden: true, 加载器跳过注册不展示, 删除该行即可开放
- plugin.yaml 新增 api_key_env 约定: 设置页提供 Key 输入框, 先探后存
(POST/DELETE /api/settings/plugin-key), secrets.json 优先于 .env
- secrets_store.get_env_backed_secret(field, env_name) 支持插件取 Key
- loader: 插件状态透出 api_key_env, 新增 probe_plugin_key 委托探测
- 31 个插件测试; docs/plugin-development.md 补充约定说明
|
2026-08-24 14:21:38 +08:00 |
|
shy3130
|
0bb9d64f60
|
merge: 试验性合并 PR #193 (feat/ai-generate-signal) 到最新 main
|
2026-08-23 19:29:44 +08:00 |
|
shy3130
|
a6a4bcde43
|
fix(sync): 卡死判定改进度停滞 + 协作式取消 + 执行槽所有权
- reap 判定从总时长一刀切改为进度停滞(心跳 last_progress_at),
慢带宽冷启动不再被误杀; 12h 总时长硬上限兜底
- 协作式取消: JobCancelledError(BaseException) 经分块进度回调穿透,
僵尸线程在下一分块自行退出, UI 状态与执行体对齐
- 执行槽带所有权 token, 僵尸 finally 不得误释放新任务的槽
- 手动取消端点同样走协作式终止
- 前端超时卡片文案对齐停滞语义, 失败提示引导调整阈值
- 新增 10 个回归测试(972 passed)
|
2026-08-23 14:57:12 +08:00 |
|
shy3130
|
0b57c33ca2
|
feat(ui): 异动监控新增 ST 过滤,默认开启
|
2026-08-23 14:21:06 +08:00 |
|
shy3130
|
89563541e6
|
fix(ui): 回测页标题 量化研究 → 回测
|
2026-08-23 13:48:24 +08:00 |
|
shy3130
|
feab972de0
|
feat(ui): 数据源页徽章/按钮统一 + 操作后即时刷新实时行情状态
- 第三方徽章统一琥珀色; 插件化说明精简为一句 AI 接入提示并置顶;
三处「切换为当前数据源」按钮与「使用中」徽章统一样式
- 数据源列表卡片新增「已适配」数据集标识; TickFlow 详情格
描述去档位词, 改为事实描述
- 修复: Key 保存/清除/重新检测与数据源切换/删除/安装/卸载/
编辑保存后未失效 quoteStatus, 侧边栏实时行情最长 60s 才
刷新, 检测成功仍显示「不可用」; 现同步失效 capabilities +
quoteStatus 即时生效
|
2026-08-23 12:34:45 +08:00 |
|
shy3130
|
da3ada28e1
|
feat(v0.2): 功能门槛统一为数据源通用的能力标准
- 后端: 数据集→能力映射增广 (daily/adj_factor/minute/financial),
非 tickflow provider 按声明数据集动态 grant; 数据源偏好更新与
删除数据源后刷新 app.state.capabilities 快照; 新增 8 项测试
- 前端: 通用界面去档位词, 缺能力统一「{能力名} · 不可用」徽章
(capability-labels 新增 MissingCapChip, 点击跳设置→数据源);
StatCard/深度配置/分钟同步/历史扩展/财务页等 20+ 文件对齐;
实时模式判定改用 quoteStatus.mode 与 realtime_allowed,
替代前端 tierRank 推断; 监控设置页放开整页拦截
- 档位词仅保留 TickFlow 专属界面 (Key 配置/端点测速/引导页),
docs/configuration.md 档位表加注解说明
|
2026-08-23 12:34:40 +08:00 |
|
shy3130
|
254e1962d0
|
feat(v0.2): 自选分组监控作用域 + 自选页交互增强 + 弱化默认数据源绑定
后端:
- 监控规则新增 scope=watchlist_group: 规则只存 group_id, 引擎按版本号缓存的
分组成员动态解析, 分组增删标的自动同步监控范围, 无需改规则
- 分组删除 fail-closed (规则暂停+runtime_warning), API 层校验分组存在性
- watchlist 服务增加数据版本号 _REVISION, 读取免锁、写后立即失效引擎缓存
- stock-sdk 插件 display_name 去掉括号合规备注 (说明保留在 description)
前端:
- RuleEditor 分组模式交互 (选择分组/成员预览/动态绑定提示), Monitor 列表分组摘要
- 自选搜索: Plus 快速加当前分组 + FolderPlus 展开分组菜单; 多分组圆点叠瓦显示
- 搜索下拉加宽防名称截断, 创/科/ETF 标签紧贴名称
- 自选筛选新增「排除ST」开关 (默认关, 持久化)
- 个股详情新增异动信息条: 状态着色/窗口偏离/接近度/计算时间 (无数据不显示)
- 引导页: 能力探测按数据源分流 (仅选 TickFlow 才显示 Key/档位), 切换 loading 收进卡片
- 看板空态/首次弹窗按数据源分流文案, 去除 Key/None 档引导注册表述
- 侧边栏实时行情无权限态改为「不可用 + 去配置数据源」
- 设置-数据源页: 新增插件化与配置文档说明块, 内置/插件标识统一改为第三方
测试: test_monitor_group_scope.py 8 例 (动态成员/删除分组/校验/API), 全量 946 passed
|
2026-08-22 20:26:34 +08:00 |
|
shy3130
|
21260f1053
|
异动监控修复与规则口径对齐 (上交所交易规则 2026 修订)
- 盘中增量路径补算偏离列: compute_enriched_today 补 momentum_3d,
live_agg 新增 _close_3d_ago 递推状态, 增量/全量回退两路径统一附着
今日偏离 (基准 = 历史帧昨收 × (1+指数实时涨跌) 外推, 排除盘中
写入的今日指数行), 修复盘中异动列表恒为空的问题
- 主板 ST 口径统一: 2026-07-06 起风险警示股票涨跌幅 10% 且异常波动
特别规定废止, 删除原 ±15%/10日+50%/30日+100% 从严表, ST 与普通
主板同标准
- 严重异常波动负向阈值对齐官方不对称口径: 10日 +100%(-50%),
30日 +200%(-70%), 跌方向更早触发; 前端规则表/窗口徽标同步双侧显示
|
2026-08-21 17:41:35 +08:00 |
|
dev
|
8519a2bd16
|
feat(ai): AI 生成自定义信号条件
- 新增 /api/signals/ai/generate 接口:自然语言描述 → 结构化信号条件
- 新增 custom_signals_ai 模块:组装提示词 + 解析校验 AI 返回的 JSON
- 复用 custom_signals.validate() 白名单安全闸门
- 新增输出 token 上限和上下文窗口设置
- 实现 AI 请求 max_tokens 钳制和输入预算检查
- 自定义信号右值字段名容错处理
- 增强 JSON 解析容错(尾随逗号、垃圾字符)
- 前端自定义信号对话框接入 AI 生成
|
2026-08-21 09:55:24 +08:00 |
|
shy3130
|
68ce23370a
|
feat(v0.2): 异动监控全链路 (偏离值计算/监控页/系统告警接入) + 发布锁 Windows 存活修复
|
2026-08-20 22:56:11 +08:00 |
|
shy3130
|
bcb5cedd9a
|
引导页改为选择第三方数据源并弱化品牌关联
- 欢迎语改为 TSP, 声明页措辞通用化, 去掉品牌链接
- 数据源步骤不再配置 Key: 卡片选择第三方源, 复用设置页切换逻辑与自有源编辑器
- 第三方/自有标识徽标, 第三方为黄色胶囊
- 新增插件化提示框: 两条接入路径与文档指引 (docs/custom-data-source.md / plugin-development.md)
- 侧栏数据源徽标图标换为 DatabaseZap
|
2026-08-20 17:34:20 +08:00 |
|
shy3130
|
5374d8dc85
|
收起的图表列表头保留文字标签 (仅靠 nowrap 防折行)
|
2026-08-20 16:40:57 +08:00 |
|
shy3130
|
3b2fcfcb67
|
修复收起图表列时表头换行顶高的问题
- 根因: 收起时列宽压到 44px, 分时表头「眼睛按钮+排序箭头+内边距」
约 62px 放不下, 排序箭头被挤到第二行, 表头行被顶到 63~81px
- 修复: 表头单元格统一 whitespace-nowrap (表头不应折行, 长标签同样
受益); 日k/分时列收起态隐藏文字标签只留眼睛按钮, 列保持紧凑
- 验证: 收起态行高 43px 单行(日k 44px/分时 56px), 展开态 41px
|
2026-08-20 16:37:08 +08:00 |
|
shy3130
|
df0c24a0fa
|
数据源徽标图标换为 Activity 波形
|
2026-08-20 16:27:46 +08:00 |
|
shy3130
|
a9b6724d5a
|
自选搜索下拉支持已加标的继续加入其他分组
- 搜索结果中已加自选的标的: 禁用对勾改为「已加自选 ✓ + 分组勾选面板」,
可直接勾选加入/移出分组 (走 members 端点, 不重排列表、不覆盖备注)
- 分组勾选弹层标记 data-watchlist-group-menu, 搜索下拉的
点击外部关闭逻辑对其豁免, 两组浮层可并存操作
|
2026-08-20 16:21:52 +08:00 |
|
shy3130
|
83b96e2088
|
自选分组支持多组并存 (M:N)
- 后端: watchlist 条目 group_id 单值列迁移为 group_ids 列表列, 首次
写入前自动备份 .bak; 新增 add_to_group/remove_from_group 及
POST/DELETE /groups/{gid}/members/{symbol} 端点
- 前端: 分组选择器改为勾选式弹出面板, 触发器显示多色点(最多3+N);
移除语义收窄为仅移出当前分组, 移出全部后提示标的仍在自选
- 适配: 分组页签计数/筛选、等权涨跌幅、分组卡片、监控自选导入、
回测/挖掘两页分组导入均按 group_ids 归属计入每个所属分组
|
2026-08-20 16:15:13 +08:00 |
|
shy3130
|
0f423f5455
|
style(layout): 数据源徽标图标 Database → ChartLine
Database 圆柱图标观感笨重且与「数据」菜单项撞图标。先试 K 线图标
(chart-candlestick) 但与品牌 logo 的 K 线图案上下重复, 最终采用
折线图标 ChartLine — 干净、金融数据语义、与全站图标无冲突。
验证: tsc 通过; 浏览器实测渲染 lucide-chart-line。
|
2026-08-20 15:46:31 +08:00 |
|
shy3130
|
b5229f3dc5
|
style(layout): 数据源状态卡图标 Key → Database
侧栏「TickFlow Expert」数据源徽标左侧的钥匙图标改为数据库图标,
与「数据源」语义一致(点击跳转数据源设置)。Key 导入随之移除。
验证: tsc 通过; 浏览器实测渲染为 lucide-database。
|
2026-08-20 15:32:56 +08:00 |
|
shy3130
|
420a362bcd
|
fix(monitor): 作用范围对齐 — 导入标的后下拉框仍与控件同行
根因: 外层容器 items-center, 「已加入」出现后右侧列变为两行,
下拉框被垂直居中到两行中间, 观感错位下沉。
- 外层改 items-start: 下拉框永远对齐第一行(导入/搜索行)顶部,
与 h-7 等高 → 始终同一水平线
- 控件行去掉 flex-wrap、搜索框 min-w-0: 任何宽度都不换行
验证: tsc 通过; 导入 22 只后实测三控件 top 均为 348px、高均 28px,
胶囊在下方 6px 独立成行, 截图确认无错位下沉。
|
2026-08-20 15:23:49 +08:00 |
|
shy3130
|
3630653342
|
fix(monitor): 作用范围布局 v2 — 三控件同行等高, 汇总单独成行
按用户反馈重排:
- 行1: 范围下拉(h-9→h-7) + 自选导入 + 搜索框 — 始终同一 flex 行,
三者统一 28px 高度(下拉框不再偏高), 字号统一 11px
- 行2: 「已加入 N 只 ▾」单独一行, 与控件列左对齐(展开态为标签管理区)
验证: tsc 通过; 浏览器实测三控件 top 一致/高度均 28px, 导入 22 只后
汇总胶囊位于控件行下方独立成行, 截图确认无错位。
|
2026-08-20 15:10:27 +08:00 |
|
shy3130
|
11345815b6
|
fix(monitor): 作用范围区布局 — 自选导入与搜索框同行等高
上一轮标签重构把容器改为纵向堆叠, 自选导入按钮和搜索输入各自占一
行且输入框窄(w-32), 视觉散乱。调整为两行结构:
- 行1: 范围下拉 + 「已加入 N 只」汇总胶囊(或展开态的标签管理区)
- 行2: 自选导入按钮 + 搜索输入框 — 同一 flex 行等高(均 h-7), 输入框
flex-1 占满剩余宽度, 搜索下拉宽度同步跟随
验证: tsc 通过; 浏览器实测同行(sameRow)等高(sameHeight=28px),
导入 22 只后布局整洁无错位。
|
2026-08-20 14:46:24 +08:00 |
|
shy3130
|
dc2758a150
|
feat(monitor): 新建监控标的展示重构 — 汇总+展开管理 名称/板标/代码 tag
原「从自选导入」后逐个显示纯代码 chip, 长列表难读且无名称。改为:
- 收起态(默认): 「已加入 N 只」汇总胶囊, 点击展开管理
- 展开态: 标签流「名称 [创/科/北板标] 代码 ×」— 板标复用 boardTag
(搜索下拉同款样式), 每个可单独删除, 附「清空」「收起」操作;
数量多时容器限高滚动
- 名称解析: 本地缓存(搜索结果/自选数据, 即时) + 批量名称接口
api.instrumentNames 兜底(编辑旧规则等本地无名称场景), key 随
标的集变化, staleTime 5min
验证: tsc 通过; 浏览器实测 — 自选导入 22 只 → 「已加入 22 只」汇总,
展开后 tag 显示「捷捷微电·创·300623.SZ」等(名称+板标+代码), 删除
单只后计数 22→21, 清空/收起可用。
|
2026-08-20 14:36:03 +08:00 |
|
shy3130
|
a8a573a834
|
feat(watchlist): 分组卡片/统计条完善 + 分组排序 + 监控自选导入 + 前端插槽
分组卡片视图 (WatchlistGroupCards):
- 新增整页卡片总览: 组内按涨跌幅降序, 默认前 N 条可展开
- 头部重排: 名称+指标数值居左, 总数+N涨/N跌居右 (红涨绿跌着色)
- 成员行: 创/科/北板块标识移至名称后; 序号列可开关
- 卡片设置 (GroupStatsSettings): 指标/排序/前N条/头部颜色/序号, 与统计条共享持久化
分组统计条 (WatchlistGroupStatsBar):
- 中轴分叉条形图概览, 指标与排序可配置
- 行尾 N涨/N跌 红绿着色
分组管理:
- 后端分组重排端点 + service + 测试 (9 passed)
- 管理弹窗上移/下移 + 拖拽排序, 顺序贯通标签栏/统计条/卡片/侧栏
自选交互:
- 修复 WatchlistAddMenu 内部滚动误关闭 (capture 目标包含判断)
- 监控规则编辑器: 指定标的支持从自选/自选分组批量导入 (去重合并)
前端扩展插槽:
- 新增 stock-preview.footer / watchlist.toolbar 插槽及 context 契约, 更新二开文档
|
2026-08-19 22:14:10 +08:00 |
|
shy3130
|
687a18e769
|
refactor(watchlist): 分组涨跌幅最优性复审 — 可见性门控与格式化去重
复审发现两处可优化:
1. 侧栏分组涨跌幅查询原为 groupsInNav 开启即无条件拉取 — 改为
「侧栏展开 ∧ 自选二级菜单展开」才请求, 收起状态下不再为隐藏 UI
发 watchlist/enriched 请求(展开即时拉取, 与自选页共享缓存去重)
2. formatGroupPct 与全站 fmtPct(lib/format)逻辑完全重复 — 删除并
复用 fmtPct, 格式随全局统一; 顺带消除 Layout 中 navCollapsed
状态声明的位置耦合(上移至查询前)
验证: tsc 通过; 浏览器实测 — 子菜单收起 0 次 enriched 请求, 展开
后 1 次请求即显示; 分组 tab/侧栏数值与优化前逐位一致(全部+0.59%
半导体-1.55% 等), 悬停明细正常。
|
2026-08-18 21:33:26 +08:00 |
|
shy3130
|
5b4b1d6e24
|
feat(watchlist): 自选分组等权平均涨跌幅 — 分组 tab 与侧栏子菜单
口径: 组内成员取「实时优先(rt_pct)、收盘兜底(change_pct)」的涨跌幅
(与自选表格同源, 小数单位), 等权平均为分组涨跌幅 — 自选是个人组合
视角, 等权透明且无需市值数据。涨跌家数在悬停明细中给出。
- 新增 watchlistGroupStats: computeGroupPcts 纯函数 + 格式化/配色
(text-bull 红涨 / text-bear 绿跌, 沿用 A 股惯例)
- 自选页分组 tab: 数量后追加彩色涨跌幅徽标(全部/未分组/自定义组)
- 侧边栏分组子菜单(开启 watchlist_groups_in_nav 时): 复用与自选页
相同的 watchlist/enriched 查询缓存(盘中随 SSE 刷新), 组名右侧显示
验证: tsc 通过; 浏览器实测分组 tab 与侧栏数值逐组与 API 手算一致
(半导体 -1.55% / 商业航天 -0.79% / 反包备选 +4.34% / 全部 +0.59%),
悬停明细「等权平均 +0.59% · 上涨11 下跌11 平0 (共22只)」正常。
|
2026-08-18 15:51:11 +08:00 |
|
shy3130
|
6f0786abac
|
feat(regime): 情绪周期时间轴交互完善 — 堆叠柱/色带标签/点击回看当日
- 首板/2板+ 改堆叠柱: 两段之和即当日涨停总数, 总高看宽度、顶段看连板
厚度(实测 07-01: 126+25=151); 封板率新增序列(右轴绿虚线, 默认关,
图例可开), 图例五项可自由显隐
- 阶段色带 ≥6 天的宽带标注阶段名, 一眼读出每段是什么
- 点击图表任意日期 → 当日快照条: 阶段/段内第N天/高度/涨停构成/晋级/
封板/当日主线 top3 + 「回到今日」复位; 选中日蓝色虚线定位(zrender
级监听+网格命中判定, 图例/dataZoom 点击不误触)
- tooltip 增加阶段第N天/梯队完整度/涨停构成; useEChart 支持 onReady
暴露实例供事件绑定
验证: tsc 通过; 浏览器实测 — 点击命中 07-01 快照数值与后端完全一致,
回到今日复位正常, 堆叠柱/色带标签/蓝虚线均渲染正常。
|
2026-08-17 17:16:02 +08:00 |
|
shy3130
|
65f46a1e7f
|
feat(mainline): 主线与情绪周期统计默认剔除风险警示(ST)股
问题: ST板块 241 天中 209 天上主线榜、108 天第一。原因: ① ST 是跨行业
状态桶(416只)非投资题材, 真实主线被概念拆分而 ST 统一聚桶; ② 主板 ST
2026-07-06 前涨跌幅 5%(价格规则已内置切换日), 封板成本减半, 弱市刷板
(7/1 全市场 218 家涨停中 67 家 ST); ③ 概念成分/ST 标记按当前维表快照
回写历史存在归属污染。
改动:
- market_mainline: load_risk_warning_symbols(维表名称含 ST, 与涨跌停
判定共用 price_limits 权威实现, 600s 缓存); compute_mainline_range
聚合前剔除, exclude_st 参数可覆盖
- regime_builder: run_regime_batch 汇聚点统一剔除(情绪驱动与主线同
口径); 宽度类指标同 df 过滤, 占比几乎不受影响
- preferences: sentiment_exclude_st 默认 True; 经 mainline-filter
API 可读写; 前端过滤面板加开关, 切换时自动全量重算
- 测试: 符号集加载/缓存、主线剔除(计数/龙头/最小涨停门槛交互)、
regime 剔除 A/B、偏好往返; 说明书 FAQ 24.11
验证: 后端 918 测试通过(新增 5 个); tsc 通过; 全量重算后主线 0 行
ST 上榜(此前 209 天), rank1 变为海工装备/卫星导航/液冷服务器等真实
主题; 7/1 涨停数 218→151 与 ST 占比精确吻合; A/B 对照: 阶段标签
34/242 天变化(rally/ignite→repair 为主, 方向符合预期 — 剔除 ST 灌水
后正面阶段更难触发), repair 主导(78%)为口径切换前既有特征。
|
2026-08-17 16:49:28 +08:00 |
|
shy3130
|
7c30f5bcac
|
feat(regime): 情绪周期易用性完善 — 阶段指南/历史分位/阶段规律/切换提醒
- 当前阶段卡: 阶段含义 hover 提示 + 应对建议常显 (六阶段操作指引)
- 5 张指标卡: 所选时间窗口内的历史分位徽标 p{N} (≥20 样本才显示)
- 阶段规律卡: 当前阶段历史段数/平均/最长天数 + 下阶段转移分布,
持续天数超历史平均时给警示徽标
- 时间轴: 今日竖线 markLine + ▲彩色阶段切换点 markPoint
- 后端: regime_builder.latest_phase_transition 检测末两日阶段切换,
daily_pipeline 计算后经 push_alerts 推送通知 (切入退潮/冰点为 warn,
其余 info); 软失败不阻断管道
验证: tsc 通过; pytest regime/phase/market 67 通过;
浏览器实测 (截图 + DOM 双重核实): 应对建议/分位徽标 p27~p100/
阶段规律 31段平均50天/今日线与切换点均正常渲染;
ruff 相对 HEAD 无新增问题。
|
2026-08-17 15:23:32 +08:00 |
|
shy3130
|
867698a696
|
fix(monitor): 通知进入/移出配色对齐 A 股红涨绿跌惯例
原配色: 进入=绿(emerald)/移出=黄(warning)+列表里移出=红, 语义反直觉。
调整为 进入=红(text-danger)/移出=绿(text-bear), 与买入/卖出、涨跌幅
配色语义一致 (红=正向, 绿=负向)。
- strategyMonitorEvents.ts META: 事件动作短语配色中心定义, 弹窗/监控页/
看板/语音播报四处共用, 一处修改全局生效
- AlertToast.tsx SOURCE_BADGE: 弹窗顶部"进入/移出"角标同步换色
- Monitor.tsx renderMessage: 正则补"进入"分支 (原只匹配 新入选|移出,
实际通知文案是"策略「X」进入选股结果…", 进入消息从未着色) + 换色
验证: tsc 通过; 实测监控中心页面 getComputedStyle — 进入选股结果
rgb(242,76,64)/红, 移出选股结果 rgb(38,192,120)/绿。
|
2026-08-17 13:19:18 +08:00 |
|
shy3130
|
41e99b6974
|
feat(regime): 阶段×主线表格限高滚动 + 吸顶表头
段数多时(2y 范围 50+ 段)表格把页面拉得很长。改为 max-h-420px 内滚动,
表头 sticky 吸顶保证滚动时列名可见。
实现注意:
- sticky 必须加在 th 而非 tr (后者在 Chromium 不生效)
- 表格改 border-separate border-spacing-0 — Chromium 在 preflight 默认的
border-collapse:collapse 下表格元素 sticky 完全失效 (computed 为 sticky
但不粘, crbug.com/702927); separate 模式下 tr 边框不绘制, 行分隔线
相应从 tr 挪到 td, 视觉不变
验证: tsc 通过; 实测容器 clientH=420/scrollH=1860 (页面少滚 ~1440px),
容器内滚动 1441px 后 th 与容器顶 delta=0 (吸顶生效), 截图确认列名行
固定、数据行正常。截图 gui-test-screenshots/regime-segments-*.png
|
2026-08-17 13:03:19 +08:00 |
|
shy3130
|
72c56963dd
|
feat(regime): 市场环境/情绪周期 tab 切换 — 减少单页滚动高度
页面原为长滚动: 情绪周期组(阶段概览/时间轴/阶段×主线/主线排行)与
市场环境组(最新日概览/状态时间轴/趋势分布/日历热力图)全部纵向堆叠。
- 头部下方新增「市场环境 / 情绪周期」分段切换 (样式对齐时间范围按钮组),
副标题随视图切换; 默认市场环境 (基础数据始终有, 情绪周期需重算回填)
- 两组区块分别包 hidden 容器切换显隐 — 保持挂载不销毁 ECharts 实例,
切回无需重建
- useEChart 在 setOption 后追加 resize(): 容器从 display:none 恢复可见时
画布尺寸从 0 重算; 三个图表 deps 增加 view 触发
验证: tsc 通过; 实测默认加载/切情绪周期/切回三态 — tab 激活正确、
两组内容互斥显隐、图表 canvas 尺寸随可见性正确变化 (1254x280 /
822x320 / 391x320, 隐藏态 0), 截图存 gui-test-screenshots/regime-tab-*.png
|
2026-08-17 12:53:53 +08:00 |
|
shy3130
|
5d6669d4f3
|
fix(regime): 情绪周期时间轴冷加载空白 — useEChart 惰性 init
useEChart 的 init effect 依赖为 [] 仅组件挂载时执行一次, 而情绪周期图的
容器 div 是条件渲染 (hasPhaseData && rows.length > 0)。冷加载/硬刷新时
history 查询异步未返回 → 首帧 rows 为空 → div 不在 DOM → init 扑空且
永不再执行; 数据到达后卡片出现但 ECharts 实例从未创建, 280px 画布永久
空白 (趋势图/分布图容器为无条件渲染故不受影响)。5 分钟缓存内的二次
导航首帧即有数据, 所以表现为"时好时坏"。
修复: init 从挂载 effect 挪入 setOption effect 做惰性创建 — option 变化
时若 div 已挂载且实例不存在则补建, 再 setOption。无条件容器行为不变。
验证: tsc 通过; 新标签页冷加载 /regime 实测 — canvas 数 3 (修复前冷加载
该图为 0), 情绪周期画布 1254x280, 截图确认红线/琥珀柱/蓝虚线/图例/
双轴刻度/缩放滑块/阶段色带全部渲染 (gui-test-screenshots/regime-phase-
chart-after-fix.png)。
|
2026-08-17 12:43:33 +08:00 |
|
shy3130
|
697c27bb02
|
feat(v0.2): 市场阶段与主线识别 + 因子挖掘全链路 + 数据层完善
- 市场环境: 新增情绪周期6阶段(冰点/启动/主升/高潮/退潮/修复, 连板梯队驱动,
EMA平滑+2日确认+弱档否决, 平均段长9.7天)与概念/行业主线排名(涨停梯队聚合,
可配置宽基/风格标签过滤); 市场环境页重构, regime 透明加列, 与5档state并存
- 挖掘: 因子与策略挖掘全链路(API/worker/进程锁/候选库/前端工作台/文档),
周度调度默认关闭且永不自动发布
- 回测: 财务快照因子(点时口径), 批量回测预计算共享下期收益,
信号路径矩阵列依赖展开修复(consecutive_limit_ups 缺列报错)
- 数据/性能: enriched 生成与预热治理, 重任务限流, 行情/K线缓存复用, 时区修复
- 测试: 后端全量 914 通过; GUI 黑盒验证截图存证 gui-test-screenshots/
|
2026-08-16 23:39:07 +08:00 |
|
shy3130
|
8fe5dac7bd
|
feat(v0.2): 完善量化研究与二次开发能力
|
2026-08-13 20:16:02 +08:00 |
|
shy3130
|
57eb641275
|
fix(backtest): 修复市场环境过滤未生效
|
2026-08-11 12:43:46 +08:00 |
|
shy3130
|
8c00f7a3fd
|
feat(v0.2): 双击价格创建点位监控 + 分钟K补齐修复 + 超时设置独立
点位监控(双击图表):
- 日K/单日分时/多日分时价格主图支持双击, 自动预填目标价并按最新价判断上穿/下穿
- 成交量区与指标子图不触发; 自动生成通知文案, 用户手改后不再覆盖
- 已启用点位监控以横虚线显示 (上穿红/下穿绿), 并纳入三图 Y 轴范围
- 复用现有 PriceAlertDialog, 未改变后端 close>=/<= 规则语义与冷却机制
分钟K数据:
- 个股补齐强制回溯请求天数 (force_full_days), 修复切换日期范围只显示3天
- 单股并发补齐复用仓库写锁, 修复 Windows Parquet 临时文件替换失败
- DuckDB 读路径改用短生命周期 cursor, 释放对 Parquet 文件的占用
设置页:
- 数据任务超时从 DataSources 抽出为独立"超时设置"页签
- 设置侧栏垂直居中
验证: pytest 38 passed, pnpm build ok, git diff --check ok, 浏览器端到端 GUI 验证通过
|
2026-08-10 23:32:44 +08:00 |
|