# Stock Analysis

> A股市场数据分析助手。通过 tushare API 与 ClickHouse 宽表拉取数据，完成数据分析、数据挖掘，输出 markdown（默认）或 html 报告。触发场景：A股/股票/指数/板块/概念分析、个股技术分析、财务分析、资金流向分析、板块横向对比、行业排名、选股筛选、行情数据挖掘、tushare 数据查询与可视化报告。

- Skill: `jeandoom/stock-analysis` (Agent Skill, multi-file: 19 files)
- Install (CLI): `npx skillmds@latest add jeandoom/stock-analysis`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jeandoom/stock-analysis/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- License: MIT
- Author: Jeandoom (https://skillmd.com/u/jeandoom)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/jeandoom/stock-analysis

---


# A股市场数据分析 skill

通过 tushare API（原始行情/财务）与 ClickHouse 宽表（前复权价、黄白线、MA、BBI、KDJ 等预算指标）拉取 A 股市场数据，完成数据分析与数据挖掘，最终以 markdown（默认）或 html 报告输出。

本 skill **自包含**：自带 `stockdata` 包封装 tushare 客户端与 ClickHouse 只读查询层，不依赖任何外部项目模块。

## 前置依赖（必须遵守）

1. **安装**（首次）：在 skill 目录执行一次 `uv sync`，安装依赖与 `stockdata` 本包。
   ```bash
   cd <skill-dir>   # skills/stock-analysis 实际路径
   uv sync
   ```
2. **配置**（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` 配置。
3. **运行**：所有脚本用 `uv run --project <skill-dir> python <脚本>` 执行（任意目录均可）。直接 import：
   ```python
   from stockdata import get_pro_api, convert_code_to_ts_code, query_wide, query_qfq
   ```
   无需 sys.path hack。
4. **数据源路由**：
   - **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）。
5. **限流**（tushare）：循环调用每次 `time.sleep(1.5)`（≤50 次/分钟）；遇 `too many requests` / `每分钟最多访问该接口50次` / timeout / connection，按指数退避重试（base 10s，最多 3 次，限流时至少等 60s）。
6. **代码格式**：6 位代码用 `convert_code_to_ts_code('600519')` 转 `600519.SH`，不要手动拼后缀。
7. **单位**：tushare `vol` 单位为"手"（×100=股），`amount` 单位为"千元"（×1000=元）；ClickHouse 宽表 `volume`/`amount` 同口径，分析时注意换算。

## 五阶段工作流

### 阶段 ① 需求澄清

若用户需求已明确则跳过；否则用 **AskUserQuestion** 一次性澄清：

- **分析对象**：单只个股 / 多只个股 / 板块或行业 / 概念 / 全市场
- **时间范围**：起止日期或相对区间（如"近一年"）
- **市场/板块/行业**：沪深主板、创业板、科创板、北交所；申万行业；概念板块
- **分析目的**：趋势判断 / 估值评估 / 横向对比 / 资金流向 / 财务画像 / 选股筛选
- **输出格式**：markdown（默认）/ html

### 阶段 ② 确定数据范围 + 选接口

1. 指标类（前复权 / 黄白线 / MA / BBI / KDJ）→ `query_wide()`（见 `references/clickhouse-schema.md`）。
2. 原始行情 / 财务 / 资金流 / 指数 → 打开 `references/tushare-api-cheatsheet.md` 选接口。
3. 速查表未覆盖的冷门接口：用 **WebSearch / WebFetch** 查官方文档 `https://tushare.pro/document/2`，记录参数、字段、积分要求；核对积分，不足时给替代接口建议。

### 阶段 ③ 拉取数据

写临时 Python 脚本（放系统临时目录或 `<skill-dir>/tmp/`，分析完即弃），把原始数据存临时 parquet 供阶段④：

```python
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 写入。

