shy3130
|
1d855de03b
|
feat(assistant): 数据完整性与补全 — check_data_coverage 只读检查 + sync_data 确认闸门 + get_sync_status 进度
- check_data_coverage: 分区目录轻量扫描(与 /api/data/status 同口径, 不读
parquet)输出日线/enriched/分钟K覆盖区间、财务表覆盖、进行中任务与 issues
问题清单(数据停更/指标落后/财务缺失); 可选 symbol 参数查单标的日线+财务
- sync_data(动作, 须确认): 复用数据页同一条触发路径 — pipeline 盘后管道 /
financials 财务表调度器 / minute_extend 分钟K向前扩展(days 钳制 30-1095);
后台执行立即返回, 单飞去重, async 工具经事件循环调度后台任务
- 核心层最小抽取: api/pipeline.trigger_pipeline_job 与
api/kline.trigger_minute_sync, HTTP 端点与助手共用(端点行为不变)
- get_sync_status: 活跃任务阶段/进度 + 最近 5 任务 + 财务同步状态
- 提示词/快捷指令(数据是最新的吗)/前端足迹标签同步补齐
- 测试: +7 项(覆盖检查缺口与新鲜数据/单标的滞后/共用触发路径与钳制/
财务同步与参数校验/闸门拒绝不触发/摘要), 助手套件 21+34 项通过;
全套 2428 passed(1 项 backtest spawn 时序 flake 单独重跑通过);
线上 mock 验收: 真实数据发现缺口 → 建议补全 → 确认卡 → 拒绝不触发
|
2026-09-26 15:09:10 +08:00 |
|
shy3130
|
502b960ab3
|
feat(assistant): 动作能力 — 生成信号/回测/加自选经用户确认闸门执行
- 新增动作工具: create_signal_strategy(白名单声明式条件落盘信号库+失效缓存链),
add_to_watchlist(复用 watchlist 服务, 重复标的不重复添加), 既有 run_backtest
纳入闸门(spawn 子进程重计算)
- 确认闸门 actions.py: 进程内 PendingRegistry(call_id→asyncio.Event),
action_confirm NDJSON 事件 + POST /actions/{call_id}/decision 决策端点,
120s 未决策视为拒绝; 拒绝/超时按 ok=False 回填模型, 不重试不打断流
- 前端: 确认卡(风险说明+完整待执行参数+确认/取消按钮), 足迹卡 awaiting 态
强制展开, 决策后由 tool_result 终态覆盖; client/store 事件与 decideAction
- 系统提示词: 只读边界改为动作工具确认语义与策略生成引导; 快捷指令新增
帮我生成一个信号
- 测试: 14 项(registry 批准/拒绝/超时/未知id、闸门事件序、写工具往返、
决策端点 404、摘要); 全套 2422 passed; 线上经 mock 供应商完成
批准/拒绝/写入三链路与浏览器 UI 点击验收
|
2026-09-26 14:54:19 +08:00 |
|
shy3130
|
0c096632c1
|
docs(readme): 开放能力配真实界面截图 — Token 管理(明文一次性弹窗) + 菜单核心/扩展标注
0.3.2 的两个门面此前只有文字没有画面; 现开放能力章节顶部嵌入双图,
截图库同步补录。演示 Token 截图后已吊销。
|
2026-09-26 14:14:13 +08:00 |
|
shy3130
|
369f04d401
|
docs(readme): 大改版 — 网关居中的新架构叙事 + 性能前置 + 数字面板
- 头部数字面板: 61 端点 / 6 权限档 / 12 MCP 工具 / 2400+ 测试 / ms 级扫描 / 1 容器 六格大数字
- ⚡ 性能 升为一级章节并前置 (核心功能之后): 拆 '核心引擎' 与 '开放层(0.3.2 新架构)' 两表,
每行 表现+靠什么, 全部真实口径
- 架构图彻底重画: 旧 '数据→路由→存储→计算→呈现' 纵向流水线 → 新 '消费端双通道 → 开放网关
(认证/scope/限流/契约) → FastAPI → 核心域三簇(数据底座/计算研究/生产管道, 内嵌增量链路)
→ 扩展域五通道虚线契约消费', 事件总线经 SSE 票据回推网关的完整闭环
- 新增 '核心域/扩展域边界' 表: 8 域 vs 5 通道 + 划线依据 + 页面可替换示例
- 章节重排: 性能/架构前置, 界面预览与 AI 助手后移; 开放能力章节收窄为能力表+十行上手
- 27 个相对链接与 mermaid 结构 (subgraph/end 配对/引号/节点 id) 校验通过
|
2026-09-26 13:54:44 +08:00 |
|
shy3130
|
b8f56c7457
|
docs(readme): 重新设计 — 开放能力入列, 新增性能板块, 架构图补开放层
- 头部: 新增 CI / Open API / MCP 徽章, 一句话定位与标签行加入开放能力, 导航补 开放能力+性能 锚点
- 为什么做 TSP: 新增一行 '想做自己的工具只能爬页面 → 开放接口+MCP'
- 核心功能 15 卡 → 18 卡 (补 开放接口 / MCP 服务器 / AI 对话助手)
- 新增 🌐 开放能力 章节: ASCII 架构示意 + Token/六档 scope/61 端点/写闭环/SSE/MCP 能力表
- 架构图: 新增开放层 (MCP 服务器/外部程序 → 开放网关), 应用层补事件总线; 新增核心域/扩展域边界说明
- 关键机制表补 开放网关/事件总线 两行
- 新增 ⚡ 性能 表: 9 个场景的真实表现与支撑机制 (扫描毫秒级/15列存68列现算/增量分区/61端点120rpm O(1)限流/亚秒事件推送/2400+测试CI/新老CPU双内核)
- 路线图: AI助手 转 ✅, 新增 v0.3.2 开放能力版行; 文档表补 open-platform-plan/mcp-server/examples
- 快速开始首跑清单补第 7 步: 开放接口建 Token / MCP 接入
- 全部 28 个相对链接验证存在
|
2026-09-26 13:48:26 +08:00 |
|
shy3130
|
826eed8cf4
|
feat(mcp): MCP 服务器 — 开放接口的 AI 工具桥 (Model Context Protocol)
mcp-server/ 独立薄桥包 (MCP SDK 2.x, stdio 传输):
- 12 个精选工具: 标的搜索/日K/指数/市场总览/环境阶段/策略清单与定义/
告警/扩展表查读写/策略回测 — 按 TSP_SCOPES 声明暴露, 权限裁决仍在
面板网关 (桥零业务逻辑, 面板升级自动受益)
- 模拟盘交易类端点刻意不包装 (不建议把下单交给 AI)
- smoke_test.py 完整协议冒烟: 握手/tools列表/真实调用; 实测只读 Token
暴露 10 工具、全量 Token 暴露 12 工具, 三次调用 (搜索/总览/环境) 全通
- README: Claude Desktop 等客户端配置示例; features.md 增 MCP 接入小节
|
2026-09-26 12:47:08 +08:00 |
|
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 |
|