A股市场数据分析 skill
通过 tushare API(原始行情/财务)与 ClickHouse 宽表(前复权价、黄白线、MA、BBI、KDJ 等预算指标)拉取 A 股市场数据,完成数据分析与数据挖掘,最终以 markdown(默认)或 html 报告输出。
本 skill 自包含:自带 stockdata 包封装 tushare 客户端与 ClickHouse 只读查询层,不依赖任何外部项目模块。
前置依赖(必须遵守)
安装(首次):在 skill 目录执行一次
uv sync,安装依赖与stockdata本包。cd <skill-dir> # skills/stock-analysis 实际路径 uv sync配置(env 优先、
.env回退):TUSHARE_TOKEN— tushare API token(注册获取)CLICKHOUSE_HOST/PORT/USER/PASSWORD/DATABASE— 一个已装载数据的 ClickHouse 实例(含stock_wide/v_stock_daily_qfq等表)
缺 token 时
get_pro_api()抛ValueError;CH 不可达时查询抛连接错误,按提示在 env /skills/stock-analysis/.env配置。运行:所有脚本用
uv run --project <skill-dir> python <脚本>执行(任意目录均可)。直接 import:from stockdata import get_pro_api, convert_code_to_ts_code, query_wide, query_qfq无需 sys.path hack。
数据源路由:
- ClickHouse 宽表(
query_wide()):前复权价、MA、黄白线(yellow/white)、BBI、KDJ —— 一次查齐,优先用(见references/clickhouse-schema.md)。 - tushare(
get_pro_api()):原始日线/周月线、daily_basic、财务三表、fina_indicator、moneyflow、dividend、指数、stock_basic、trade_cal、ths/limit/top_list 等(见references/tushare-api-cheatsheet.md)。 - MyTT:宽表未覆盖的自定义指标可现算(fallback)。
- ClickHouse 宽表(
限流(tushare):循环调用每次
time.sleep(1.5)(≤50 次/分钟);遇too many requests/每分钟最多访问该接口50次/ timeout / connection,按指数退避重试(base 10s,最多 3 次,限流时至少等 60s)。代码格式:6 位代码用
convert_code_to_ts_code('600519')转600519.SH,不要手动拼后缀。单位:tushare
vol单位为"手"(×100=股),amount单位为"千元"(×1000=元);ClickHouse 宽表volume/amount同口径,分析时注意换算。
五阶段工作流
阶段 ① 需求澄清
若用户需求已明确则跳过;否则用 AskUserQuestion 一次性澄清:
- 分析对象:单只个股 / 多只个股 / 板块或行业 / 概念 / 全市场
- 时间范围:起止日期或相对区间(如"近一年")
- 市场/板块/行业:沪深主板、创业板、科创板、北交所;申万行业;概念板块
- 分析目的:趋势判断 / 估值评估 / 横向对比 / 资金流向 / 财务画像 / 选股筛选
- 输出格式:markdown(默认)/ html
阶段 ② 确定数据范围 + 选接口
- 指标类(前复权 / 黄白线 / MA / BBI / KDJ)→
query_wide()(见references/clickhouse-schema.md)。 - 原始行情 / 财务 / 资金流 / 指数 → 打开
references/tushare-api-cheatsheet.md选接口。 - 速查表未覆盖的冷门接口:用 WebSearch / WebFetch 查官方文档
https://tushare.pro/document/2,记录参数、字段、积分要求;核对积分,不足时给替代接口建议。
阶段 ③ 拉取数据
写临时 Python 脚本(放系统临时目录或 <skill-dir>/tmp/,分析完即弃),把原始数据存临时 parquet 供阶段④:
from stockdata import query_wide
from datetime import date
df = query_wide('600519', date(2025, 1, 1), date(2025, 12, 31)) # 含 close_qfq/yellow/white/ma_*/kdj_*
df.to_parquet('tmp_maotai.parquet')
运行:uv run --project <skill-dir> python tmp_fetch.py。
阶段 ④ 数据分析
用 pandas 读临时数据,按分析目的执行:描述统计 / 技术分析(黄白线、MA、MACD、RSI、KDJ)/ 横向对比 / 相关性 / 财务分析 / 资金流向。调用 scripts/plot.py 生成 PNG 到 ${SA_REPORTS_DIR:-docs/reports}/assets/。参考 references/analysis-examples.md。
阶段 ⑤ 生成报告
套用 references/report-template.md 骨架。文件命名 ${SA_REPORTS_DIR:-docs/reports}/YYYY-MM-DD-<topic>.md(<topic> 用 kebab-case);图表存 ${SA_REPORTS_DIR:-docs/reports}/assets/<同名>-<seq>.png,md 中相对路径引用。用户选 html 时,运行:
uv run --project <skill-dir> python <skill-dir>/scripts/render_report.py <file>.md
(首次使用 html 前若缺库:uv pip install markdown——已含于本包依赖。)
边界(不做)
策略回测、量化交易信号、数据入库、实时行情推送、机器学习选股/预测模型、plotly 交互图、ClickHouse 写入。