sc
|
f6fc22fef1
|
feat(strategy): AI 策略保存为 research_only 草稿 + publish 端点
|
2026-09-06 13:41:51 +08:00 |
|
shy3130
|
91d2268532
|
docs(strategy): 新增 AI 策略迭代指南
- 新增 docs/strategy-iteration.md:两阶段闭环(粗调/精调)与分层验证、迭代台账与版本快照、证据包格式、判定门槛/留出集终审/停止规则、五张提示词卡片、现有功能映射表、UI 工作台规划(显式标注未实现)
- docs/strategy.md 方式二末尾加互链
- README 完整文档表加入口行
|
2026-09-06 11:13:14 +08:00 |
|
wshy
|
aeb52b4a64
|
Update README.md
|
2026-09-06 09:57:38 +08:00 |
|
shy3130
|
ae30b0cb85
|
docs(deploy): 快速开始按推荐度重排,新增 GHCR 镜像与 AI 代部署方式
- 核心功能表改 HTML 表格并给模块/详见列加 nowrap,修复 GitHub 渲染换行
- 快速开始新增方式 C(本机 AI 代部署)与 GHCR 现成镜像,重排为 A=GHCR / B=Compose / C=AI / D=Dev
- 修正过时表述:Docker/GHCR 镜像默认不含 stock-sdk(与 Dockerfile/CI 实际一致)
- docs/deployment.md 四方式同步重排,补镜像直跑用户的更新流程
- 操作说明书新增 2.5 GHCR 镜像启动,25.1 补镜像更新命令
|
2026-09-06 09:54:24 +08:00 |
|
wshy
|
900dbea59c
|
Merge pull request #246 from 0112020179/codex/custom-depth-provider-245
feat(data-source): support custom depth providers
|
2026-09-06 09:51:41 +08:00 |
|
wshy
|
2ebb9f0b11
|
Merge pull request #249 from kevin9327/fix/watchlist-upload-cap
fix(watchlist): 自选导入上传分块读取, 越限即拒绝而非读完再拒
|
2026-09-06 09:51:36 +08:00 |
|
wshy
|
c08e26ddd1
|
Merge pull request #250 from kevin9327/fix/feishu-test-attempt-count
fix(notifications): 飞书推送按传入的 max_attempts 退避与记日志
|
2026-09-06 09:51:33 +08:00 |
|
0112020179
|
b5a005a8ac
|
feat(data-source): support custom depth providers
Closes #245
|
2026-09-05 22:49:52 +08:00 |
|
shy3130
|
e9359c4fa7
|
feat(screener): 新建策略模板统一 basic_filter 默认值
- 普通与矩阵两个模板统一为: 价格 5~200、流通市值 30~1500 亿 (float_cap)、
换手率下限 1%、排除 ST、次新 30 天、板块默认不含北交所
- 成交额与总市值下限显式置 None: 引擎合并规则下省略键会继承
DEFAULT_BASIC_FILTER (成交额 0.2 亿 / 总市值 10 亿), 显式 None 才表达"不设"
- 矩阵模板原无 basic_filter (落库后走引擎兜底), 一并补齐消除两模板不一致
验证: pnpm build 通过; 字段语义核对 (_basic_filter_expr 对 None 跳过,
float_cap=close*float_shares, turnover_rate 为百分数口径, boards 白名单制)。
|
2026-09-05 20:48:45 +08:00 |
|
shy3130
|
c289ac5767
|
fix(backtest): 步进优化支持 python_history_legacy/polars_expr 策略
问题: WalkForwardService._prepare_shared_matrix 对非 matrix_native 策略直接抛
"步进优化暂仅支持矩阵策略", filter_history 类自定义策略 (如 everbloom 系列)
无法做步进优化。
根因: 闸门把非矩阵后端一刀切, 但 run() 内部本就存在 shared_market_data=None
的通用路径 (每折独立优化 + 独立 OOS 回测), 只是永远不会被走到。
方案: 闸门改分流 —— matrix_native 仍走共享矩阵加速路径; python_history_legacy
与 polars_expr 返回 None 走通用每折回测路径 (正确但无矩阵加速); composite /
minute_filter 维持 fail-closed 拒绝, 错误文案同步更新。
兼容: matrix_native 行为不变; 结果字段 shared_market_data=false 标识通用路径。
性能: 非矩阵策略每组合×每折一次完整回测, 大网格耗时线性放大 (UI 已有耗时提示)。
验证: uv run --frozen pytest tests/backtest/test_walkforward.py -q (23 passed,
含新增 3 例: legacy 走通用路径/polars_expr 放行/minute_filter 拒绝);
tests/backtest 全套 282 passed; ruff 无新增告警;
真实 API 端到端: everbloom_tupengpan 2x2 网格 120/30 步进 8/8 折全部完成。
|
2026-09-05 20:33:31 +08:00 |
|
kevin9327
|
d46e601863
|
fix(notifications): 飞书推送按传入的 max_attempts 退避与记日志
_post_feishu 的退避判断与最终 WARNING 仍用模块常量 _FEISHU_MAX_ATTEMPTS(3),
设置页「发送测试消息」传 max_attempts=1 时: 唯一一次失败后仍 sleep 1 秒才返回,
日志写「已重试 3 次」而实际只试了 1 次。两处改用 max_attempts; 生产路径不变。
测试: 单次尝试不退避且日志计数为 1 (未修复时失败), 默认 3 次仍退避 1s、2s。
|
2026-09-05 21:14:53 +09:00 |
|
kevin9327
|
e12e0c7d02
|
fix(watchlist): 自选导入上传分块读取, 越限即拒绝而非读完再拒
import-csv / import-image 原先 `await file.read()` 之后才比较长度, 上限只在
整个文件进入内存之后生效, 与 issue #204 修复前的扩展数据上传同类。新增
_read_upload_capped 分块读取, 累计超过上限的那一块立即返回 400 并停止读取,
状态码与文案不变; 内存占用不超过上限 + 一块。
测试: 新增 5 例 (含「越限后不再继续读取」的字节计数断言); test_watchlist_csv
的上传 mock 改为像真实 UploadFile 一样读尽返回 b""。
|
2026-09-05 21:11:44 +09:00 |
|
wshy
|
c1ad4880fe
|
Merge pull request #248 from 0112020179/codex/fix-index-chart-jitter
fix(chart): prevent axis boundary hover jitter
|
2026-09-05 18:46:55 +08:00 |
|
shy3130
|
b3e492d890
|
feat(factor-editor): 算子/字段面板与模板库 UX 迭代
- 算子区去重: 移除裸 chips 行, 速查表升级为唯一算子面板(默认展开, 挂载时置 open 避免与折叠态打架)
- 速查表重设计: 时序(13)/截面(3)/工具(9)三张分组卡片, 每行=完整签名+中文说明+参数约束, 点击整行插入公式光标处; 与 chips 共用 OPERATOR_GROUPS 单一数据源
- 折叠标题突出: 白色前景色+medium 字重+accent 箭头(展开旋转), 悬停变色
- 可用字段: 展开高度 160→256px; 分组名提亮加粗; 字段英文 id 蓝色(与算子签名同色), 中文保持灰色
- 模板库 5→12: 新增 低波动/量比回落/RSI超卖/低振幅/隔夜反转/距高点回落/换手稳定, 全部经 /api/factors/validate 预校验
- 校验/试算按钮居右(ml-auto)
- factor-platform-plan.md §5.2 模板计数同步
|
2026-09-05 18:19:34 +08:00 |
|
shy3130
|
2ff909cd36
|
fix(notifications): #244 维护者补丁 — 移除预埋类型并修正全角标点
- 移除 api.ts 中与通知无关的 MainCostEstimate/StockLevels.main_cost 类型(对应后端字段在本仓库不存在, 属跨 PR 预埋, 全仓库零引用)
- settings.py 5 处 PR 新增字符串的全角逗号改半角, RUF001 恢复到 main 基线(28 ≤ 29)
- 验证: 通知测试 48 passed, 前端 build 通过
|
2026-09-05 17:16:58 +08:00 |
|
wshy
|
c1cad36449
|
Merge pull request #244 from yushenglin01/feat/notification-channels
feat(notifications): add custom webhook and email channels
|
2026-09-05 17:14:25 +08:00 |
|
shy3130
|
e40bf15a50
|
docs(manual): 操作说明书适配 v0.2.3 — 新增因子与信号库章节, 28 章重排
- 新增第 10 章「因子」: 检验/因子库/编辑器/组合/挖掘五 tab 与因子↔策略四条桥, 原 9.1 因子回测内容迁入并扩充
- 新增第 11 章「信号库与持仓提醒」: 信号库独立页(原设置 19.6 迁出)与持仓提醒页
- 第 9 章重构: 回测页改为「策略|验证」两视图口径, 小节重排为 9.1 策略回测/9.2 参数优化/9.3 步进优化
- 原 10-26 章顺移为 12-28(含目录锚点与交叉引用); 1 章概览、5.1 菜单、4 章流程、21 章设置清单同步更新
- 校验: 目录 28 条与正文 H2 完全一致, 章节号连续, 无坏锚点与过时引用
|
2026-09-05 16:52:40 +08:00 |
|
shy3130
|
e0cd625ef4
|
feat(platform): 因子平台与因子↔策略双向联动 v0.2.3
- 因子平台: /factors 一级页(检验/因子库/编辑器/组合/挖掘), DSL 公式因子(25 算子点选、双语字段、我的因子模板、脏公式守卫), 版本与生命周期, 自动挖掘 L1 统计筛选
- 因子↔策略四条桥: 触发器 Zap 快建因子条件信号、因子一键生成排名策略、自定义信号 AI 提示词接入因子分组、策略回测因子归因(胜/败单入场信号日因子均值, 独立 tab, 双语因子名)
- 回测: 统计卡新增盈亏比(≥1 红/<1 绿), 蒙卡回撤合并为中位/95% 双值卡(自适应字号), 高级设置基础过滤与策略编辑器参数对齐(5 组区间)
- 信号库独立页 /signals(原设置 tab 迁出), 持仓提醒入导航; 挖掘并入因子页第 5 tab, /mining 旧链接重定向
- 研究线配套: 因子目录 61→77(评分/矩阵双内核), stats_v2(Newey-West/BH-FDR/DSR), enriched 管道与异动/报价服务配套调整
- 文档: README 导航与特性表、features.md 因子平台章节、操作说明书 9.2、factor-platform-plan 执行状态与 §5、二开文档桥接说明; 交流与支持节改版
- 版本 0.2.2 → 0.2.3; 后端全量 1625 passed(1 例环境性跳过), 前端 build 通过
|
2026-09-05 15:41:15 +08:00 |
|
0112020179
|
f6257408bf
|
fix(chart): prevent axis boundary hover jitter
|
2026-09-05 15:23:50 +08:00 |
|
yushenglin
|
5289cde13e
|
feat(notifications): add custom webhook and email channels
|
2026-09-04 16:37:06 +08:00 |
|
shy3130
|
bab609b2d4
|
fix(ai): DeepSeek thinking 禁用参数被 400 拒绝时去参重试 (#240 跟进)
_openai_kwargs 对 DeepSeek V4 官方域名注入的 thinking 禁用参数
(extra_body) 属外部 API 契约, 模型/接口版本差异可能报 400。照
temperature / reasoning_effort 既有模式补第三条定向回退: 400 且
错误信息指向 thinking 时移除 extra_body 重建请求 (回退默认思考
模式; 若正文因此被推理挤占, 由 _iter_openai_text 显式报错指引)。
与 thinking 无关的 400 不触发回退, 直接抛出。
|
2026-09-04 12:50:50 +08:00 |
|
wshy
|
3fee4ecba5
|
Merge pull request #240 from yushenglin01/fix/ai-analysis-focus
修复 AI 分析关注重点不突出及静默失效问题
|
2026-09-04 12:47:39 +08:00 |
|
wshy
|
831e2dc5db
|
Merge pull request #243 from 0112020179/codex/stream-regime-batches
fix(regime): 逐批聚合以降低全量重算内存峰值
|
2026-09-04 12:47:35 +08:00 |
|
shy3130
|
a9af2bce1c
|
fix(pipeline): enriched 全量重建流式化, 峰值内存与历史长度解耦 (#208/#174)
小内存机器 (2C2G) 延长历史后全量重建必然 OOM 的两个根因:
1. 全量模式把所有批次结果累积在内存 date_buffers 直到统一写盘,
5 年 x 5500 只 (~800 万行) 全表驻留 0.5-1GB;
2. 批次大小按「每只 ~244 行」的年代设定, 历史延长后单批宽表
(指标全列) 瞬时 ~600MB。
修复 (双核模拟实测: 275 万行峰值 RSS 958MB -> 415MB, 耗时 +37%):
- 流式暂存发布: 每批结果立即写暂存文件 (enriched 树外隐藏目录,
不被 **/*.parquet 业务 glob 扫到; polars/duckdb 的 ** 均匹配
点目录), 最后按日期分块流式合并、逐分区原子替换; 日期覆盖
校验与 EnrichedPublication 崩溃语义保持不变, finally 保证
暂存清理, 历史残留按 mtime (24h) 启动清扫;
- 自适应批次: 检测内存 <8GB 时按单批目标行数 15 万收缩,
>=8GB 保持用户设置 (大机器行为不变, 20 核实测耗时持平);
- 刷新路径同修: 启动/盘后的 300 天窗口计算 (repository) 改走
compute_enriched_history_window 分批执行, 与整帧顺序等价
(各步骤均 over(symbol) 分组), 峰值与标的总量解耦。
验证: 新增 5 项回归测试 (流式输出与整帧直算逐列相等/暂存清理/
残留清扫/自适应批次/窗口分批等价), 全套 backend 1498 项通过,
ruff 基线零新增。
|
2026-09-04 12:40:04 +08:00 |
|
0112020179
|
885e693118
|
fix(regime): aggregate fallback batches incrementally
|
2026-09-04 12:19:35 +08:00 |
|
yushenglin
|
00b3492414
|
fix(ai): 优化分析关注重点与正文输出
|
2026-09-04 12:03:06 +08:00 |
|
shy3130
|
8c28132361
|
fix(analysis): 概念/行业映射缓存命中返回类型与签名不一致 (#186)
_load_concept_map_df 正常路径返回 (map_df, count) 元组, 但缓存只存了
裸 map_df —— 600s TTL 内二次访问命中缓存返回 DataFrame, 调用方按元组
解包把两列拆成两个 Series, 概念/行业分析二次打开必报错 (issue #186
报告者定位)。
- 缓存与返回值同构: 存 (map_df, count) 元组, 类型注解同步
- 移除 market_mainline / rps_rotation 两处针对旧 bug 的防御性兼容层
- 删除失效的 bare-DataFrame 兼容测试, 新增缓存契约回归测试 (3 次连跑通过)
|
2026-09-04 11:59:00 +08:00 |
|
shy3130
|
2ce8b4b17d
|
fix(ext-data): 内置概念/行业 preset 不再启动即自动联网拉取 (#199)
|
2026-09-04 11:53:15 +08:00 |
|
shy3130
|
7ea741e4dc
|
fix(backtest): 回测交易/选股行支持键盘打开K线弹窗 (#239 维护者补丁)
|
2026-09-04 11:41:54 +08:00 |
|
wshy
|
84f00d36d3
|
Merge pull request #239 from thinkbuf/feat/backtest-result-kline-click
feat(backtest): clickable K-line popups for trade & picks rows
|
2026-09-04 11:40:53 +08:00 |
|
wshy
|
2140209506
|
Merge pull request #237 from 0112020179/codex/incremental-detail-kline
perf(kline): 个股详情仅增量更新最后一根日 K
|
2026-09-04 11:26:55 +08:00 |
|
wshy
|
4ca655279a
|
Merge pull request #236 from 0112020179/codex/preserve-index-cache-on-failure
fix(index): 指数请求失败时保留上一轮有效缓存
|
2026-09-04 11:26:52 +08:00 |
|
 richardandClaude
|
4bb26713fc
|
feat(backtest): clickable K-line popups for trade & picks rows
回测结果页三处标的/交易现在都能点开K线弹窗:
- 交易明细每行可点击,复用 TradeKlineModal 打开该笔交易的「交易回放」(买卖价线 + 持仓区间)。
- 选股分析每行(按标的聚合)新增 PicksSymbolKlineModal:展示该标的整个回测期的日K,逐笔标注买入/卖出箭头并显示成交价;同日同方向多笔合并为一个箭头,价格相同显示 ×n,不同则显示区间。
- 原两个弹窗状态合并为单个 union 覆盖层状态,类型上保证同一时刻只打开一个,消除各 opener 的手工互斥。
- 图表组件透传 visibleBars:'all',标的回放初始即适配显示整段区间,避免买卖点被默认尾窗遮挡。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-09-04 11:15:36 +08:00 |
|
0112020179
|
8721bd2e83
|
perf(kline): update detail chart with latest row
|
2026-09-03 17:35:16 +08:00 |
|
0112020179
|
2e8be527b6
|
fix(index): preserve realtime cache on provider failure
|
2026-09-03 14:42:32 +08:00 |
|
shy3130
|
4cb30e48aa
|
fix: screener JIT 透传 turnover_rate (#187) + PullScheduler 线程安全 (#203)
- #187: _compute_enriched_full/_load_enriched_history 的 warmup 读取
白名单补上存储列 turnover_rate —— instruments 不可用无从重算时,
自定义 SQL 用该列做条件会 Binder Error 被吞成静默空结果
- #203: refresh 的 _tasks 增删 diff 从调用方线程移进主循环闭包,
消除 TOCTOU 窗口; 行为测试覆盖增删/幂等
#187 测试已在修复前代码上验证会失败 (instruments 为空时列丢失)。
|
2026-09-03 13:45:12 +08:00 |
|
shy3130
|
91fef6d793
|
test: 加强 #201/#224 回归测试至可复现级别
- #201 warmup 测试改为与全历史计算基准对比数值 (ewm 指标从首值播种,
仅断言非 NaN 无法区分新旧代码)
- #224 注入测试改用合法同构 parquet 做目标 (读 /etc/passwd 在未加固
连接下同样报错, 区分不了攻击面是否真实闭合)
两个测试均已在修复前代码 (41205b1/e89ea9b) 上验证会失败。
|
2026-09-03 13:26:42 +08:00 |
|
shy3130
|
ef59df4a67
|
fix: 修复 6 个 issue (#225/#226/#201/#188/#200/#196)
后端:
- #225 自定义源分钟K字符串 datetime 不再被 cast 成 null:
_normalize_minute 对 Utf8 列按常见格式链式解析 (参照 kline_sync 口径)
- #226 自定义源日K/除权因子单批失败只隔离该批 (重试 1 次 + 跳过 +
warning 汇总), 不再丢弃已成功批次的全部进度
- #201 旧信号回测 _load_panel 加指标 warmup 窗口 (120 交易日保守日历日),
计算后裁回 [start,end]; 数据不足时自然退化
前端:
- #188 因子回测单标的不再整面板空白: 外层条件改 !error, IC 卡片
单独守卫并给出需 >=2 只的提示
- #200 因子回测支持调仓频率 (日/周/月) 与滑点 (bp) 配置
- #196 自选页板块筛选新增 ETF 分类, 旧偏好加载时补 ETF 键保持默认可见
|
2026-09-03 13:20:59 +08:00 |
|
shy3130
|
e89ea9becf
|
fix: 修复 4 个 P1 issue (#224/#232/#223/#215)
- #224 screener 自定义 SQL 的内存连接关闭 enable_external_access,
注入的 read_parquet/COPY 文件读写直接报错 (安全)
- #232 指数展示缓存百分数口径在消费边界显式 /100:
pipeline._bench_rt_pct_of 与 abnormal_moves._bench_rt_pct 两处,
修复 3/10/30 日偏离值被放大两个数量级
- #223 盘后管道按同日 daily/enriched 行数比较检测实时合并提前
创建的部分分区, 删除后由增量重算全市场补齐
- #215 _basic_filter_for_asset 扩展中和股票专属键 (price_min/max/boards),
并应用到回测/挖掘/策略扫描三个运行期入口, 修复 ETF 静默零信号
|
2026-09-03 13:01:43 +08:00 |
|
shy3130
|
41205b197c
|
chore: follow-ups for PR #231/#233 reviews
- monitor_rules: raise from None in remind_date validation (B904)
- lots: log warning on asset-type fallback to stock (fail-open traceability)
- matrix: demote turnover NaN-column notice to debug
|
2026-09-03 12:45:24 +08:00 |
|
wshy
|
8b12fc7a65
|
Merge pull request #231 from thinkbuf/feat/lots-alerts
feat(lots): holdings-reminder page — per-buy-lot auto stop/profit & expiry monitoring
|
2026-09-03 12:39:58 +08:00 |
|
wshy
|
f8031e16f4
|
Merge pull request #233 from SeerGlaucus/fix/etf-backtest-turnover-rate
fix(backtest): ETF矩阵回测因缺失换手率字段报错
|
2026-09-03 12:39:52 +08:00 |
|
SeerGlaucus
|
ba83e0241b
|
fix(backtest): ETF矩阵回测不因缺失换手率字段而失败
非股票资产(etf/index)无股本数据(维表仅 symbol/name/code/asset_type),
数据源也不提供换手率; 但矩阵缓存档 common_filter 强制 turnover_min:0.0,
依赖解析仍为 ETF 请求 turnover_rate(需 float_shares 派生), 导致矩阵缓存
构建失败。实测内置 low_volatility_leader 也报
"matrix turnover_rate requires float_shares"。
- _basic_filter_for_asset 将 turnover_min/max 一并中和(与市值界同族, 上次修复遗漏)
- _populate_matrix_derived_arrays 对无股本的 etf/index 把缺失的 turnover_rate
降级为全 NaN 列(与运行期 _optional_field 语义一致), 股票派生路径行为不变
- 新增回归测试: ETF 无股本时降级 NaN 不报错; 有 float_shares 时仍正常派生
|
2026-09-03 02:37:52 +08:00 |
|
 richardandClaude
|
adc7ab52a9
|
feat(lots): holdings-reminder registry with auto stop/profit & expiry monitoring
新增「持仓提醒」页(/lots),登记买入批次(个股/ETF),每批自动生成并同步两条
监控规则: lot_{id}_p(type=price 止盈止损)与 lot_{id}_d(type=date 到期提醒)。
- 核心监控引擎新增 date 规则类型: 纯日历窗口、每个交易日仅在首个轮询评估一次、
按天 cooldown、跨天清理过期键; 消息按触发当天显示"N天后到期/今日到期"。
- 批次派生规则继承默认 webhook 渠道; 监控中心只读展示(批次/批次托管徽标),
通用 monitor-rules 接口对带 lot_id 的规则写/删返回 409, 避免与批次页脱节。
- 通知正文统一在缺省时追加触发现价与涨跌幅, 并避免与引擎自带引语重复。
- 后端分层: strategy/lots.py 域(校验/存储/批次→规则纯映射) + api/lots.py 薄路由
(写锁/校验先行/级联删规则/复用 _sync_engine 重载); services/fs_utils.py 原子写。
- 前端: api/queryKeys 契约、DateShortcuts、Lots 页(数值输入可留空、加载/出错态、
文案打磨)、Monitor 日期提醒/批次徽标; RuleEditor 不手工建 date(由持仓页生成)。
- 记账/加仓减仓属"交易口径", 不在本改动(issue #230); 到期提醒按自然日窗口,
休市/节假日顺延的交易日历口径待 issue 定夺。
验证: 新增 tests/test_date_rule.py + tests/test_lots.py 全绿(20), 监控族回归通过,
ruff 新文件干净, pnpm build 通过。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-09-02 20:20:38 +08:00 |
|
shy3130
|
de5d5a9769
|
chore: update assets
|
2026-09-02 16:27:38 +08:00 |
|
wshy
|
a28f9e852f
|
Merge pull request #228 from thinkbuf/feat/watchlist-import-csv-groups
feat(watchlist): batch import CSV / pasted codes into groups
|
2026-09-02 15:55:18 +08:00 |
|
wshy
|
3a3012f5b6
|
Merge pull request #227 from thinkbuf/feat/webhook-test-message
feat(monitor): add webhook test message button
|
2026-09-02 15:55:12 +08:00 |
|
shy3130
|
7ac0456c53
|
feat(mining): 实时行情与挖掘的冲突确认弹窗
盘中实时开启时 enriched 每轮落盘推进数据世代, 排队中的挖掘任务
开跑会因首轮世代校验失败而报错 (mining data generation changed
after the run was queued, 用户反馈)。两个方向加确认弹窗:
- 挖掘页: 实时开启时点「开始挖掘」→ 三按钮确认 (取消 / 仍要开始 /
关闭实时并开始 — 后者一键关实时并提交任务)
- 侧边栏实时开关: 存在 queued 挖掘任务时开启 → 确认弹窗;
运行中任务自动跟随新世代, 不拦截
验证: tsc 零错误 + build 通过 + 浏览器验收 7/7 (弹窗出现/取消
无副作用/关实时并启动任务链路/无排队任务不拦截/环境恢复)。
|
2026-09-02 15:20:48 +08:00 |
|
 richardandClaude
|
e9f5c606b6
|
feat(watchlist): batch import CSV / pasted codes into groups
自选页新增批量导入:支持 CSV/TXT 文件与粘贴证券代码两种来源,解析出
候选并在弹窗内确认后按 M:N 分组一次性写入(目标分组可多选或就地新建,
默认只勾新增标的,已在自选的可并入所选分组)。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-09-02 14:48:32 +08:00 |
|
wshy
|
7619fbcf7a
|
Merge pull request #210 from thinkbuf/feat/kline-preview-nav
feat(kline): 弹窗切股导航 + 邻股预取 + 悬停「至今」+ 外部链接
|
2026-09-02 13:52:38 +08:00 |
|