shy3130
|
6e1c178c24
|
docs(deploy): 补充 host.docker.internal 访问与 data 挂载保护说明
|
2026-10-22 21:51:09 +08:00 |
|
shy3130
|
2056c5c390
|
fix(kline): 自选/策略迷你K停牌回补, 跳过停牌空档取最近N根
长期停牌股复牌后, daily-batch 首段「自然日×2」窗口内交易日不足,
tail(days) 只封顶不回补, 迷你K只剩复牌后几根(新亚制程复牌当日仅4根)。
改为只对凑不满 days 根的股票(含整窗无数据的长期停牌股)分轮向更早窗口
重取: 首轮+120自然日通常落在 enriched 300天内存缓存内(近零成本),
次轮+480自然日(约回看一年)兜更长停牌; ETF/指数逐只路径同样生效。
|
2026-10-22 21:51:09 +08:00 |
|
shy3130
|
01257c83ee
|
feat(pages): 设置三页合一为「页面管理」+ 源码扩展删除/URL 嵌入页/源码导入
- 菜单设置/扩展页面/页面插件三个设置 tab 合并为「页面管理」(?tab=pages, 旧链接与 /analysis 重定向兼容)
- 源码扩展页(frontend/src/custom/<ns>/)支持界面内物理删除: 先自动备份 zip 到 data/backups/pages/(可下载)再删目录, 命名校验+防穿越, 产物部署无源码树 409
- 扩展页面新增 URL 嵌入模板: 仅填菜单名+网址生成 iframe 内嵌页, 复用看板外链安全约定(仅 http(s)/拒同源/sandbox 白名单/新窗口兜底)
- 页面插件新增源码导入: 上传 .tsx 或从本项目 custom/ 选择, 后端用自带 esbuild 编译+契约适配(component→mount, 独立 react 实例自挂 Provider/Router, 图标映射白名单), 产物即标准页面插件; 无工具链部署 409
|
2026-10-22 17:47:59 +08:00 |
|
shy3130
|
b3dc03707d
|
fix(settings): 语音音色下拉选中后被「默认偏好」吞掉
「默认偏好」选项的 value 动态绑定 getCurrentVoiceURI(), 而它的解析优先级是
用户手选 > 默认偏好 —— 手选音色 X 后该选项 value 变成 X 的 voiceURI, 同时
filter 又把 X 从列表移除。受控 select 匹配到 value 相同的「默认偏好」,
回显立即弹回默认项; 再点「默认偏好」拿到的也是 X 的 URI, 被当成长选存回,
从此无法恢复默认。
修复: 「默认偏好」用固定空值 value=""(与 onChange 既有的空串=清空手选约定
对齐), 列表不再过滤, 下拉值直接用 voiceConfigured 状态, 移除派生的
voiceURI 状态。播放侧 resolveVoice 逻辑不变。
|
2026-10-22 10:34:18 +08:00 |
|
shy3130
|
463729ea5e
|
chore: v0.3.12
v0.3.12
|
2026-10-21 21:07:35 +08:00 |
|
shy3130
|
c36fea348a
|
test(index-sync): 钉死 ETF 日K测试的日K路由并补全 daily 契约文档 (#502 后续)
- test_etf_adj_factor 的 TickFlow 分支用例补路由钉死: #502 后指数/ETF
同步跟随 daily_data_provider 偏好, 不钉死会被本机 preferences.json
配置的自定义日K源干扰
- docs/custom-data-source.md 补全 daily 数据集的指数/ETF 路由说明:
按契约传 asset_type(stock/index/etf), 仅支持股票的源对其他资产类型
返回空数据, 该轮同步告警回退 TickFlow
|
2026-10-21 20:57:05 +08:00 |
|
shy3130
|
24ce7719e2
|
fix(index-sync): 指数/ETF 日K同步支持自定义数据源 (#502)
sync_and_persist_index_daily / sync_and_persist_etf_daily 原经
kline_sync.sync_daily_batch 硬编码走 TickFlow, 无视日K数据源偏好。
现与个股日K同一路由语义: 声明 daily 数据集的自定义源接管 (按契约传
asset_type=index/etf), 源空手而归 (fuyao/tdxquant/amber 仅服务股票)
告警回退 TickFlow; 路由判定移至 TickFlow 能力检查之前, 纯自定义源
部署也能同步指数/ETF。落盘逻辑复用 TickFlow 路径的帧处理, 不另起一套。
|
2026-10-21 18:05:45 +08:00 |
|
shy3130
|
78d8d54282
|
feat(recap): 复盘系统提示词支持自定义配置
复盘页「定时」弹窗新增提示词编辑区块: 完整系统提示词可编辑,
支持填入默认模板/恢复默认; 偏好键 market_recap_system_prompt 持久化,
空值回退内置默认模板, 超 32k 字符拒绝。自定义后不再跟随版本默认模板更新。
|
2026-10-21 18:05:36 +08:00 |
|
shy3130
|
9f7d64651f
|
update readme
|
2026-10-21 13:34:43 +08:00 |
|
shy3130
|
648f096ee3
|
Revert "feat(release): 发布页自动生成「本次更新」说明"
This reverts commit ef132f3bf9.
|
2026-10-21 09:50:17 +08:00 |
|
shy3130
|
ef132f3bf9
|
feat(release): 发布页自动生成「本次更新」说明
- prepare 任务新增 notes 步骤, 两级生成: GLM 总结(每条一句话、30字内、
合并同类、最多6条) → 无 key/调用失败时约定式提交归类兜底
(剔除 chore/ci 等噪声与版本号提交, 每条=提交主题, 保证发布页必有说明)
- build 任务 body 模板加「🔧 本次更新」区块, 注入 notes 输出
- prepare 检出改全量+带 tag (兜底需要上一版本区间的 git log)
- 已验证: YAML 合法; 兜底在 v0.3.10..v0.3.11 实际提交上输出正确;
AI 请求 JSON 对引号/换行/反斜杠健壮
|
2026-10-21 09:29:55 +08:00 |
|
shy3130
|
59e2772f51
|
chore: v0.3.11
v0.3.11
|
2026-10-21 09:07:40 +08:00 |
|
shy3130
|
7f34a5237d
|
fix(enriched): 全量重建覆盖校验放过日K已不存在的孤儿分区
现网案例: 用户清空日K重拉(滑动一年窗口)后, enriched 仍留着窗口外的旧分区;
发布一旦被中断即触发强制全量重建, 与孤儿分区互相锁死, 同步永久报
「全量重建结果缺少已有日期分区,拒绝覆盖」。
- 覆盖校验改为只针对日K中仍存在的日期(防重建读漏的保护不变)
- 孤儿分区(enriched 有、日K已无)保留原地不动, 告警放行 — 合并落盘
本就只重写重建范围内的分区, 不删旧目录
- 测试: 新增孤儿放行用例(孤儿分区内容原样保留); 重写拒绝用例为
0 行日K分区的真实读漏场景, 防保护回退
|
2026-10-21 09:01:47 +08:00 |
|
shy3130
|
5d44b2af23
|
chore: v0.3.10
v0.3.10
|
2026-10-20 16:22:39 +08:00 |
|
shy3130
|
aca12675e6
|
feat(screener): 分时列新增成交量带、集合竞价叠加与涨跌停纵轴
分时缩略图此前只有价格线, 无法看出量能结构, 也看不到集合竞价情况。
- 成交量带: 底部量柱, 按列配置开启; 与价格共用时间轴
- 集合竞价叠加: 左侧窄栏画竞价价格/匹配量/未匹配量, 三项取自同一张时序
扩展表 (跨表拼接会对不齐时间网格); 支持窄/标准/宽三档宽度并持久化
- 纵轴模式: adaptive(实际价格区间) / limit(按涨跌停带), 策略页与自选页
各自持久化; 涨跌停幅度按板块推导 (主板 10%, 创业板/科创板 20%, 北交所
30%), ETF/指数不套用
- 策略页与自选页共用 same-origin 的 intraday-auction 数据加载与列配置,
避免两处各写一套
验证: 新增 54 条前端测试 (竞价窄栏 25 / 涨跌停 5 / 成交量带 9 / 列配置
15); pnpm build 通过。
|
2026-10-20 16:16:38 +08:00 |
|
shy3130
|
c2ff120581
|
docs(readme): 补充 dev.ps1 参数与低配机器内存说明
- Dev 模式: 列出 -NoReload / -Force / 端口参数, 说明停止要用 Ctrl-C 而
非窗口 X, 日志落在 data/logs/, 启动前会检测同端口已有实例
- 新增「内存占用与低配机器」: 实测常驻/峰值 (默认 ~1.3GB / 1.5-1.8GB,
POLARS_MAX_THREADS=2 降至 ~0.8GB / ~1.2GB), 2GB 机器的 .env 与 Compose
配置建议, 以及不在 2GB 上跑回测/优化/挖掘、不多开实例的边界说明
|
2026-10-20 16:15:28 +08:00 |
|
shy3130
|
529dc8bf20
|
fix(dev): 启动器输出改文件重定向, 修复长时间运行内存叠加
dev.ps1 用 Start-Job + 每 150ms Receive-Job 中转子进程输出。Start-Job 会把
每行原生输出包装成带 job/runspace 元数据的 PSObject 存进 job 输出集合,
生产快于消费 (窗口最小化/RDP 断开/日志量突增) 时持续堆积且不及时释放 ——
实测开盘跑到中午, 启动器单个 powershell.exe 可占十几 GB。
- dev.ps1: 改用 Start-Process + 重定向到 data/logs/*.log, PowerShell 只持
PID; 控制台改为有界 StreamReader tail, 内存占用与日志总量无关
- dev.ps1: 新增单实例守卫 (默认拒绝启动, -Force 才结束) 与 -NoReload;
退出时 taskkill /T 结束整棵树, 覆盖 reloader 父进程与 server 子进程
- dev.sh: free_port 只杀监听者会让 reloader 父进程重生子进程 —— 改为先按
仓库 venv 路径结束同端口整组后端; cleanup 改递归 kill_tree, 不再留孤儿
- dev.sh: 只处理同端口实例, 换端口调试的实例只提示不误杀
验证: dev.sh bash -n 通过; kill_repo_backends / kill_tree 用真实进程做了
隔离测试 (8888/9999 端口不误杀、三级进程树无孤儿); dev.ps1 花括号平衡与
无残留 Start-Job 调用, 本机无 PowerShell 未做实际运行验证。
|
2026-10-20 16:15:20 +08:00 |
|
shy3130
|
fc4a4e7a33
|
fix(web): 前端 dist 根级静态文件直出, 修复浏览器页签图标 404
SPA 兜底此前把所有未匹配路径都回退 index.html, favicon.svg /
donate-wechat.jpg 这类 dist 根目录文件也被当成前端路由, 浏览器把 HTML
当图标解析失败, Docker 与桌面安装包的页签因此没有图标。
- 抽出 _register_static_routes(): /assets 继续走 StaticFiles, 单段根级
路径若命中真实文件则 FileResponse 直出
- index.html 仍走 no-store 分支, 保证 JS/CSS hash 变更后及时生效
- 路径校验排除 "." / ".." 与含 "/" 的多段路径, 不扩大可读取范围
验证: 新增 4 条路由测试 (根级文件直出 / 目录穿越被拒 / 未知路径仍回退
SPA / index.html 带 no-store)。
|
2026-10-20 16:15:06 +08:00 |
|
shy3130
|
648bab1bfe
|
fix(enriched): 发布标记残留导致读写永久 fail-closed
发布标记 (state=publishing) 缺少收尾与超时机制: 管道异常中断后标记永久
驻留, 之后所有读写持续报「数据正在发布」, 而停止实时行情反而移除了唯一
能接管它的写入方 —— 这就是用户反馈「关了实时行情还是不行」。
- run_pipeline 拆出包装层, 任何 BaseException 都调 abandon 结束发布会话;
未写分区 → 恢复 ready, 已写部分分区 → 保持 fail-closed 由超时接管
- abandon 不再因「已有写入」直接 return; _publishing 复位移入 finally,
锁竞争失败也不再让对象永久自认「发布中」; 并从活跃表移除, 允许同进程
下一个写入方立即接管
- 长任务每写一个分区刷新心跳, 纯计算阶段可显式 heartbeat(); 超过
CLAIM_STALE_SECONDS(600s) 无心跳时, 即使属主进程存活也允许接管
- 有活跃对象时一律视为在推进, 不能只凭时间戳判定: 全量重建可能在两批
写入之间计算十几分钟, 误判会放行第二个写入方
- 实时单分区写入失败也走 abandon, 避免一次瞬时失败挂到超时
- lifespan 启动自检恢复上次异常退出的残留标记, 重启即自愈
验证: 新增 10 条回归 (未写分区恢复 ready/部分写入保持 fail-closed/锁
竞争仍复位/心跳过期接管/心跳新鲜不抢占/跨进程孤儿自愈/活跃发布不被打断/
heartbeat 续期与空操作/管道两条失败路径); 后端全量 2922 passed; ruff
告警数与基线持平。
|
2026-10-20 16:14:17 +08:00 |
|
shy3130
|
5f6444277d
|
fix(screener): 列表涨跌幅改用实时行情, 与个股详情对齐
策略结果缓存只记录「计算那一刻」的价格。盘中跑完 run_all 后, 列表里的
close/change_pct 会一直停在那时, 而点开个股详情走的是实时 enriched 缓存,
同一只票在两处显示不同涨幅。实测 002543.SZ: 13:27 扫描时 2.49%, 收盘
4.48%, 缓存里 279 行中有 271 行与实时值不一致。
后端:
- /api/screener/cached 与 /cached-result 返回前, 用当前实时快照覆盖纯展示
字段 (open/high/low/close/prev_close/volume/amount/change_pct/
change_amount/turnover_rate/raw_*/quote_ts)
- 指标与信号列 (ma20/score/signal_* 等) 保持计算时点值: 用新价格重算会让
「为什么入选」不可解释
- 仅覆盖同日结果 (优先结果级 as_of, 行级 date 兜底), 历史回看不被今日行情
污染; 实时缓存为空时原样返回, 不伪造价格
- 覆盖只发生在响应层, 不写回 strategy_cache.json (写回会让 mtime 指纹失效,
等于每轮触发一次全量重读)
前端:
- 明细查询在交易时段 6s 重取、收盘后 60s 兜底, 让覆盖真正反映到页面
验证: 新增 4 条回归 (实时覆盖生效且指标保留/历史日期不覆盖/实时缓存空时
不变/cached-result 同口径); 后端全量 2926 passed; pnpm build 通过;
运行实例上两接口均返回实时价, 缓存文件仍保存原值。
|
2026-10-20 16:06:43 +08:00 |
|
shy3130
|
2c6f03dad7
|
fix(settings): 数据源「套用」接管该源声明的全部能力
原实现手写 5 个偏好字段 (daily/adj_factor/realtime/minute/financial),
漏掉 depth5 与 full_minute —— 点「套用」后这两个能力仍停在旧数据源。
改为由后端能力矩阵驱动: 遍历矩阵中每个可路由能力 (id 为数据集名、
field 为偏好字段), 该源声明即接管, 未声明回落默认源; 矩阵未加载时
fail-closed 抛错。能力清单不再在前端重复维护。
验证: 新增 7 个用例 (含"必须覆盖全部字段"防回归); pnpm build 通过。
|
2026-10-20 13:59:18 +08:00 |
|
shy3130
|
a3c2613486
|
fix(ext-pull): 拒绝会话 Cookie 作长期凭据, 调度改时刻即时生效
扩展表定时拉取此前允许把管理后台会话 Cookie 存成凭据。它最长 24 小时
过期, 过期后所有拉取静默 401; 换机器或重新部署也无法沿用, 不是可交付
配置。
- 新增 session_cookie_rejection(): 在发请求、保存拉取配置、保存 Key
三处拦截; 401/403 抛出带 API Key 指引的中文错误而非裸 HTTP 错误
- 间隔制睡眠改为每 60s 重读配置: 原先切成固定时刻要睡满整个间隔
(24h 间隔即推迟一天) 才生效
验证: 新增 9 个用例; 扩展拉取相关回归 130 passed。
|
2026-10-20 13:59:12 +08:00 |
|
shy3130
|
eab70c402f
|
fix(instruments): 数据源不提供股本时保留既有维表字段
部分行情源的 get_instruments 只返回代码/名称/市场/类型, 没有股本与交易
规则字段。维表同步整表覆盖后 float_shares/total_shares 变 null, enriched
的 turnover_rate 随之全空, 依赖换手率与流通市值的策略 (起爆、5连阳等)
基础过滤会筛出 0 只 —— 换数据源即策略结果不同。
改为按 symbol 逐行 coalesce: provider 有值用 provider, 为空才回落既有
维表值; 新上市标的保持 null 不伪造; provider 自带字段时以其为准。
provider 完全缺字段且无历史维表时打 warning 提示换手率将为空。
验证: 新增 5 个用例; 真实维表同步后 5580 只仅 3 只新标的为空。
|
2026-10-20 13:59:07 +08:00 |
|
shy3130
|
05817654d3
|
fix(release): Linux 产物版本号插入位置 — .tar.gz 双扩展名不再拼成 .tar-0.3.9.gz
|
2026-10-19 18:35:52 +08:00 |
|
shy3130
|
a85edf21c2
|
chore: v0.3.9
v0.3.9
|
2026-10-19 18:12:27 +08:00 |
|
shy3130
|
9d3ac6381d
|
feat: 扩展数据调度与交互优化、缓存与策略性能优化
- 扩展数据: 每日/每周/每月调度 + 仅交易日, 拉取设置双层对话框, 创建/编辑弹窗统一
- 量比: 盘中按已交易分钟折算当日成交量, 修复自动/手动数值撕裂
- 策略执行: 分钟路径接入后台单飞队列, 线程池 40→100, 渐进式结果隔离
- 性能: 策略矩阵请求内缓存、策略缓存内存镜像(mtime 指纹失效)、坏策略向量化
- 前端: 分时缩略图着色改为过昨收基准线判定、数字输入草稿态、RunningHub 折扣动态化
- RunningHub: 透传忙闲时定价并展示当前时段
|
2026-10-19 16:45:13 +08:00 |
|
shy3130
|
e1e332ced4
|
merge: PR #492 优化扩展数据拉取连接复用
分页/历史回补/两级拉取共用一个 HTTP 客户端, 任务结束或取消时关闭。
冲突仅 ext_pull.py 顶部 import: 保留 timedelta + contextlib + contextvars。
|
2026-10-19 15:38:23 +08:00 |
|
Zhangergou
|
eea2ca4cd4
|
优化扩展数据拉取连接复用
|
2026-10-19 14:37:21 +08:00 |
|
 
|
19486fc061
|
fix(monitor): 演示规则不再写入已下线的内置策略 id (#491)
内置策略在去内置化后已全部下线, 但 _DEMO_STRATEGY_RULES 仍硬编码
trend_breakout / macd_golden。seed 接口不校验就 save_one(), 于是:
- 规则列表显示「已启用」, 实际永远不会触发;
- 运行时 _match_strategy 把 unknown strategy 异常吞成 return [], 日志无线索;
- 同样的规则走单条创建接口(POST /api/monitor-rules)会被 engine.get() 拒掉,
两条路径契约不一致。
修复:
- 新增 _strategy_available(): 落盘前用策略引擎 has() 校验, 引擎未装配/查询
异常一律视为不可用(宁可不种, 不种死规则);
- 不可用的演示策略跳过, 响应里返回 skipped 列表, 日志 warning 提示需自建策略;
- _match_strategy 的 except 分支补 debug 日志, 不再完全静默。
测试: tests/test_monitor_demo_rules.py (5 例, 覆盖已注册/未注册/引擎缺失/
引擎异常/存在同名策略时照常生成)。
Co-authored-by: leejialing <leejialing@users.noreply.github.com>
|
2026-10-19 08:56:07 +08:00 |
|
shy3130
|
c71f73eeb2
|
fix(watchlist): 自选列表支持日内多盘扩展列迷你图
自选页 renderExtCell 是独立实现, 未接入 snapshotRender 图表分支 —
列设置里配了折线/柱状形态后自选列表仍显示文字值。接入与策略页同口径的
ExtSparkChart 渲染与按列表标的的序列拉取 (每日截面表无时间列不受影响,
@时刻文字值此前已经后端生效)。
|
2026-10-19 00:16:32 +08:00 |
|
shy3130
|
8989073ede
|
feat(ext): 扩展数据三项增强 — 固定时刻拉取 / 多盘选盘与迷你图列 / 策略时序入口
- 拉取调度支持每日固定时刻 schedule_time (北京时间墙钟对齐; 重启安全,
当日已拉不重复; 配置后忽略间隔与时间窗口)
- 日内多盘扩展列: ext_columns 支持 @HH:MM 选盘时刻 (取该时刻或之前最近
一盘, 之前无盘不显示, fail-closed); 新增 /series 日内序列端点与
schema-all time_field; 策略列表列支持分时式折线/柱状迷你图 (纯 SVG),
多盘表数值列添加即默认图表形态
- market_data 新增 get_ext_timeseries 只读入口: 沙箱策略可在 filter_history
内读取扩展时序表原始日内行, 计算序列形态条件
验证: 后端 657 项相关测试、前端 tsc + vitest 155 通过; 实数据核对选盘取值
与序列首末点; 开放契约快照登记 GET /api/ext-data/{config_id}/series
|
2026-10-19 00:12:09 +08:00 |
|
shy3130
|
f5ca4e16a6
|
fix(engine): 策略引擎科创板板块过滤补 689 号段
#485 修了创业板 302 但科创板分支仍只有 688; 689 (CDR 号段, 如
689009.SH) 在 price_limits/matrix/overview/paper 均已覆盖, 引擎
选股漏配 — 选「科创板」时 689 标的被静默排除。与 #488 口径对齐,
附板块过滤号段回归测试。
|
2026-10-18 14:42:10 +08:00 |
|
 kevinandGitHub
|
7ee42af76c
|
fix(backtest): 板块筛选包含创业板 302 与科创板 689 号段 (#488)
|
2026-10-18 14:39:38 +08:00 |
|
 kevinandGitHub
|
dfbc3167e9
|
fix(paper): 科创板 689 号段模拟盘涨跌停按 ±20% (#486)
|
2026-10-18 14:38:56 +08:00 |
|
 kevinandGitHub
|
7f02c04b4a
|
fix(price-limits): 创业板 302 号段按 ±20% 与创业板规则处理 (#485)
|
2026-10-18 14:38:11 +08:00 |
|
shy3130
|
b63c17e9ec
|
feat(custom): 自定义数据源支持五档盘口与财务数据接入
后端拉取/路由/能力增广链路此前已就绪, 本次补齐缺口:
- 编辑器新增「五档盘口」「财务数据」数据集 tab: 五档预填
symbol/asks/bids; 财务预填骨架三列, 下拉可选五表全部 canonical
列(带中文标注); 两者均为逐批代码参数快照型, 隐藏起止时间参数
- test_dataset 财务分支注入 table=metrics, 与生产同口径
- validate: depth5/financial 豁免起止时间重名检查; 新增映射目标
重复拦截(运行时 rename DuplicateError 会整表拉空)
- mapper.map_rows 改全量推断: 默认 100 行采样把稀疏财务列推断成
Null 列, 第 101 行数值 append ComputeError → 整表拉空(batch=100
必现, 与 fuyao 插件同因)
- 契约文档: 五档/financial 字段契约与五表 canonical 列清单,
映射一对一限制、缺失列跨批合并补 null 的降级语义
- 回归 6 条: table/latest 注入、validate 豁免与拦截、metrics
探测、稀疏列推断修复
验证: 后端全量 2798 passed + 前端 155 passed + tsc 通过;
mock 接口 E2E 真连 + 浏览器 UI 用户旅程实测。
|
2026-10-17 22:05:56 +08:00 |
|
 Break ZhangandGitHub
|
9b01af2b16
|
perf(matrix): 减少重复整理,缩短回测矩阵首次构建耗时 (#482)
|
2026-10-17 21:39:19 +08:00 |
|
shy3130
|
5825c7b537
|
docs(promo): DeepSeek v4.1 Flash 折扣文案 6 折 → 3 折
RunningHub 推广调整, 上游 /v1/models 实测 discountRate=0.3;
模型列表折扣徽章为动态下发无需改动, 仅同步三处硬编码文案。
|
2026-10-16 22:04:27 +08:00 |
|
 wshyandGitHub
|
a307fcf465
|
Update README.md
|
2026-10-16 21:08:32 +08:00 |
|
shy3130
|
07dfd5a17b
|
fix(ci): 升级保护清单步骤强制 bash shell — Windows runner 默认 pwsh 不认 $() 语法
|
2026-10-16 18:34:00 +08:00 |
|
shy3130
|
8f9251c77f
|
chore: v0.3.8
v0.3.8
|
2026-10-16 18:26:43 +08:00 |
|
shy3130
|
e737db0c76
|
fix(docker): 放行 scripts/generate_manifest.py 进构建上下文
feat(guard) 提交在 Dockerfile 新增 COPY scripts/generate_manifest.py,
但 .dockerignore 的 scripts 整目录排除规则把该文件挡在构建上下文之外,
导致 docker.yml 双平台构建失败 (CopyIgnoredFile → not found)。
改为 scripts/* + 取反例外, 并修正头注释中"不支持取反语法"的过时说明。
已用仓库真实上下文 + scratch Dockerfile 本地验证三个 COPY 均可用。
|
2026-10-16 16:56:40 +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 |
|
 intfooandGitHub
|
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 |
|
 intfooandGitHub
|
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 |
|
 yi111andGitHub
|
fbf9c8b767
|
fix(dates): use cn_today() for A-share date defaults across APIs and services (#429)
|
2026-10-16 13:32:26 +08:00 |
|
shy3130
|
4f9af038d8
|
fix(paper): 自动跟单卖出按可卖持仓封顶, 金额超出持仓不再整单被拒 (#462)
# Conflicts:
# backend/app/strategy/paper_auto.py
|
2026-10-16 10:07:31 +08:00 |
|
  
|
b7892e49e2
|
fix(paper): 模拟盘读日线改用 scan_daily_parquet, 容忍分区间 quote_ts 列差异 (#463)
实时行情写入的当日 kline_daily / kline_index_daily 分区带 quote_ts 列, 管道与
历史扩展写入的分区没有。裸 pl.scan_parquet 以首个文件定 schema, 遇到多列即抛
SchemaError 并被吞成 None: 昨收取不到(涨跌停校验失效)、次日开盘/收盘单与盘后
定版拿不到价格、基准收盘缺失。改用仓库既有的 scan_daily_parquet。
Claude-Session: https://claude.ai/code/session_01WydecjgAwEPFurSvKVZCJu
Co-authored-by: zelongji <4558700+zelongji@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-16 09:45:42 +08:00 |
|
shy3130
|
95e1519994
|
fix(enriched): warmup 世代漂移丢弃后有界重建 GH #480
|
2026-10-16 09:06:04 +08:00 |
|