市场涨跌幅统计看板
概述
基于 Tushare Pro API 获取金融市场数据,生成纯 CSS 离线 HTML 看板。 覆盖三大板块:全球宏观、国内股票指数、申万一级行业。 支持五个周期切换:本周以来(本周一~最新日)/ 近一月 / 近三月 / 近六月 / 今年以来。
触发条件
用户提到以下关键词时使用此技能:
- "统计涨跌幅" / "涨跌幅统计"
- "生成市场看板" / "生成 HTML 报告"
- "拉取全球宏观" / "申万一级行业"
- "查指数涨跌幅" / "看下最近"
- 提供 Tushare token 并要求取数展示
前置条件
- 用户提供 Tushare Pro token(字符串)
- 本技能目录下的
scripts/market_report.py是主脚本 - Python venv 位于
~/.workbuddy/binaries/python/envs/default
运行步骤
1. 拉取数据 & 生成 HTML
运行主脚本(会在工作目录生成 market_report.html):
~/.workbuddy/binaries/python/envs/default/Scripts/python.exe \
SKILL_DIR/scripts/market_report.py --token TUSHARE_TOKEN --output output-dir/market_report.html
参数说明:
--token:Tushare Pro token(必填)--output:输出 HTML 文件路径(默认工作目录下的market_report.html)
2. 展示结果
用 present_files 将生成的 market_report.html 呈现给用户。
输出格式
- 纯 HTML/CSS,无 JavaScript、无外部 CDN 依赖
- 三块独立面板,每块顶部有 5 个周期切换标签(纯 CSS
:checked ~实现) - 标签下方显示「当前显示:XXX(YYYY-MM-DD ~ YYYY-MM-DD)」——每个周期标签旁附带实际统计区间的起止日期,取自上证指数(000001.SH,国内品种中数据最及时)的实际交易日
- 红涨绿跌(中国 A 股习惯)
板块一:全球宏观(14 项)
| 品种 | Tushare 接口 | |------|-------------| | 标普500 / 纳斯达克 | pro.index_global(ts_code='SPX'/'IXIC') | | 恒生指数 / 恒生科技 | pro.index_global(ts_code='HSI'/'HKTECH') | | 黄金 | pro.fut_daily(ts_code='AU.SHF') | | 10年期国债 / 30年期国债 | pro.fut_daily(ts_code='T.CFX'/'TL0.CFX') | | 上证指数 | pro.index_daily(ts_code='000001.SH') | | 南华系列(商品/农产品/能化/黑色/有色金属/贵金属) | pro.index_daily(ts_code='NH*.NH') |
板块二:国内股票(9 项)
| 指数 | Tushare code | |------|-------------| | 上证50 | 000016.SH | | 沪深300 | 000300.SH | | 中证500 / 1000 / 2000 | 000905.SH / 000852.SH / 932202.CSI | | 中证A500 | 000510.CSI | | 创业板指 | 399006.SZ | | 科创50 | 000688.SH | | 上证红利 | 000015.SH |
板块三:申万一级行业(SW2021,31 个)
用 pro.index_classify(src='SW2021', level='L1') 获取 31 个行业代码,
再用 pro.index_daily() 取日线计算涨跌幅。
图表样式规范
全球宏观 & 国内股票 → 垂直柱状图
- 0 轴水平居中,红涨绿跌
- 数值标在柱顶(正)/ 柱底(负)
- 指数名加粗并旋转 45°
- CSS:flex 布局,bar 在
.track内绝对定位
申万一级行业 → 水平条形图
- 0 轴垂直居中
- 涨(红):从 0 轴向右延伸(
left:50%;width:X%) - 跌(绿):从 0 轴向左延伸(
left:calc(50% - X%);width:X%) - 数值贴在条形末端:正值条形右端外侧(
left:calc(50%+宽度+4px)),负值条形左端外侧(right:calc(50%+宽度+4px)) - 布局:flex
[name(92px) | track(1fr)],条形和数值都在 track 内绝对定位 - 行业名加粗,按涨跌幅从高到低排序
- 底部 X 轴刻度:0 居中,步长 5%(范围不超过 25%)或 10%(范围超过 25%)
周期切换
- 五个周期及其交易日回看数:
| 周期 | 代码参数 | 含义 | 统计区间 |
|------|---------|------|---------|
| 本周以来 |
'week'| 当前日历周(本周一~最新交易日),取本周第一个交易日为基期 |本周一 ~ 最新交易日| | 近一月 |21| 最近 21 个交易日的涨跌幅(约 1 个月) |最近第22个交易日 ~ 最新交易日| | 近三月 |63| 最近 63 个交易日的涨跌幅(约 3 个月) |最近第64个交易日 ~ 最新交易日| | 近六月 |'6m'| 6个自然月前至最新交易日的涨跌幅,取 ≥ 6个月前的第一个交易日为基期 |6个月前首日 ~ 最新交易日| | 今年以来 |'ytd'| 当年第一个交易日至今的涨跌幅 |当年首日 ~ 最新交易日| - 用 CSS radio 按钮
:checked ~选择器实现面板切换 - 选中按钮高亮,标签下方显示「当前显示:XXX(YYYY-MM-DD ~ YYYY-MM-DD)」——每个周期标签下方均附带实际统计区间的起止日期,取自宏观板块第一条数据序列的实际交易日。
关键确认
index_global和fut_daily接口在 Tushare 中已确认可用(用户 token 已验证)- 南华指数用
.NH后缀通过index_daily获取 - 申万 2021 版 31 行业用
index_classify(src='SW2021', level='L1') - 不可用接口:
index_cons、zz500、hs300、sz50、sw_industry(旧名已废弃)
微信扫一扫