multiAI Summary Pending

openclaw-stock-skill

使用 data.diemeng.chat 提供的接口查询股票日线、分钟线、财务指标等数据,支持 A 股等市场。

3,556 stars

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/openclaw-stock-data-skill/SKILL.md --create-dirs "https://raw.githubusercontent.com/openclaw/skills/main/skills/1018466411/openclaw-stock-data-skill/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/openclaw-stock-data-skill/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How openclaw-stock-skill Compares

Feature / Agentopenclaw-stock-skillStandard Approach
Platform SupportmultiLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

使用 data.diemeng.chat 提供的接口查询股票日线、分钟线、财务指标等数据,支持 A 股等市场。

Which AI agents support this skill?

This skill is compatible with multi.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

本技能教会代理如何使用你自建的股票数据服务(线上域名 `https://data.diemeng.chat`),通过 **API Key** 进行鉴权,查询股票的日线、分钟线、财务指标等数据。

> ⚙️ **API Key 配置约定**
>
> - OpenClaw 会按照 [`skills.entries.<key>` 配置](https://docs.openclaw.ai/tools/skills-config) 把 API Key 和自定义配置注入到进程环境变量中。
> - 本技能约定使用环境变量 **`STOCK_API_KEY`** 作为主密钥,并在 `metadata.openclaw.primaryEnv` 中声明,以便通过 `skills.entries.openclaw-stock-skill.apiKey` 统一配置。
> - 推荐的 OpenClaw 配置示例(`~/.openclaw/openclaw.json`):
>
> ```json5
> {
>   skills: {
>     entries: {
>       "openclaw-stock-skill": {
>         enabled: true,
>         // 建议在 OpenClaw UI 的 Skill 参数面板里填写 apiKey,
>         // Gateway 会自动将其写入 STOCK_API_KEY 环境变量
>         apiKey: { source: "env", provider: "default", id: "STOCK_API_KEY" },
>         env: {
>           // 可在这里直接写死,或通过系统环境变量覆盖
>           STOCK_API_KEY: "YOUR_REAL_STOCK_API_KEY"
>         },
>         config: {
>           // 可选:覆盖默认域名
>           baseUrl: "https://data.diemeng.chat"
>         }
>       }
>     }
>   }
> }
> ```
>
> 参考文档:[Skills Config](https://docs.openclaw.ai/tools/skills-config)、[Skills](https://docs.openclaw.ai/tools/skills)

## 总体说明

- **基础域名**:默认使用 `https://data.diemeng.chat`,如存在 `skills.entries.openclaw-stock-skill.config.baseUrl` 则优先使用配置中的 `baseUrl`。
- **鉴权方式**:所有需要权限的接口都必须带上 API Key:
  - 首选 HTTP Header:`apiKey: <STOCK_API_KEY>`(推荐)
  - 兼容 Header:`X-API-Key: <STOCK_API_KEY>`
  - 后端也支持在 JSON body 中携带 `apiKey` 字段,但为了安全与规范,本技能**统一通过 Header 传递**。
- **返回结构**:
  - 大多数接口返回:`{ "code": 200, "msg": "成功", "data": { ... } }`
  - 少数列表类接口直接返回数组或简单结构,实际响应以 JSON 为准。
- **限流与黑名单**:
  - API Key 及 IP 都有严格限流与黑名单逻辑:
    - 无效 API Key 多次尝试会触发封禁(参见后端 `DataAccessVerifier` 实现)。
    - 需优先缓存和复用同一 API Key,不要在循环中频繁切换。

## 能力概览(建议的工具意图)

代理应将本技能视作一组 HTTP 能力,而不是单一接口:

- **get_stock_daily_bars**:查询指定股票在某一时间区间内的日线 K 线数据。
- **get_stock_intraday_bars**:查询分钟级(1/5/15/30/60 分钟)历史数据。
- **get_stock_finance_factors**:查询日度财务因子(PE、PB、换手率等)。
- **get_stock_list**:查询股票基础信息列表,用于代码/名称搜索。
- **get_stock_valuation**:查询估值列表和详细估值信息。
- **get_stock_calendar_and_snapshot**:查询交易日历和当日快照。

代理在规划调用时,应根据用户自然语言意图,选择以上能力并组合使用。

## 接口详情与调用规范

### 1. 日线数据:`POST /api/stock/daily`

- **URL**:`{baseUrl}/api/stock/daily`
- **方法**:`POST`
- **Headers**:
  - `Content-Type: application/json`
  - `apiKey: <STOCK_API_KEY>`
- **请求体 JSON**(后端 `DailyDataRequest`):

```json
{
  "stock_code": "000001.SZ",
  "start_time": "2024-01-01",
  "end_time": "2024-01-31",
  "page": 0,
  "page_size": 1000
}
```

- 说明:
  - `stock_code` 可以是单个字符串,也可以是字符串数组。
  - `start_time`、`end_time` 格式为 `YYYY-MM-DD`。
  - 支持分页,`page` 从 0 开始。
- 响应主体(简化):
  - `data.total`:总记录数
  - `data.list`:每条记录包含 `stock_code`, `trade_date`, `open`, `high`, `low`, `close`, `vol`, `amount` 等字段,价格与成交量已在后端统一保留 2 位小数。

> 代理在需要“某股某段时间的日 K 线”时,应优先选择该接口。

### 2. 分钟级历史数据:`POST /api/stock/history`

- **URL**:`{baseUrl}/api/stock/history`
- **方法**:`POST`
- **Headers**:同上
- **请求体 JSON**(后端 `HistoryDataRequest`):

```json
{
  "stock_code": "000001.SZ",
  "level": "5min",
  "start_time": "2024-01-01 09:30:00",
  "end_time": "2024-01-01 15:00:00",
  "page": 0,
  "page_size": 1000
}
```

- 字段说明:
  - `level`:`"1min" | "5min" | "15min" | "30min" | "60min"`
  - `start_time` / `end_time`:
    - 允许仅日期(自动补全 00:00:00 和 23:59:59)
    - 或完整时间戳 `YYYY-MM-DD HH:MM:SS`
- 响应主体(简化):
  - `data.list` 中每条包含:`stock_code`, `trade_time`, `open`, `high`, `low`, `close`, `vol`, `amount`。

> 用于用户询问“某天/某段时间内的分钟级行情、分时数据”等场景。

### 3. 财务与因子(行情因子):`POST /api/stock/finance`

- **URL**:`{baseUrl}/api/stock/finance`
- **方法**:`POST`
- **请求体 JSON**(后端 `FinanceDataRequest`):

```json
{
  "stock_code": "000001.SZ",
  "start_time": "2024-01-01",
  "end_time": "2024-03-31",
  "page": 0,
  "page_size": 1000
}
```

- 主要返回字段(列表中每条):
  - `trade_date`, `close`, `turnover_rate`, `turnover_rate_f`, `volume_ratio`, `pe`, `pe_ttm`, `pb`, `ps`, `ps_ttm`, `dv_ratio`, `dv_ttm`, `total_share`, `float_share`, `free_share`, `total_mv`, `circ_mv` 等。

> 适合估值分析、换手率、成交金额、市值等相关问题。

### 4. 股票基础信息列表:`GET /api/stock/list`

- **URL**:`{baseUrl}/api/stock/list`
- **方法**:`GET`
- **Query 参数**:
  - `stock_code`(可选):精确股票代码筛选
  - `page`:默认 0
  - `page_size`:默认 20000
- 响应(封装在统一 `success` 结构中):
  - `data.total`
  - `data.list`:包含 `stock_code`, `name`, `area`, `industry`, `list_date`, `symbol`, `list_status`, `delist_date`, `is_hs` 等。

> 当用户只给出股票名称、地区、行业等描述时,可先通过该接口获取匹配列表,再提示用户选择具体代码。

### 5. 估值列表与详细估值:`GET /api/stock/valuation` & `GET /api/stock/valuation/list`

#### 5.1 综合估值列表:`GET /api/stock/valuation`

- **URL**:`{baseUrl}/api/stock/valuation`
- **方法**:`GET`
- **说明**:
  - 无需请求体,通过 API Key 权限控制访问。
  - 内部会聚合 `stock_finance_daily`, `stock_industry`, `stock_ten_year_growth` 等多张表,返回 `StockValuationItem` 列表。
- 典型字段:
  - `stock_code`, `stock_name`, `level1_name`, `level2_name`, `level3_name`
  - `pe_ttm`, `pe_percentile`, `latest_price`, `dividend_yield_ttm`
  - 行业相关:`industry_avg_pe`, `industry_pe_rank`, `sector_pe_median`, `sector_pe_rank`
  - 成长与财务:`eps`, `roe`, `roa`, `eps_growth_10y`, `roe_growth_10y`, `avg_dividend_10y` 等。

> 当用户提问如“某只股票在行业内估值水平如何”“给我按市盈率从低到高列出某行业股票”时应优先考虑调用该接口。

#### 5.2 简化估值列表:`GET /api/stock/valuation/list`

- **URL**:`{baseUrl}/api/stock/valuation/list`
- **方法**:`GET`
- **Query 参数**:
  - `sort_by`:`pe_ttm | pe_percentile | dividend_yield_ttm | industry_pe_rank`(默认 `pe_ttm`)
  - `sort_order`:`asc | desc`(默认 `asc`)
  - `industry`(可选)
  - `limit`(默认 100)
  - `offset`(默认 0)

> 适合只需要“按某个指标排序的前 N 个股票”的场景。

### 6. 交易日历与快照:`GET /api/basic/calendar` & `GET /api/basic/snapshot`

#### 6.1 交易日历:`GET /api/basic/calendar`

- **URL**:`{baseUrl}/api/basic/calendar`
- **方法**:`GET`
- **Query 参数**:
  - `start_time`: `YYYY-MM-DD`
  - `end_time`: `YYYY-MM-DD`
- 响应:
  - `data` 为数组,每条含 `date`, `is_open`(1 为交易日,0 为休市)。

> 当用户问“某段时间哪些是交易日”“下一个交易日是什么时候”等,可使用此接口。

#### 6.2 快照:`GET /api/basic/snapshot`

- **URL**:`{baseUrl}/api/basic/snapshot`
- **方法**:`GET`
- **Query 参数**:
  - `stock_code`(可选)
  - `page`, `page_size`
- 返回最新一笔集合竞价数据的汇总,字段包括价格、成交量、买卖盘等。

> 当用户需要“当前(最近一次)盘口快照”或大盘扫描时,可使用此接口。

## 调用策略与最佳实践

1. **API Key 获取与使用**
   - 优先从环境变量 `STOCK_API_KEY` 读取(由 OpenClaw 按 `skills.entries.openclaw-stock-skill.apiKey` 注入)。
   - 若环境变量缺失,可根据用户在 Skill 配置面板中输入的值(通常同样会映射到该环境变量)进行调用。
   - 不要在 URL Query 中传递 `apiKey` 或 `api_key`,后端会视为安全风险。

2. **错误处理**
   - `code = 401`:API Key 无效或缺失,应提示用户检查在 OpenClaw Skill 配置中的 API Key。
   - `code = 403`:权限不足或下载次数/访问次数限制,应向用户说明权限/限流约束。
   - `code = 429`:请求过于频繁,需减少调用频率或提示用户稍后再试。

3. **分页与大数据量**
   - 若 `data.total` 很大,代理应分批分页请求,并在回答中做汇总,而不是一次性获取全部数据。
   - 对于分钟级或 tick 级大数据量,应在对话中与用户确认时间范围和精度,避免无谓的海量下载。

4. **单位与精度**
   - 价格、成交量等字段在后端已经统一保留 2 位小数;如需展示给用户,可直接使用或再格式化。
   - 分红相关字段在估值接口中已做 10 年平均等处理,解释时注意说明口径(年化、近 10 年等)。

## 使用示例(给代理的思路)

- 当用户说:**“帮我查一下 000001.SZ 在 2024 年 1 月份的日 K 线”**
  1. 调用 `POST /api/stock/daily`,`stock_code = "000001.SZ"`,时间区间为 `2024-01-01` 至 `2024-01-31`。
  2. 对返回的 `data.list` 进行整理,总结涨跌幅、最大回撤、平均成交额等。

- 当用户说:**“按市盈率从低到高列出券商行业的前 20 只股票”**
  1. 调用 `GET /api/stock/valuation/list`,设置 `industry = "证券"`(或其它后端行业名称)、`sort_by = "pe_ttm"`, `sort_order = "asc"`, `limit = 20`。
  2. 将结果按表格形式展示,并简要点评估值分布。

- 当用户说:**“这周哪些天是交易日?”**
  1. 根据当前日期计算一周范围,调用 `GET /api/basic/calendar`。
  2. 将 `is_open = 1` 的日期列出,说明哪些是交易日。

本技能不包含额外可执行脚本,完全通过指导代理调用现有 HTTP 接口工作。所有请求都应优先使用 `STOCK_API_KEY` 环境变量,并遵守上述限流与安全约定。