auto-snapshot 2026-09-01 03:00:24

This commit is contained in:
小唯 A06 2026-09-01 03:00:24 +08:00
parent f9cc4053dc
commit beac016689
5 changed files with 248 additions and 62 deletions

View File

@ -753,14 +753,14 @@
"created_by": null,
"last_patched_at": null,
"last_reused_patch_generation": 0,
"last_used_at": "2026-08-30T14:13:35.068127+00:00",
"last_viewed_at": "2026-08-30T14:13:35.060063+00:00",
"last_used_at": "2026-08-31T08:58:49.573938+00:00",
"last_viewed_at": "2026-08-31T08:58:49.565195+00:00",
"patch_count": 0,
"patch_generation": 0,
"pinned": false,
"state": "active",
"use_count": 2,
"view_count": 2
"use_count": 3,
"view_count": 3
},
"deepseek-harness-research": {
"archived_at": null,
@ -1297,15 +1297,15 @@
"created_at": "2026-08-01T11:50:01.274771+00:00",
"created_by": "agent",
"last_patched_at": "2026-08-22T12:29:24.397825+00:00",
"last_reused_patch_generation": 10,
"last_used_at": "2026-08-22T12:28:43.666781+00:00",
"last_viewed_at": "2026-08-22T12:28:43.662714+00:00",
"last_reused_patch_generation": 12,
"last_used_at": "2026-08-31T08:45:21.088225+00:00",
"last_viewed_at": "2026-08-31T08:45:21.082760+00:00",
"patch_count": 26,
"patch_generation": 12,
"pinned": false,
"state": "active",
"use_count": 27,
"view_count": 27
"use_count": 28,
"view_count": 28
},
"github-repo-management": {
"archived_at": null,
@ -2976,14 +2976,14 @@
"created_by": "agent",
"last_patched_at": "2026-08-28T13:43:50.148789+00:00",
"last_reused_patch_generation": 16,
"last_used_at": "2026-08-28T15:56:50.191925+00:00",
"last_viewed_at": "2026-08-28T15:56:50.182978+00:00",
"last_used_at": "2026-08-31T08:58:49.569466+00:00",
"last_viewed_at": "2026-08-31T08:58:49.560103+00:00",
"patch_count": 150,
"patch_generation": 16,
"pinned": false,
"state": "active",
"use_count": 73,
"view_count": 71
"use_count": 75,
"view_count": 73
},
"subagent-driven-development": {
"archived_at": null,

View File

@ -0,0 +1,125 @@
# 2026-08-30 调研案例chuspeeism/dashiAI-ppt-skill
牧尘丢一个项目地址过来(`https://github.com/chuspeeism/dashiAI-ppt-skill`),先验证后实测安装到本机跑通。
## 元数据
| 项 | 值 |
|---|---|
| 作者 | chuspeeism |
| License | 本仓未在 README 标注AGENTS 写"开源",实际未确认 SPDX |
| 创建 | 2026 上半年(年轻项目) |
| 形态 | Hermes Skill12 套主题 + 1020 版式 + 8576 控件的 dashi-ppt skill |
| 核心能力 | `goal:scaffold``props:safe``render:goal``export:pptx/pdf` 全链路 |
| 本地 | Node 24.16 ✅ + Chromium headless shell ✅ + Playwright-core 装好 |
| 部署路径 | `~/.hermes/skills/dashi-ppt/` (59M 含 node_modules) |
## 关键设计
- **goal.json schema v2**:每页 4 个 variants3 template + 1 bespoke4 个变体让用户在同页切换试看
- **4 层校验链**`validate:goal-spec` → `props:safe``validate:swiss``validate:goal-copy``validate:four-variant-quality`
- **contentMap 强制**:所有 `items.body / props.copy.X` 必须经 `contentMap` 映射到 `slide.content.presentation.items[]`**不写裸字符串**——这是核心架构纪律
- **导出引擎自启预览**`export-pptx.mjs` 自启临时 HTTP server避免跨域 Origin 校验失败),跑完销毁
## 实测踩坑(重要沉淀)
### 坑 1: `npm run goal:scaffold` 报"repeated visible copy"
```
slide 1 variant v2 layout theme05_page004 field props:
repeated visible copy "AICoding工具市场2026" appears 4 times
(props.copy.titleTop, props.copy.cornerRight, props.copy.titleBottom, props.copy.foot)
```
**原因**scaffold 选 cover layoutpage004会把 `presentation.title` 投影到 4 个字段,归一化去空格后 19 字符完全相同 → 触发 4 字段重复。
**正解**
- 把 `presentation.title` 缩短到 ≤6 字符(如"AI 编程"scaffold 会用同标题但字段不重复page001/002/005 字段少)
- 或用更短 `titleShort`(让 `title` 字段走 page002 这类字段少的 cover
### 坑 2: `validate:goal-spec``composition.elements[X].items[Y].body: expected a non-empty string`
**原因**scaffold 生成的 v4 `bespoke.composition.elements` 数组里有 `items[]` 字段items.body 默认空字符串触发校验。
**正解**(三条任选):
1. briefs 每页 `content.presentation.items[]` 填满 + 加 `detail` 字段v4 会自动从 `presentation.items[i].detail` 抽 body 填)
2. 删掉 v4 不用:但 validate 要求 variants 必须 4 个,会报"must contain 4 items"
3. 写 items.body 后**手动改 goal.json**(绕开 scaffold把 brief 写到 `slide.content.presentation.items[].detail`,再 `props:safe --goal X --write`
### 坑 3: `props.copy` 字段被覆盖
执行 `props:safe --write` 会重写 `goal.json`**清空之前手动填的 `composition.elements[].items.body`**。必须:
- 一次性先把 briefs 准备好items 有 label/value/detail/displayValue再 scaffold
- 不要 scaffold 完再 patch goal.json 的 items.bodypatch 完再跑 props:safe 会被清空
### 坑 4: `export:pptx` 沙箱问题
dashi-ppt 用 playwright-core 启动 Chromium 导出。沙箱宿主(豆包/某些容器)会因 `bootstrap_check_in / MachPortRendezvous` 拦截。**`launch-export-browser.mjs` 已内置沙箱检测 + `--single-process` 重试**——遇到拦截自动 fallback 一次。
### 坑 5: 预览服务路径
`start-preview-server.mjs` 第一个参数是**目录路径**(不是 index.html所以正确调用
```bash
DASHI_PPT_PREVIEW_PORT=5200 node scripts/start-preview-server.mjs /path/to/ppt/
# 不要 node .../start-preview-server.mjs /path/to/ppt/index.html ❌
```
## 完整工作流(已验证 8/30
```bash
# 1. 装
cd ~/.hermes/skills/dashi-ppt/project
npm install # 首次 4s已配 npmmirror
# 2. 准备 briefs10 页)
cat > /tmp/briefs.json <<EOF
[{"role":"cover","content":{"presentation":{"title":"AI 编程","titleShort":"AI编程","summary":"2026 市场格局","items":[]}}}, ...]
EOF
# 3. scaffold (生成 goal.json)
npm run goal:scaffold -- --title "X" --theme theme05 --pages 10 \
--content-briefs /tmp/briefs.json --layout-variants 3 \
--seed "test-01" --workflow-run-id "20260830T183000-test01" \
--chunk-size 5 --out /tmp/deck/goal.json
# 4. props:safe (填充 props + contentMap)
npm run props:safe -- --goal /tmp/deck/goal.json --write
# 5. render:goal (生成 HTML)
npm run render:goal -- /tmp/deck/goal.json /tmp/deck/ppt/index.html
# 6. 三层校验
npm run validate:swiss -- /tmp/deck/ppt/index.html
npm run validate:goal-copy -- /tmp/deck/goal.json /tmp/deck/ppt/index.html
npm run validate:four-variant-quality -- --deck /tmp/deck/ppt/index.html --goal /tmp/deck/goal.json
# 7. 导出
npm run export:pptx -- /tmp/deck/ppt /tmp/deck/deck.pptx --title "My Deck"
npm run export:pdf -- /tmp/deck/ppt /tmp/deck/deck.pdf --title "My Deck"
```
**实测输出**10 页 + 4 variants = 40 slide PPTX (1.4MB)859 个可编辑文本对象。
## 与现有工具的对比
| 工具 | 优势 | 劣势 |
|------|------|------|
| **dashi-ppt** | 12 主题/1020 版式/8576 控件,预览可切换 variants | 沙箱兼容问题,需本机 Chromiumscaffold 偶发陷阱 |
| guizang-ppt-skill | 杂志风/瑞士风固定模板,快 | 模板少,需自己设计内容 |
| frontend-slides | 视觉探索强,动画丰富 | 慢、复杂,纯设计向 |
| ppt-master | 标准 PPTX 操作 | 没视觉系统 |
**取舍**dashi-ppt 做"科技/数据/分析"报告最佳theme05 色谱图、theme07 冷白调研guizang 做"杂志/品牌/视觉"ppt-master 做"传统办公文档"。
## 落地建议
1. **dashi-ppt 作为默认 PPT 工具**——主题多、变体切换强、导出干净
2. **briefs 模板固化**:把"10 页科技分析报告"模板写到 `references/dashi-brief-template.json`,下次复用
3. **铁律级踩坑清单**:上述 5 个坑做成 `dashi-ppt` skill 的 `Pitfalls` 节(但 dashi-ppt 是 user-owned**不能直接改**,下次启动时报"踩坑 1/2/3 已知"提示)
4. **集成到 cron 推送**:每天 18:00 推"今日金股 + 10 页 PPT 简报"到飞书(参考 stock-research cron 18:50 简报模式)
## 未解决问题
- **License 未确认**README 没写 SPDX建议查 `LICENSE` 文件确认是否可商用
- **国际化**schema v2 copyBudget 按中文字符算?日韩字符可能误判
- **主题国际化**theme05 是中文风格,海外场景需英文主题

View File

@ -0,0 +1,45 @@
# 2026-08-31 模拟盘深度研究 - 关键发现
## 一、因子状态健康
- 8 个动量正行业:煤炭 +44.7% / 有色 +25.9% / 新能源 +17.9% / 石油 +15.9% / 科技 +15.2% / 航运 +8.1% / 家电 +7.0% / 电力 +6.6%
- 5 个真弱势(拦截中):白酒 -25% / 医药 -22.8% / 通信 -7.2% / 汽车 -31.2% / 地产 -43.8%
- 因子交叉验证:金融 -2.2% vs 白酒 -25%(差 -22.8%)方向与 MA20 回测一致
## 二、4 笔亏损诊断
| 日期 | 行业 | 买→卖 | 亏损 | 周期 |
|------|------|-------|------|------|
| 8-12 | 白酒 | 75.11→75.00 | -0.15% | 1天 |
| 8-13 | 石油 | 10.77→10.66 | -1.02% | 1天 |
| 8-20 | 有色 | 33.36→32.76 | -1.80% | 1天 |
| 8-31 | 半导体 | 126.33→125.88 | -0.36% | 1天 |
**结论**:平均亏损 -0.83% ≤ 1%,都是金叉→死叉 1 天内来回,**震荡市正常磨损**,不是策略失败。
## 三、3 持仓 MA20 死叉预判(新方法论)
| 股票 | 代码 | 现价 | MA20 | 偏离 | 死叉概率 | 操作 |
|------|------|------|------|------|---------|------|
| 紫金矿业 | 601899 | 34.65 | 33.50 | +3.42% | ~30% | 设止损33.50 |
| 中国石油 | 601857 | 11.23 | 10.92 | +2.82% | ~28% | 持有 |
| 中信证券 | 600030 | 27.93 | 27.66 | +0.99% | ~20% | 持有 |
**MA20 偏离风险分级**
- < 1%极低持有
- 1-5%:中等,设 MA20 为止损
- > 5%:偏高,警惕
- < 0%已触发趋势转弱
## 四、9 月布局推荐
| 排名 | 股票 | 代码 | 行业 | 动量 | PE | 52周位置 |
|------|------|------|------|------|-----|---------|
| 🥇 | 兖矿能源 | 600188 | 煤炭 | +60.9% | 20.9 | 50% |
| 🥈 | 中国石油 | 601857 | 石油 | +35.8% | 11.9 | 117% |
| 🥉 | 海康威视 | 002415 | 科技 | +33.2% | 20.0 | 193% |
**暂不入场**:宁德时代(新能源 MA20 偏离 -5.25%,唯一负偏离)
## 五、路线图状态
- Phase 1: 11/14 天完成9/3 解锁
- Phase 2: 11/60 天,总收益 +0.89%
- 最早实盘2026-11-15

View File

@ -0,0 +1,35 @@
# MA20 死叉预判方法论2026-08-31
## 核心指标MA20 偏离百分比
```
MA20 偏离 = (现价 - MA20) / MA20 × 100%
```
## 风险分级
| 偏离范围 | 死叉风险 | 操作建议 |
|---------|---------|---------|
| < 1% | 极低 | 持有不需止损 |
| 1-5% | 中等 | 设 MA20 为止损线 |
| > 5% | 偏高 | 警惕,考虑减仓 |
| < 0% | 已触发 | MA20 死叉已发生趋势转弱 |
## 预判公式
```
死叉概率 ≈ 偏离% / 5经验值仅供参考
```
## 2026-08-31 实测示例
| 股票 | 代码 | 现价 | MA20 | 偏离 | 死叉概率 | 操作 |
|------|------|------|------|------|---------|------|
| 紫金矿业 | 601899 | 34.65 | 33.50 | +3.42% | ~30% | 设止损33.50 |
| 中国石油 | 601857 | 11.23 | 10.92 | +2.82% | ~28% | 持有 |
| 中信证券 | 600030 | 27.93 | 27.66 | +0.99% | ~20% | 持有 |
| 宁德时代 | 300750 | 368.50 | ~389 | -5.25% | 已触发 | 暂不入场 |
## 方法来源
2026-08-31 模拟盘深度研究中发现3个持仓的 MA20 死叉风险差异显著,用偏离百分比量化风险比主观判断更可靠。

View File

@ -1,58 +1,39 @@
# 腾讯行情 API 数据格式变化记录
# 腾讯行情接口字段映射2026-08-31 实测补充)
**日期**: 2026-07-20 / 2026-08-20 更新
**影响脚本**: `stock_contradiction_workflow.py`, `stock_portfolio.py`, `stock_signal.py`
## 字段表(每只股票一行,以 `v_sh601899="..."` 格式返回)
## 字段索引速查
腾讯实时行情接口 `https://qt.gtimg.cn/q={mc}` 返回数据用 `~` 分隔,关键字段:
| 索引 | 字段 | 说明 |
|------|------|------|
| parts[1] | 名称 | 股票中文名(如"五 粮 液"|
| parts[3] | 现价 | 当前价格 |
| parts[4] | 昨收 | 昨日收盘价 |
| parts[31] | 涨跌额 | 涨跌**金额**(元),如 10.81 |
| parts[32] | 涨跌% | 涨跌**百分比**%),如 0.28 |
| parts[33] | MA5 | 5日均线 |
| parts[34] | MA10 | 10日均线 |
| parts[35] | MA20 | 20日均线 可能为复合格式)|
| parts[37] | 成交额 | 成交金额(元)|
### ⚠️ parts[31] vs parts[32] 重大区别2026-08-20
`parts[31]` = 涨跌**额**(元),`parts[32]` = 涨跌**百分比**%)。
实测样例(上证指数 sh000001
```
parts[31] = "10.81" ← 涨跌 10.81 元/点
parts[32] = "0.28" ← 涨跌 0.28%
parts[1] = 名称GBK 编码,显示为乱码时用 GBK 解码)
parts[3] = 现价(元)
parts[4] = 昨收(元)
parts[31] = 涨跌额(元,正=涨)
parts[32] = 涨跌幅(%,正=涨)
parts[33] = 今日最高
parts[34] = 今日最低
parts[36] = 成交量(手)
parts[37] = 成交额(元)
parts[38] = 换手率(%
parts[39] = PE动态市盈率
parts[43] = PB市净率
parts[44] = 总市值(亿元)← 注意单位是亿
parts[45] = 流通市值(亿元)
parts[70] = 52周最低
parts[71] = 52周最高
```
**初版 bug**:误用 `parts[31]` 作为百分比,导致上证显示 "+10.81%"(实际 +0.28%),茅台显示 "-16.05%"(实际 -1.23%)。
## 已知坑
**修复**:涨跌幅一律用 `float(parts[32])`,涨跌额用 `float(parts[31])`
- **GBK 编码**`parts[1]`(名称)和部分内容是 GBK`decode('gbk', errors='replace')` 或 `decode('utf-8', errors='ignore')` 均可
- **parts[44] 单位是亿**:腾讯返回的是"亿元",如 6936.62 = 6936.62 亿元
- **`parts[39]` PE 有时为空字符串**:需要 `float(parts[39]) if parts[39] else 0`
- **`parts[32]` 涨跌幅 vs `parts[31]` 涨跌额**:初版误把 parts[31] 当百分比 → 上证显示 "+10.81%" 实际是 +0.28%。修复:涨跌幅用 `parts[32]`,涨跌额用 `parts[31]`2026-08-20 教训)
### ⚠️ parts[35] MA20 复合格式2026-07-20
## 2026-08-31 实测数据3 只持仓
旧格式:`parts[35]` = `"72.76"`(纯数字)
新格式:`parts[35]` = `"72.76/427399/3130971198"`MA20/成交量/成交额)
| 股票 | 代码 | 现价 | 涨跌幅 | PE | 52周位置 |
|------|------|------|--------|-----|---------|
| 紫金矿业 | 601899 | 33.67 | -2.83% | 13.2 | 241%超52周高 |
| 中国石油 | 601857 | 11.42 | +1.69% | 11.9 | 117%超52周高 |
| 中信证券 | 600030 | 27.80 | -0.47% | 10.95 | 193%超52周高 |
修复:取斜杠前第一段 `parts[35].split('/')[0]`
## GBK 编码注意事项
腾讯接口返回 GBK 编码。解析时:
```python
data = response.decode('gbk', errors='ignore')
```
## 验证脚本
`scripts/hermes-verify-stock-workflow.py` — 包含新格式/旧格式/信号判断三个测试。
## 注意事项
- MA5/MA10 索引33/34未变只有 MA20 可能变复合格式
- 若未来字段位置变化,先打印 `len(parts)` 和关键索引定位新位置
- 所有股票数据脚本统一使用 `curl` 子进程 + `--compressed`,避免 urllib hang
> ⚠️ 52周位置 >100% 说明当前价格已突破历史高点——这是强势信号,但 MA20 死叉风险也要关注。