Commit Graph
945 Commits
Author SHA1 Message Date
shy3130 d3500b1e76 docs(examples): 示例脚本实测修正 — 演示值按字段语义 / 回测走纯 Polars 引擎 / hello 输出规整
四个示例以真实 Token 完整跑通: 01 行情 / 02 写入+读回 / 03 策略清单+回测 /
04 票据+事件流 (种告警实时收到 4 条 alert)。
- 02: 演示行不再把占位值写进 date/name, 按字段名给合理值
- 03: POST /api/backtest/run 依赖 vectorbt (可选 extra), 改走所有安装自带
  纯 Polars 引擎的 /api/backtest/strategy/run, 近 90 天单标的控制耗时
- 04: hello 帧打印规整
2026-09-26 11:42:22 +08:00
shy3130 f20772d7b7 feat(open-api): 开放能力闭环 — write:ext 数据写入 + SSE 事件流 + 契约守护
二开闭环补齐三块: 数据进得来 (写入)、事件推得出 (SSE)、契约有人守 (快照+CI)。

- write:ext scope (第六档): POST /api/ext-data/{id}/ingest 对 Token 开放,
  复用管理端同一校验/落盘/视图刷新路径; 结构配置/上传/拉取仍不开放,
  外部只能写行数据, 不能改写表结构
- SSE 短期票据 (V2 收尾): POST /api/events/ticket 换 60s 一次性票据 →
  GET /api/events?ticket=… 订阅事件流; 票据只继承 Token scope 不放大权限;
  进程内事件总线 (services/events.py, 慢消费者丢旧保新), 告警落盘点已挂
  (alert_store.append/append_many → bus), 事件按 scope 过滤双向验证
- 契约守护: test_openapi_contract.py 冻结 tier=a 开放面 (61 端点),
  增删须显式更新快照; 新增 ci.yml (后端全量测试 + 前端构建) 把契约
  变化拦在 PR 上
- examples/open-api: 四个零依赖可运行示例 (行情/写入/回测/事件流) + README
- 菜单设置架构标注: 每页核心/扩展徽标 + 悬停原因 + 图例 (按 open-platform-plan
  §2 依赖方向分类, 核心 8 页/扩展 11 页); 顺带补上 MenuSettings 缺失的 模拟盘
- 测试: 网关 write矩阵/票据语义 + 票据生命周期/总线/SSE帧/告警联动 + 契约快照,
  全量 2408 passed / 102s; 线上实测: ingest 200 / 票据一次性 / SSE hello+
  alert 推送 / scope 过滤双向 / 契约 61 路径
2026-09-26 11:31:11 +08:00
shy3130 4c7f7be484 fix(watchdog): stop() 取消死锁 — CancelledError 不得计入探测失败
_loop 的 except BaseException 把 task.cancel() 送来的 CancelledError 当
"探测失败"吞掉并继续循环: 当 cancel 恰好落在 wait_for(to_thread) 内时
(而非轮间的 sleep), 任务永不结束, stop() 的 await self._task 永久挂起 —
生产关闭 (lifespan) 与测试收尾均会死锁, 全量测试偶发卡死 45min+ 的根因。

修复: CancelledError 单独穿透; 新增确定性回归测试 (任务停在探测内时
stop 必须立刻返回)。纯 asyncio 200 次压测复现脚本由必挂转全过。

顺带说明: 本机旧 venv 装的是 polars 1.40/py 慢版本而 lock 早已钉
pytest 9/polars 1.44, fresh clone 同样命中; 现已同步 venv 到 lock 口径,
全量 2395 passed / 96s。
2026-09-26 11:02:46 +08:00
shy3130 559cee7062 chore: uv.lock 同步项目版本 0.3.1 -> 0.3.2
pyproject bump 后未更新 lock, uv run/uv sync --frozen 会因 lock 过期
触发重新解析 (开发机撞镜像 403, CI --frozen 直接失败)。
2026-09-26 10:01:02 +08:00
shy3130 7f628816b9 feat(open-api): 0.3.2 开放能力版 — API Token 网关 + Tier A 契约 + 版本清单
- Token 域模块: tsp_ 前缀 + SHA-256 哈希存储 (0600), 明文仅创建时返回一次,
  吊销立即生效, last_used_at 节流落盘 (≥60s)
- Bearer 网关中间件 (与密码会话并行): 五档 scope 校验 (read:market/read:ext/
  read:analysis/run:backtest/paper:trade) + 滑动窗口限流 (默认 120/min,
  OPEN_API_RATE_LIMIT_PER_MIN 可调) + X-RateLimit 响应头; 管理接口永不对 Token 开放
- GET /api/openapi.json?tier=a 契约视图: 按网关规则表过滤 OpenAPI 规范 (58 路径),
  规则表即唯一契约源
- 设置 → 开放接口: Token 管理 UI (创建表单/scope 说明/明文一次性展示/吊销)
- 设置 → 系统设置 检查更新: 静态链接升级为真实版本对比 (GitHub API 优先,
  latest.json 清单兜底), 发现新版本给下载入口
- release.yml 新增 manifest job: Release 附 latest.json (版本/三平台下载地址/sha256),
  支持分批发布按实际资产生成
- 版本 0.3.1 → 0.3.2 (后端 __init__/pyproject + 前端 package.json)
- docs: features.md 开放接口章节; open-platform-plan.md V1/V2 标记已实现
- 测试: test_api_gateway.py 8 项 (域模块/scope 映射/E2E 401-403-200 矩阵/
  429+Retry-After/吊销即拒), 全量 2394 通过
2026-09-25 22:38:58 +08:00
shy3130 5f39f7dd8d feat(ext-data): 数据出口强化 + 核心开放设计方案 (0.3.2 起点)
- /rows 查询五件套: filter 等值过滤 / sort / offset 分页 /
  start_date+end_date 范围合并 (自动补行级 date 列, diagonal 容忍分区
  schema 漂移), 快照模式范围查询明确 400
- /values 字段取值枚举端点 (filter 下拉配套, 去重+计数降序)
- 市场级表 (market_level): 行=全市场每日一条, 无标的列; 创建/更新 API、
  ingest 与拉取链路放行、创建向导开关跳过标的关联 —— 市场环境类数据
  发布为扩展数据的底座
- 拉取分页协议 (仅 GET): page_param/page_size_param/page_size/max_pages,
  空页/短页判停; 拉取面板新增分页配置输入
- docs: features.md 分页与 /rows 契约章节; open-platform-plan.md
  核心能力开放与插件化改造设计稿 (Token/scope/限流/Tier A/分期路线)
- tests: 22 个新用例 (查询语义/分页判停/市场级全链路/values),
  ext 全量 261 通过
2026-09-25 21:29:23 +08:00
wshyandGitHub 2acf025652 Merge pull request #423 from kevin9327/fix/paper-settle-price-time
fix(paper): 盘后结算不按下单前已打印的价格成交, 盘中下的次日开盘单改在次一交易日开盘成交
2026-09-25 21:21:58 +08:00
wshyandGitHub 7c7f8bd1f3 Merge pull request #422 from kevin9327/fix/paper-t1-available-at-order
fix(paper): 卖出下单的 T+1 可卖数量按当前交易日现算, 次日不再被「可卖 0」拒单
2026-09-25 21:21:54 +08:00
kevin9327andClaude Fable 5.1 c2c72c87ee fix(paper): 盘后结算不按下单前已打印的价格成交, 盘中下的次日开盘单改在次一交易日开盘成交
次日开盘单的口径是次一交易日 raw_open (docs/paper-trading-plan.md), 但 settle_day(当日)
把当日开盘之后才创建的 next_open 单 (含盘中 ETF 即时单自动转次日开盘、盘中自动跟单、
盘中触及涨跌停后排队的单) 按当日 09:30 的开盘价成交; 收盘后才下的 close / 即时单也按
当日 15:00 的收盘价兜底成交。都是拿下单时已经知道的价格回填, 盘中自动跟单尤其会
系统性按当日开盘价买入。

结算时按订单的 created_at (盘中排队的按新增的 queued_at) 判定: 与结算价格同一交易日
且晚于该价格的打印时刻 (开盘价 09:30 / 收盘价 15:00) 的单当日不成交、不计顺延,
留到下一交易日结算。跨日订单、开盘前下的次日开盘单、盘中下的收盘单行为不变;
时间戳缺失或损坏的旧订单沿用原行为。

两个涨跌停排队既有测试原本让排队当日就按当日开盘价成交, 改为把时钟钉在盘中 10:00,
按其 docstring 从次日开盘起重试 (顺延超限用例补第 4 个交易日)。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 20:08:13 +09:00
kevin9327andClaude Fable 5.1 71f7a6289f fix(paper): 卖出下单的 T+1 可卖数量按当前交易日现算, 次日不再被「可卖 0」拒单
create_order 的卖出预检读 positions.json 里的 available_qty, 而该值是上次
_materialize 时按「当时的今天」算出的 T+1 口径 (成交当日即 0); 跨日后只有再次
成交 / 除权 / 手动 rebuild 才会重建, 所以次日 (乃至此后每一天) 下卖单都被
「可卖数量不足 (T+1): 可卖 0」拒绝, 而持仓表 (overview 现算) 显示可卖 100。

改为与 _fill_order / overview 同口径, 用 _available_of(pos, cn_today()) 现算;
待成交卖出占用额度的校验同样以现算值为准。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 19:59:52 +09:00
shy3130 252160e46f feat(paper): 账户横向对比/费用可调/默认值记忆/下单与策略ID联想 + 界面美化
- 横向对比: 新增 GET /api/paper/compare (逐账户概览+回合统计+定版净值);
  前端「账户对比」弹窗 — 归一化净值叠加图 (起点=1) + 12 项指标对比表,
  收益领先账户标「领先」徽标, 冻结账户标「冻结」
- 费用可调: update_settings 扩展佣金/印花税/滑点三参数 (范围校验,
  仅影响之后的新成交); 头部费用文本改为可点击按钮, 弹窗内与涨跌停排队一起改
- 默认值记忆: 创建账户表单新增费用三输入框, 本次取值存 localStorage
  作为下次新建的预填默认
- 联想搜索: 下单代码接 instrumentSearch (代码/中文名/拼音首字母, stock+etf);
  自动跟单策略/规则 ID 输入框按中文名/ID 过滤, 聚焦出全量列表;
  抽出通用紧凑联想组件 SuggestInput (键盘导航/外点关闭)
- 美化: 统计卡带主题色图标 (盈亏图标随涨跌变色), 悬停强调边框
- tests: settings 费用更新 (含超范围 400) 与 compare 契约 2 个新用例 (51 passed)
2026-09-25 16:21:24 +08:00
shy3130 fa5e5a4ba6 fix(paper): 新建虚拟账户改为草稿态, 支持取消退出
旧实现点「+」直接把生成的 id 写进 accId, 刷新后卡在无主初始化向导上无法
退出。改为 draftId 草稿态: 点「+」只进入草稿不动 accId/localStorage,
取消即丢弃; 已有其他账户时顶部保留账户切换, 一个账户都没有才强制向导。
本文件内 text-base 撞名替换随本次一并生效 (同上一提交)。
2026-09-25 14:45:58 +08:00
shy3130 e8f7026adb fix(ui): 修复 text-base 与色板 token base 撞名
色板里定义了颜色 token base, Tailwind 的 text-base 因此生成 color 规则
(文字被涂成 --base 背景色) 而非 16px 字号 —— 标题字号丢失, accent 底按钮
文字与底色同色不可见。全量替换: 字号意图改写 text-[16px] leading-6,
accent 底按钮文字改写 text-white; tailwind.config.ts 注释禁用 text-base。
2026-09-25 14:45:58 +08:00
shy3130 1908173bee fix(analysis): 补上 market-snapshot 的 SSE 失效条目 (#419)
290a0f5e 只落了说明注释与设置页开关, SSE_INVALIDATE_PREFIXES 内实际没有
'market-snapshot' 条目, quotes_updated 依旧不会失效该查询, 盘中停留分析页
仍不自动刷新。补上缺失条目使修复真正生效。
2026-09-25 14:34:50 +08:00
shy3130 290a0f5e22 fix(analysis): 概念/行业分析 market-snapshot 接入 SSE 行情刷新 (#419)
market-snapshot 查询不在 SSE_INVALIDATE_PREFIXES 内, 盘中停留页面时
板块聚合数值(平均涨跌幅/涨跌家数/强度/龙头/成分股行情)不随行情更新,
只有手动刷新才重取。后端快照本身读最新日内缓存是活的, 缺口纯在前端
触发链路。

- SSE_INVALIDATE_PREFIXES 加入 'market-snapshot': quotes_updated 时
  失效该查询, 两分析页(及成分成员对话框)打开时自动重取; 仅页面打开
  才实际发请求, 推送节奏 6~60s 与看板 overview-market 同档
- 设置页「页面实时刷新」新增「概念/行业分析」开关 (未配置默认开启,
  沿用 sse_refresh_pages 偏好体系)
2026-09-25 14:27:43 +08:00
shy3130 d0c474a27b Merge branch 'feat/paper-trading': 模拟盘 V1/V2/V3 (虚拟账户/自动跟单/成交推送/导出/对比/AI注入) 2026-09-24 22:00:25 +08:00
shy3130 f249856bf7 feat(paper): V3 补全 — 结算成交留痕/自动跟单下单事件推送/AI 持仓注入多账户
- paper.day_fill_events: 交易日成交台账 → AlertEvent 同构事件;
  daily_pipeline paper_settle 阶段补 alert_store 留痕 (next_open/close
  单的成交发生在盘后管道, 盘中钩子覆盖不到; 管道无 SSE 广播器, 留痕即可见)
- paper_auto.auto_order_events: 自动跟单创建的订单 → 推送事件
  (rule_id 从 order.source 还原), quote_service 钩子随成交事件一并走
  SSE toast / 语音 / 系统通知 / 留痕 / Webhook 既有通道
- stock_analyzer: 虚拟持仓注入改为逐账户收集 (V2 多账户), 空仓账户跳过,
  每账户一行标注账户名; raw 口径浮盈不变
- tests: 新增 day_fill_events / auto_order_events / 多账户注入用例,
  既有注入用例适配列表签名 (66 passed)
2026-09-24 20:01:14 +08:00
shy3130 508a920ce5 Merge PR #418 from KenNeo730/fix/enriched-publication-commit-idempotent
fix(enriched): commit() 幂等, 多日期分区写入不再误报 ownership was lost

与 33c114d7 (#417) 同根因的等价修复: 头部「重复提交幂等返回」分支与
尾部「发布后复位 _changed」叠加 — 空提交走顶部守卫, 头部分支转为
_publishing 复位后的防御性兜底。零冲突, 双方回归测试 (18 项) 全绿。
2026-09-24 18:57:54 +08:00
shy3130 4db9c7b6fc fix(enriched): commit() 发布后复位脏标记, 多分区空提交不再误抛 ownership (#417)
EnrichedPublication.commit() 发布完成后 _publishing 置 False、标记写回
ready payload (不含 publication_id), 但 _changed 未复位。多日期分区写入
复用同一发布对象 (repository._write_daily_partition), 有变化分区提交后
再遇到无变化分区时, _write_partition_locked 的"无害空提交"带着过期脏
标记命中 ownership 校验, 必然抛 "ownership was lost", 整批写入中断。

e3baba6 让 ETF 增量日K用完整本地历史重算前复权 (单次 245+ 日期分区),
必然出现无变化分区, 该旧缺陷自此恒定复现 (盘后管道 index/etf 阶段失败)。

修复: commit() 发布完成后复位 _changed — 待发布内容已全部落盘, 之后任何
写入都会经 _claim_or_verify 重新认领并再次置位, 语义不变; 空提交经由
既有的是否脏守卫自然幂等。

回归测试: 单对象重复 commit 幂等 + 仓储级「有变化分区在前、无变化分区
在后」两用例, 修复前均失败、修复后通过。
2026-09-24 18:13:26 +08:00
shy3130 51d8083e89 feat(paper): V3 策略候选对比卡 + AI 个股分析注入虚拟持仓
- 模拟盘右列新增「策略对比」卡: 统计 vs 策略候选 (回测报告持久化摘要, 同口径标量),
  各按己方单位渲染 (候选小数 fmtPct / 模拟盘百分数), 不做数值换算
- api 客户端新增 backtestCandidates + BacktestCandidate 类型 + QK 键
- stock_analyzer: 模拟盘默认账户持有该标的时, 用户提示词注入虚拟持仓上下文
  (数量/成本/浮盈, 浮盈优先 raw_close 口径避免除权失真; 注入失败静默跳过)
- 测试: 注入/空仓/raw 口径 3 项 + 既有 46 项全过; 前端 build 通过
2026-09-24 18:13:11 +08:00
shy3130 33c114d736 fix(enriched): commit() 发布后复位脏标记, 多分区空提交不再误抛 ownership (#417)
EnrichedPublication.commit() 发布完成后 _publishing 置 False、标记写回
ready payload (不含 publication_id), 但 _changed 未复位。多日期分区写入
复用同一发布对象 (repository._write_daily_partition), 有变化分区提交后
再遇到无变化分区时, _write_partition_locked 的"无害空提交"带着过期脏
标记命中 ownership 校验, 必然抛 "ownership was lost", 整批写入中断。

e3baba6 让 ETF 增量日K用完整本地历史重算前复权 (单次 245+ 日期分区),
必然出现无变化分区, 该旧缺陷自此恒定复现 (盘后管道 index/etf 阶段失败)。

修复: commit() 发布完成后复位 _changed — 待发布内容已全部落盘, 之后任何
写入都会经 _claim_or_verify 重新认领并再次置位, 语义不变; 空提交经由
既有的是否脏守卫自然幂等。

回归测试: 单对象重复 commit 幂等 + 仓储级「有变化分区在前、无变化分区
在后」两用例, 修复前均失败、修复后通过。
2026-09-24 17:57:01 +08:00
shy3130 28bd46df2a feat(paper): V3 成交推送(事件走监控SSE/语音/系统通知/留痕/Webhook) + 成交台账导出 CSV
- evaluate_intraday 返回成交事件列表(字段对齐 AlertEvent, source=paper), 域模块只产出不投递
- quote_service 钩子收集事件: SSE toast + alert_store 留痕 + 系统通知(复用既有开关) + 已配置 Webhook 渠道异步投递
- 前端: AlertToast 模拟盘徽章、语音播报 paper 文案分支、模拟盘页成交台账一键导出 CSV(BOM)
- 测试: evaluate_intraday 契约更新(int→list) + 新增事件字段断言, 41 项全过
2026-09-24 17:35:56 +08:00
Ken a9e573f1ed fix(enriched): commit() 幂等, 多日期分区写入不再误报 ownership was lost
EnrichedPublication.commit() 提交后 _changed 未复位, 且标记被写成 ready
payload (不含 publication_id)、_publishing=False。_write_daily_partition
对整张表只创建一个发布对象并在 partition_by("date") 循环里复用, 于是
"有变化的分区" 之后若跟着一个 "内容无变化的分区", 后者在
_write_partition_locked 里直接 commit() 必然命中 publication_id 不匹配,
抛 enriched publication ownership was lost 并打断整批写入。

e3baba6 起 ETF enriched 按完整本地历史重算前复权, 一次写 245+ 个 date=
分区, 必然出现无变化分区 —— 盘后管道 index/etf 阶段因此恒定失败, 且失败
位置固定 (第一批日K响应后 ~0.3s), 与并发无关: recover=True、清理标记、
停掉实时轮询都无法绕过。

修复: commit() 在未处于 publishing 状态 (即本对象已提交过) 时幂等返回。
新增回归测试覆盖单对象重复 commit 与多分区写入中的无变化分区两种情况,
修复前均失败。
2026-09-24 17:27:40 +08:00
shy3130 dbb2e6dd14 feat(paper): 模拟盘虚拟账户 — 模拟撮合/自动跟单/多账户/涨跌停排队/统计告警
- 撮合域: append-only 成交台账唯一事实源, T+1/涨跌停/停牌顺延/除权调整,
  佣金印花税滑点与回测引擎同口径
- 下单: 即时/次日开盘/当日收盘, 盘中快照撮合 + 盘后结算幂等;
  涨跌停排队次日重试可选 (账户级开关, 顺延上限 3 日)
- 自动跟单: 监控事件触发按规则下单 (跟策略/跟规则, 固定金额/权益%,
  同标的冷却去重), 下单复用撮合域同一把锁与校验
- 多账户: data/paper/accounts/{id}/ 完全隔离, 旧单账户布局自动迁移,
  API ?account= 贯穿全部端点, 盘中钩子与盘后结算逐账户执行
- 统计: FIFO 回合/胜率/盈亏比/均持天数/最大回撤; 成交落告警记录
- 前端: 模拟盘页 (净值对比沪深300/持仓/订单/成交台账/下单/规则面板/
  账户切换), 买入红卖出绿 A 股配色
- 测试: 域模块 33 项 + API 契约 8 项
2026-09-24 17:19:09 +08:00
shy3130 ecc418bd94 feat: AI 助手推广位、显示细节优化与模拟盘设计方案
- AI 助手: RunningHub 推广位(标题行跑马灯、一周静默、无缝循环、悬停暂停), 抽屉头部与侧边栏模型名完整显示
- 测试: mining manager 终态事件轮询收敛, 消除状态先于事件落盘的读侧竞态
- 文档: 新增虚拟账户(模拟盘)功能设计方案 docs/paper-trading-plan.md
2026-09-24 13:59:14 +08:00
wshyandGitHub 538dddc4a1 Merge pull request #406 from zelongji/fix/rps-rotation-intraday
fix(rps): 盘中涨幅轮动不再因 enriched generation 变化返回空
2026-09-24 12:22:57 +08:00
wshyandGitHub 58b8282eee Merge pull request #405 from zelongji/fix/fuyao-income-null-schema
fix(fuyao): 财务报表构建改为全量推断 schema, 修复利润表同步必现失败
2026-09-24 12:22:40 +08:00
wshyandGitHub f709158b2e Update README.md 2026-09-24 12:04:21 +08:00
shy3130 4743030425 chore: bump version to 0.3.1 v0.3.1 2026-09-24 11:53:37 +08:00
shy3130 c37f450e28 feat: 更新 README, 新增快速预设, 调整 AI 默认上下文/输出限制
README:
- 更新顶部说明区块, 新增静态展示资源

快速预设 (设置页):
- 新增预设项, 调整官网链接与介绍文案, 高亮样式适配明暗主题
- 模型输入框支持下拉选择: 经后端代理拉取模型列表, 支持关键词过滤

AI 默认配置:
- 输出上限 8192 → 16384, 上下文窗口 64000 → 128000, 对齐当前主流模型能力
- 后端新增模型列表代理接口, 前端 api 同步封装
2026-09-24 11:39:54 +08:00
zelongjiandClaude Opus 5.5 f2054720be fix(rps): 盘中涨幅轮动不再因 enriched generation 变化返回空
交易时段实时 enriched 每个 tick 落盘都会换 generation, 而历史缓存几分钟才
重建一次, get_enriched_range 的按代校验因此几乎总返回 None, 概念/行业轮动
盘中一直"暂无数据"。轮动只读涨跌幅, 校验失败时退回内存历史缓存, 并用
get_enriched_latest 的当日实时缓存覆盖今天的行; 最新日期同时参考实时缓存。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WydecjgAwEPFurSvKVZCJu
2026-09-24 11:06:22 +08:00
zelongjiandClaude Opus 5.5 0c00b116d1 fix(fuyao): 财务报表构建改为全量推断 schema, 修复利润表同步必现失败
interest_expenses→financial_expense 仅银行等少数标的有值, 全市场按代码
顺序同步时前 100 行全为 None, Polars 默认按前 100 行推断出 Null 列, 遇到
中信银行(601998.SH)的 6.1199e10 即 append 失败, income 整表从未写入。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WydecjgAwEPFurSvKVZCJu
2026-09-24 11:03:32 +08:00
wshyandGitHub 9c1abd7fe5 Merge pull request #404 from kevin9327/fix/etf-adj-history-recompute
fix(etf): 增量日K用完整本地历史重算前复权, 除权后不再留下跳空
2026-09-24 08:54:48 +08:00
kevin9327 e3baba6bfe fix(etf): 增量日K用完整本地历史重算前复权, 除权后不再留下跳空 2026-09-24 07:39:30 +09:00
wshyandGitHub bdc1478e14 Merge pull request #402 from kevin9327/fix/stock-analysis-etf-no-financials
fix(stock-analysis): ETF 无财务走常态文案, 不再写成 Free 未同步
2026-09-23 21:45:36 +08:00
wshyandGitHub 1602ebde94 Merge pull request #400 from kevin9327/fix/monitor-etf-asset-type-reconcile
fix(monitor): 误存为 stock 的 ETF 规则改走 ETF 监控轮
2026-09-23 21:45:31 +08:00
wshyandGitHub 554eec7928 Merge pull request #398 from kevin9327/fix/backtest-polars-minute-fill-lookahead
fix(backtest): polars 面板路径分钟成交参考线剔除当根收盘, 消除前视
2026-09-23 21:45:25 +08:00
wshyandGitHub b2423c6024 Merge pull request #397 from kevin9327/fix/assistant-backtest-beijing-end
fix(assistant): run_backtest 缺省结束日改用北京日期
2026-09-23 21:45:20 +08:00
wshyandGitHub ff79b10fc6 Merge pull request #394 from kevin9327/fix/strategy-market-data-beijing-end
fix(strategy): 选股读指数/ETF日K默认截止日改用北京日期
2026-09-23 21:45:14 +08:00
kevin9327 5357bb5df7 fix(stock-analysis): ETF 无财务走常态文案, 不再写成 Free 未同步 2026-09-23 20:02:52 +09:00
kevin9327 56eab07723 fix(monitor): 误存为 stock 的 ETF 规则改走 ETF 监控轮 2026-09-23 20:01:22 +09:00
kevin9327 7079cb8773 fix(backtest): polars 面板路径分钟成交参考线剔除当根收盘, 消除前视 2026-09-23 19:56:09 +09:00
kevin9327 22636c641d fix(assistant): run_backtest 缺省结束日改用北京日期 2026-09-23 19:53:46 +09:00
kevin9327 c9e9ec8c6e fix(strategy): 选股读指数/ETF日K默认截止日改用北京日期 2026-09-23 19:31:57 +09:00
wshyandGitHub b17f9ae899 Merge pull request #391 from kevin9327/fix/stock-analysis-beijing-today
fix(stock-analysis): 个股分析与关键价位日K窗口改用北京日期
2026-09-23 08:05:45 +08:00
kevin9327 bd85d56cae fix(stock-analysis): 个股分析与关键价位日K窗口改用北京日期
助手工具 get_stock_daily / get_stock_analysis 已用 cn_today(),
个股分析页的 _load_kline 与 GET /levels 仍走 date.today()。
美西主机整个 A 股交易时段、UTC 主机北京 00:00-08:00, 本地日历日
比北京早一天, 管道已写入的当日官方 K 被排除, 分析与价位停在昨天。

Closes #390
2026-09-23 07:44:29 +09:00
shy3130 43dfef3e62 fix(backtest): 分钟穿越成交参考线剔除当根收盘, 消除前视 (#388)
买卖穿越成交共用 rolling_mean(close,5) 作参考线, 该线含当日收盘 —
盘中模拟成交价依赖 15:00 才确定的收盘价, minute_fill 声称的分钟级
精确成交被系统性污染; 卖出信号回放侧 (build_minute_exit_reference)
早已用代数法剔除当根, 双侧纪律不一致。

新增 build_minute_entry_reference: (window·MA - close)/(window-1)
代数剔除当根 = 前 window-1 根均值, 当日开盘即已知; 与卖出侧同住
minute_trigger 模块, 「当日已知参考线」单一实现。strategy.py 三处
调用点统一替换, 无重复公式。回归测试钉住性质: 同一盘中路径只改
当日收盘, 成交价必须不变。
2026-09-22 00:40:49 +08:00
shy3130 efc4e24f17 fix(backtest): 分钟 VWAP 缺 x100 量纲错误, 无参考线成交价放大 100 倍 (#387)
volume 单位手、amount 单位元, VWAP = amount/(volume*100) — 与 scoring/
intraday_features/matrix 的既有实现同口径。原实现漏乘 100, 无参考线
(参考线 NaN) 的分钟成交价系统性放大 100 倍。夹具同步改为契约口径
(amount = 价 x 手 x 100), 并加量级护栏 — 均价必须落在当日价格区间
量级, 拦住把错误公式断言成规格的回归。
2026-09-22 00:40:42 +08:00
shy3130 b6a7367262 feat(screener): 新建策略「默认基础参数」配置与一键应用全部策略
- 策略页头部新增配置入口: 编辑默认基础过滤(价格/流通市值/成交额/换手/板块/ST), localStorage 持久化, 内置默认与原模板一致
- 新建策略两条路径生效: 自定义/matrix 模板注入 + AI 生成 step1 提示词注入(未配置时提示词逐字节不变)
- 对话框内一键应用: 二次确认后分批 PATCH 到全部股票策略, 只动 basic_filter 不碰各策略参数/评分, 应用即所见并同步存为默认配置
2026-09-21 13:46:32 +08:00
shy3130 2488fdc9ed feat(screener): 分钟策略进入页面自动异步计算命中数, 无需点击
- 新增 runAllMinute: 按池批量跑分钟策略(与日线 runAll 串行, 防并发崩 Numba), 结果合入卡片
- 日线摘要整表替换时保留分钟命中数, 不再被摘要刷新冲掉退回「待计算」
- screenerRunAll 支持 timeframe 参数; 自动计算关闭时保留「待计算」点击引导
- 卡片 computing 覆盖分钟批量计算中状态(脉冲占位, 算完点亮)
2026-09-21 13:46:11 +08:00