name: stock-replay description: 生成「假如买入 100 万 X 股票,从上市持有到现在值多少」的动态回放网页(抖音/财经爆款那种)。用户给股票代码或名称(如「腾讯」「茅台」)+ 金额,本 skill 先把名称解析成具体股票并让用户确认,再自动抓取该股票上市至今的每日收盘价,渲染成一个 16:9 的折线回放动画网页:大数字随时间跳动显示市值、涨跌额/涨幅(A股红涨绿跌),下方有播放/暂停、速度、重新开始控制。支持「对比模式」——用户给两只股票(如「中国联通、中国电信各投入10万」),同页渲染两条回测曲线(纵轴为累计净值倍数,谁高谁赚得多),最多两只。覆盖 A股、港股、美股。当用户提到「假如买100万股票」「股票历史走势模拟」「股票回测/回放网页」「投资模拟器」「持有到现在值多少」「100万股票走势」「两只股票对比/比较回测」等,或想做任何「投入一笔钱买入某股票并按历史走势回放」的可视化网页时,务必使用本 skill。
把抖音/财经爆款里很火的「假如 X 年前买入 100 万 XX 股票,现在值多少」做成一个可交互网页: - 用户输入 股票代码 + 投入金额(默认 100 万)。 - 自动抓取该股票上市至今的每日收盘价。 - 渲染成 16:9 展示区里的折线回放动画:曲线从左到右逐渐画出(红色发光线,A股红涨绿跌)。 - 信息条在图表上方(不压在图上):实时显示日期、市值大数字、涨跌额/涨幅,右侧固定显示投入本金/区间最高/最大回撤。 - 初次打开默认暂停,需手动点「▶ 播放」开始。 - 控制条:▶播放/⏸暂停 · ↺重新开始 · 速度(1x/2x/5x/10x) · 开始日期选择器;键盘 空格=播放暂停、R=重开、←/→=微调。 - 开始日期可改:选择器默认为空(=从上市/数据最早日起回测);用户选一个日期后,以该日为新买入基准重算(本金÷新起点收盘价=新股数,市值/峰值/最大回撤/里程碑全部基于新起点),图表从该日起重新回放;清空又回到最早。对比模式下两只股票都从所选日期起(早于某只上市日的,那只仍从其上市日起)。 - 投入金额可改:金额框默认 100 万(对比页默认两只统一本金);改金额后按新本金重算市值/峰值/盈亏(收益率不变),开始日期和金额任一改动都即时重算重绘。 - 里程碑暂停:播放到「区间最高」和「最大回撤」时会自动停 1 秒、弹出高亮卡片显示收益/回撤,然后继续。 - 结束后标记:自由播放走完停止时,在图上用悬浮卡片标出峰值点和最大回撤点(含数值与日期)。 - 页面底部注明回测口径:仅基于不复权收盘价涨跌,不计分红/送股/配股/手续费,持有期间无买卖;拆股已修正使曲线连续。 - 每只股票一个项目文件夹,过程数据(每日收盘价)也存盘。
设计原则(用户拍板,别擅自改):只看收盘走势、不记分红 → 统一用「不复权收盘价」;为避免美股拆股造成的假跳水,对拆股做回溯修正让曲线连续。
先从用户原话里识别出股票 + 金额。用户常给的是名称(「腾讯」「茅台」「中国联通」)而不是代码,按下面处理:
(a) 大模型先解析(必须,别跳过直接查接口):凭你自己的知识把名称映射到最可能的具体股票。常见映射:
- 腾讯 → 腾讯控股 港股 00700;茅台 → 贵州茅台 A股 600519;苹果 → 美股 AAPL
- 中国联通 → A股 600050 / 港股 00762;中国电信 → A股 601728 / 港股 00728;比亚迪 → A股 002594 / 港股 01211
- 名称带「A 股/港股/美股」就按指定市场;没指定就给最主流的上市地(如腾讯默认港股、茅台默认A股),并列出歧义项让用户选。
(b) 用接口校验:跑 python3 <skill>/scripts/resolve_stock.py <名称> 用腾讯 smartbox 校验你解析的代码、补全市场/全称,并列出候选(含 ADR、子品牌等同名项)。注意接口会漏(如「茅台」「贵州茅台」可能搜不到、A股中国联通/电信/比亚迪常只返回港股),所以以你(a)的解析为准、接口只作校验补全,接口没返回不代表不存在。
(c) 给用户确认一次:把解析结果简明列出,请用户拍板后再抓数。例如:
已识别:中国联通(A股 600050),投入 10 万。是这只吗?(港股另有 00762) 对比:中国联通(A股 600050) VS 中国电信(A股 601728),各投 10 万。确认开始?
只有用户确认后,才进入下一步抓数据。 用户若给了明确代码(600519/AAPL/sz000001),可跳过解析直接确认即可。
1000000(100 万);用户说「10W/10万」就 100000。一股一个文件夹,命名 <股票名>-<代码>(股票名抓到后才知道,可先用代码建,抓到后重命名;或直接先抓再建)。例如:
贵州茅台-600519/
├── data.json # 过程数据:每日收盘价 + 模拟市值 + meta(fetch 产出)
├── closes.csv # 过程数据:纯收盘价,人可读(build 额外产出)
└── index.html # 最终回放网页(build 产出,双击即开)
文件夹建在用户当前 cwd 下,不要建到固定路径或 .claude/ 下。
python3 <skill>/scripts/fetch_kline.py <代码> --amount <金额> --out <项目>/data.json
python3 <skill>/scripts/build_page.py \
--data <项目>/data.json \
--template <skill>/assets/replay-template.html \
--out <项目>/index.html
--template 不传时按数据数量自动选:1 个 --data → replay-template.html(单股);2 个 → compare-template.html(对比)。closes.csv。open <项目>/index.html(macOS)打开预览。当用户一次给两只股票(最多两只,超过要让用户只选两只):
对比-<名A>vs<名B>/(建在当前 cwd 下),分别抓两只数据:
bash
python3 <skill>/scripts/fetch_kline.py <代码A> --amount <金额A> --out 对比-XvsY/data_A.json
python3 <skill>/scripts/fetch_kline.py <代码B> --amount <金额B> --out 对比-XvsY/data_B.json--data 生成对比页(自动选 compare-template.html):
bash
python3 <skill>/scripts/build_page.py \
--data 对比-XvsY/data_A.json --data 对比-XvsY/data_B.json \
--out 对比-XvsY/index.html
产出:index.html(对比页)+ closes_A.csv + closes_B.csv。对比页与单股页的不同(这是为对比专门做的样式适配): - 两条曲线同图:A 青色、B 橙色,各自从上市日起画。 - 纵轴用「累计净值倍数」(相对各自本金,1×=本金)而不是绝对金额——这样一只暴涨(如冲到 5×)不会把另一只(在 1× 附近)压扁成看不见的细线,两只都清晰可比。具体金额仍在上方的两张信息卡里显示。 - 两张信息卡(A/B 各一张)实时显示日期、市值、涨跌额/涨幅、投入、区间最高。 - 领先提示条:按收益率比较,实时显示「🏆 当前领先:X,领先 Y 个百分点」。 - 时间按真实日期对齐:两只上市日不同时,较早的一只先画,较晚的那只在其上市日前显示「未上市」(不画)。 - 无里程碑暂停(两只的峰值/回撤点不同,暂停会打架),改为连续播放;速度/重开/键盘控制同单股。
references/data-sources.md 记录了各行情接口的实测行为与坑。正常情况不用读——fetch_kline.py 已内置最优策略。只在以下情况读它:
- fetch_kline.py 两平台都失败(输出 !! 两平台均无数据)→ 按 references「失败时」一节自主找新浪/网易/雅虎等替代源。
- 用户问数据来源、复权口径、拆股处理细节。
- 想理解某平台为什么限流/返回空。
fqt=0;②短时多次会 HTTP 000 限流。pwd),一股一个子文件夹。~/.claude/ 或 skill 自身目录下,不要建固定路径。这是一个质量不错的股票可视化 Skill,功能实用,能生成类似抖音爆款的「买入回放」网页,交互流畅、细节到位。优点是支持三大市场、对比模式、文档详尽;主要不足是美股数据有时抓不到或被限流,需要耐心重试。整体值得一试,但对美股用户可能要有些心理准备。