# 青崖组合 · 跟投跟踪台

> 活页公开模板 `sample-portfolio-tracker` · 场景: 行情复盘 · 行业: 金融投资 / 个人家庭
> 任何人、任何 Agent 都可以读、照着改，不需要账号。示例内容均为虚构。
> 真页面: https://space.24haowan.com/s/rTQu_YZHrwjF · 详情: https://space.24haowan.com/examples/sample-portfolio-tracker

## 这是什么

组合跟踪台 · 每天更新给跟投的朋友

## 什么时候用

从组合视角每天更新的东西：自己的模拟盘 / 实盘记录、基金组合跟踪、给跟投朋友看的净值与调仓。重点是一条净值曲线对比基准、持仓和每次调仓的理由。要写当天大盘指数、板块涨跌的收盘复盘，选 sample-market-recap；盘前一分钟动画播报选 sample-premarket-60s；行业新闻早报选 sample-daily-brief；一次性的研究分析报告选 sample-analysis-report。

## 用户对助手说的原话

把我的投资组合做成一个每天收盘后更新的跟踪页，发成一个网页链接给跟投的朋友看：页头是组合名、成立日、最近更新和业绩基准；最显眼的是一张净值曲线对比基准的图，带回撤阴影（从前高回落的部分）和调仓标记点，点一下标记看那次调仓的说明，可以切换近 1 月 / 近 3 月 / 成立以来；接着四个关键指标（累计收益、年化、最大回撤、夏普，都从同一条净值算出来，前后对得上）；然后当前持仓，一张按类别的仓位环形图加一张表（名称、权重、成本、现价、浮盈），手机上表格变成一行一张小卡；再是调仓记录时间线（新的在上，每次写为什么调）、一段「本周思考」；最后一张「提个问题」表单（称呼、问题），提交存到一张数据表里。涨红跌绿，少用底色块、用细线分隔，图在手机和电脑上各画一套；页脚上方写一句仅为个人记录、不构成投资建议。以后每天更新到同一个链接。

如果你还没有活页连接器（MCP），先读 https://space.24haowan.com/for-agents.md ，照里面的说明接入，或不登录直接发布。

## 照着做一份

1. 读入口文件 https://space.24haowan.com/examples/sample-portfolio-tracker/source/index.html（它引用的其他文件见下方列表）。
2. 保留结构、版式和交互，把内容**全部**换成用户自己的；模板里的公司、人名、数字都是虚构的，一样都别留。
3. 交付一个自包含的单文件 HTML：样式写在页面里，不引外部字体 / 脚本 / CDN；手机 375 宽和电脑 1440 宽都要好看，模板有暗色就保留暗色。
4. 要发成微信里能打开、改了链接不变的网页：接入活页（https://space.24haowan.com/for-agents.md）后发布；没有账号也可以让用户在 https://space.24haowan.com/quick 上传这个文件。
5. 没有活页工具、但能发 HTTPS 请求：把做好的 HTML 以 Content-Type: text/html POST 到 https://space.24haowan.com/api/quick?client=template-sample-portfolio-tracker ，返回预览链接、7 天分享与认领链接（登录后保留、链接不变）。

## 页面结构

- 净值走势
- 关键指标
- 当前持仓
- 调仓记录
- 本周思考
- 提个问题

## 文件（公开，纯文本）

- https://space.24haowan.com/examples/sample-portfolio-tracker/source/index.html（入口）

## 发成活页之后还能做的

- 同一链接每天更新不变
- 页内提问回写数据表（原生表单 POST ./_data/questions）
- 阅读回执（谁看了 / 看到哪一节）

## 发之前要备好

- 数据表 questions（列 name / question，append_open=true）：文末提问表单写进这里，发之前先用 set_data 建好

## 模板说明（README）

一位业余投资者把自己的模拟组合每天收盘后更新到同一个页面，给跟着看的朋友：净值曲线对比基准、回撤、持仓、每一次调仓和为什么调。人名、基金、股票、数字均为虚构，示例内容均为虚构。

## 演示哪个特色

**同一条链接每天更新不变 + 页内提问写回数据表。**

- 每个交易日只往**同一个页面**上发一个新版本：`proposal_id` 不变 ⇒ 链接不变，朋友收藏一次就够。行情复盘类页面一页常常更新二十多版，这份就是照这个节奏设计的（页头「第 168 次更新」）。
- 文末「提个问题」是一张原生表单 `<form method="post" action="./_data/questions">`：不跑脚本也能提交，脚本在时页内提交、就地显示「收到了」。发布者用 `list_data_rows table=questions` 读回，回答写进下一次的「本周思考」。
- 记忆点是净值曲线 vs 基准：内联 SVG，回撤阴影（从前高回落的部分）、调仓标记点（点 / 悬停看当次调仓说明，提示框在 SVG 最上层）、末端标签；区间切换「近 1 月 / 近 3 月 / 成立以来」靠单选框 + CSS（`:has`，脚本再兜一层 `data-r`），脚本不跑时显示「成立以来」。手机 / 电脑各一套坐标，字号 1:1。
- 没有外链；manifest 不写 `render`；节的阅读回执由平台 SDK 按 `data-track-section` 自动做。
- 涨红跌绿，按国内看盘习惯。

## 改哪里变成我的

| 位置 | 改什么 |
|---|---|
| 页头 `.org` / `h1` / `.facts` | 署名、组合名、成立日、最近更新、模拟本金与现值、业绩基准；右上「第 N 次更新」 |
| 净值走势 `#nav` | 每个区间一个 `.panel.p-1m / .p-3m / .p-all`，各含 `.sum`（区间收益、基准、跑赢几个点）与两段 SVG（`.nav.wide` 728 宽 / `.nav.narrow` 343 宽）。坐标：横轴按日历日期比例，纵轴是区间起点起算的收益率；回撤阴影 `path.dd` 是「区间内前高」与净值之间的面积；调仓点 `g.m` 与提示框 `.tips .tip` 一一对应（第 n 个点点亮第 n 个提示框）。数据变了建议用脚本重算整段，别手改坐标 |
| 关键指标 `#metrics` | 累计收益、年化（按 365 天折算）、最大回撤、夏普（日收益、无风险 1.5%）四格，都要从同一条净值序列算出来，和图上的末端标签、回撤注记对得上 |
| 当前持仓 `#holdings` | 环形图按类别（权益基金 / 个股 / 债券基金 / 黄金 / 现金）画，`stroke-dasharray` = 占比 × 周长；表格一行一个持仓：权重、成本、现价、浮盈（% 与金额，金额 = 现值 × 权重 − 成本部分）。手机上表格每行变成一张两行的小卡（CSS 网格，`data-k` 提供「成本 / 现价」小字） |
| 调仓记录 `#trades` | `ol.tline` 新的在上；每次一条：日期、标题、一句为什么、当时净值与距前高多少。和图上的调仓点同一组日期 |
| 本周思考 `#thoughts` | 左侧一条细线的一段话，署名与日期 |
| 提个问题 `#ask` | 表单字段 `name` / `question` 就是表里的列名 |
| 页脚 | 平台标志与名称（与 `core/space/src/theme.ts` 的 `MARK_SVG` / `PUBLIC_NAME` 逐字一致）+ 一句适用场景；页脚上方「仅为个人记录，不构成投资建议」保留 |
| `manifest.json` | `title` / `share.title` / `share.desc`（每天更新时把 desc 换成当天一句结论）；节增减时 `sections` 与页里的 `id` / `data-track-section` 三处同改 |

## 数据表

文末提问写进数据表 `questions`（列 `name` / `question`，一次提交一行，`append_open=true`）。发布前先建表：

```
set_data  proposal_id: <id>  table: "questions"  columns: ["name","question"]  rows: []  append_open: true  revision: 0
```

读回用 `list_data_rows table=questions`。本地 `space-cli serve` 会把提交写进包里的 `_data/questions.json`，试完改回 `[]`。

## 怎么发出去

单文件，MCP `publish_file` 即可（不需要终端）：

```
publish_file
  filename: "index.html"
  content: <index.html 全文>
  title: "我的组合 · 跟投跟踪台"
  manifest: <manifest.json 的内容，去掉 entry>
  hold: true            # 先看预览，确认后 publish_version
```

**每天更新**：换掉当天的数据，再调一次 `publish_file`，这次传 `proposal_id` 而不是 `title` —— 链接不变。每天都推的话，发布时传 `quiet: true` 可以不打扰订阅的人，周末那一版（带「本周思考」）再正常提醒。

有终端时用 CLI：

```bash
export SPACE_TOKEN=sk-space-…            # MCP create_cli_token
node core/space/cli/space-cli.mjs push core/space/examples/sample-portfolio-tracker \
  --proposal <proposal_id> --manifest core/space/examples/sample-portfolio-tracker/manifest.json \
  --note "10/27 收盘" --hold
```

给谁看：默认仅自己可见；给跟投的朋友看用 `set_visibility`（`passcode` 口令可看最合适）。

## 素材与纪律

- 没有位图；标志与图表全是内联 SVG。`thumb.webp` 由 `examples/verify-shots.mjs --write-thumb` 从成品截出，不进发布包。
- 基金、股票、人名均为虚构，不出现真实代码；基准写成「宽基六成 + 债券四成」这种自定组合。真发自己的组合时，页脚上方那句「仅为个人记录，不构成投资建议」留着。
