# stockClaw-yingyan

> 为该股票量化项目提供 OpenClaw 接入说明，支持股票量化图生成、股票行情问答、自然语言 AI 搜股与 WebSocket 实时监控信号推送。用户发送股票代码或名称时调用量化图接口；用户发送"股票代码或名称+行情"时调用行情分析接口，接口返回 TDX 截面数据与提示词，由 OpenClaw 大模型完成趋势诊断；用户发送自然语言选股条件时调用轻量版搜股接口，最多返回 20 只股票和固定字段；用户需要实时监控信号时，先调用监控流接口获取 WebSocket 连接模板，再由客户端优先使用原生 WebSocket 能力建立长连接，并按文档中的成功判定与排障规则执行。

- Skill: `dvcrn/stockclaw-yingyan` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add dvcrn/stockclaw-yingyan`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/stockclaw-yingyan/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/stockclaw-yingyan

---


# stockClaw-yingyan

## 适用场景
- 用户只发送股票名称或股票代码
- 用户发送"股票名称/股票代码 + 行情"
- 用户发送自然语言选股条件，想搜索某一类股票
- 用户要查询今天有哪些涨停股
- 用户要接收实时监控信号推送

## 输入规则
1. 如果消息只包含股票名称或股票代码，调用 `POST /api/openclaw/stock/message`
2. 如果消息包含"行情"关键词，调用 `POST /api/openclaw/stock/message`
3. 如果消息是自然语言选股条件，调用 `POST /api/openclaw/stock/query`
4. 如果用户明确要查询涨停股股票列表，调用 `GET /api/openclaw/stock/limit-up`
5. 如果要接收实时信号推送，先调用 `GET /api/openclaw/stock/monitor/stream` 获取 WebSocket 连接模板

### 自然语言 AI 搜股意图识别
满足以下特征时，应优先判断为"自然语言 AI 搜股"：
- 用户在描述一类股票，而不是单只股票，例如："涨幅超过 8% 的科技股"、"换手率高的深圳股票"、"近 20 日涨幅靠前的半导体股票"
- 用户带有筛选、排序、区间、排除、前 N 名等表达，例如："大于"、"小于"、"区间"、"按涨幅排序"、"取前 20 只"、"剔除 ST"
- 用户意图是"找股票列表"，而不是生成单只股票量化图，也不是诊断单只股票行情

不要误判为自然语言 AI 搜股的场景：
- 纯股票名称或代码：如 `平安银行`、`000001`
- 明确包含"行情"并指向单只股票诊断：如 `平安银行行情`
- 明确要求查询"涨停股"、"今日涨停股票"、"今天涨停股有哪些"
- 仅要求连接实时监控、订阅监控信号

## 缺失凭证时的处理规则
- 只要调用 `POST /api/openclaw/stock/message`、`POST /api/openclaw/stock/query` 或建立 WebSocket 实时监控连接，就必须先确认 `user_id` 和 `apikey` 已提供。
- 如果 `user_id` 缺失，必须先提示用户补充 `user_id`，不要直接发起接口请求。
- 如果 `apikey` 缺失，必须先提示用户补充 `apikey`，不要直接发起接口请求。
- 如果 `user_id` 和 `apikey` 都缺失，必须一次性告知用户这两个值都需要提供。
- 提示用户获取方式：前往鹰眼量化站点，在"用户中心"的"开发 API"页面查看或生成这两个值。
- 若用户不确定入口，可直接提示访问：`https://yingyan.chatface.com/`

建议提示话术：

```text
要继续使用股票量化图、行情问答、自然语言搜股或实时监控功能，请先提供 user_id 和 apikey。

这两个值可以在鹰眼量化网站的“用户中心” -> “开发 API”页面获取：
https://yingyan.chatface.com/
```

## 调用约定
### 1. 量化图
请求：

```json
{
  "message": "平安银行",
  "user_id": "your_user_id",
  "apikey": "YOUR_12_CHAR_KEY"
}
```

处理规则：
- `intent=chart`：返回量化图 URL
- `ok=false`：读取 `error.code` 与 `error.message`

### 2. 行情问答
请求：

```json
{
  "message": "平安银行行情",
  "user_id": "your_user_id",
  "apikey": "YOUR_12_CHAR_KEY"
}
```

处理规则：
- `intent=market_query`：返回结构化 TDX 截面数据、`system_prompt`、`user_prompt`
- 收到响应后，**你（OpenClaw 大模型）必须使用返回的 `system_prompt` 和 `user_prompt` 来生成趋势诊断**
- `ok=false`：读取 `error.code` 与 `error.message`

### 3. 自然语言 AI 搜股
请求：

```json
{
  "query": "涨幅超过8%的半导体股票，按换手率从高到低排序，取前20只",
  "user_id": "your_user_id",
  "apikey": "YOUR_12_CHAR_KEY"
}
```

处理规则：
- 调用 `POST /api/openclaw/stock/query`
- 该能力参考 `web/query/queryFundamentals.html` 的自然语言理解思路，但**不要复用**网页端 `POST /api/query/tdx` 接口
- OpenClaw 场景只返回轻量结果，**最多 20 只**
- 返回结果仅允许包含以下字段：
  - `代码`
  - `名称`
  - `涨幅%`
  - `现价`
  - `涨跌`
  - `换手%`
  - `细分行业`
  - `活跃度`
  - `连涨天`
  - `昨涨幅%`
  - `3日涨幅%`
  - `5日涨幅%`
  - `10日涨幅%`
  - `20日涨幅%`
  - `60日涨幅%`
  - `一年涨幅%`
  - `月初至今%`
  - `年初至今%`
  - `近日指标提示`
- OpenClaw 应直接把结构化股票列表返回给用户；如果接口同时返回摘要字段，可优先使用摘要，再附表格结果
- `ok=false`：读取 `error.code` 与 `error.message`

### 4. 涨停股专用查询
请求：

```text
GET /api/openclaw/stock/limit-up?user_id=your_user_id&apikey=YOUR_12_CHAR_KEY
```

处理规则：
- 当用户明确要查"今天涨停股有哪些"、"涨停股票列表"时，优先调用该专用接口
- 不要把这类请求误走通用自然语言搜股 `POST /api/openclaw/stock/query`
- 该接口按股票代码和名称对应的涨停阈值识别结果：主板约 10%，创业板/科创板约 20%，北交所约 30%，ST 约 5%
- 返回结果为结构化股票列表，可直接展示给用户

### 5. WebSocket 实时监控
请求：

```text
GET /api/openclaw/stock/monitor/stream?user_id=your_user_id
```

处理规则：
- 返回 `ws_url_template`，模板中包含 `{apikey}` 和 `{user_id}` 占位符
- 由客户端填入实际的 `apikey` 与 `user_id` 后建立 WebSocket 长连接
- 连接地址格式：`wss://yingyan.chatface.com/ws/monitor/open?apikey={apikey}&user_id={user_id}`
- 连接成功后将持续接收监控信号变化推送（JSON 数组格式）
- 每条推送包含：`ticker`（代码）、`name`（名称）、`prev_rating`（原评级）、`latest_rating`（新评级）、`close`（现价）、`zhangdie`（涨跌幅比例）、`latest_time`（时间）
- **信号过滤**：当评级变为 `await`（等待）时，服务端不会推送通知，仅推送有实际买卖意义的信号变化

### 6. OpenClaw 自然语言 AI 搜股的执行要求
- 若用户输入明显是选股条件，应调用 `POST /api/openclaw/stock/query`，不要误走单股量化图或单股行情诊断。
- 搜股接口返回的是股票列表，不是自由发挥的分析长文；应以结构化结果为主。
- 默认最多返回 20 只股票；即使用户要求更多，也应以接口上限为准。
- 不要自行扩充返回字段，严格使用接口定义的固定字段集合。
- 可识别的意图包括：涨幅筛选、换手率筛选、区间筛选、行业筛选、地区筛选、排序、前 N 名、排除 ST、排除北交所、排除科创板、排除创业板等。
- 如果用户明确要的是"涨停股列表"，应改走涨停股专用接口，而不是通用搜股接口。

### 7. OpenClaw 连接实时监控的推荐执行顺序
当用户要求"连接实时监控"、"配置 WebSocket 监控"、"接收实时监控信号"时，OpenClaw 应按以下顺序执行：

1. 先确认 `user_id` 和 `apikey` 已填写完整；若缺失，先提示用户去鹰眼量化站点的"用户中心" -> "开发 API"获取。
2. 可先调用一次 `POST /api/openclaw/stock/message` 做轻量鉴权验证，例如消息用 `000001` 或 `平安银行`。
3. 再调用 `GET /api/openclaw/stock/monitor/stream` 获取 `ws_url_template`。
4. 将模板中的 `{apikey}` 与 `{user_id}` 替换为真实值。
5. **优先使用原生 WebSocket 客户端能力建立连接**，不要把安装 `wscat`、`websocat`、`curl` WebSocket 插件当成默认流程。
6. WebSocket `onopen` 或等价握手成功后，就应判定为"实时监控连接成功"。
7. 连接成功后保持等待；如果暂时没有收到任何消息，不能据此判定失败。

### 8. OpenClaw 在实时监控场景下的强约束
- 不要默认先尝试安装或调用 `wscat`、`websocat`、`curl` 特殊模式；这些只可作为人工排障兜底方案，不是首选接入路径。
- 若平台本身支持 WebSocket 客户端，应直接连接 `ws_url_template` 替换后的正式地址。
- 服务端**不会**在连接建立后主动发送欢迎包、首包或心跳说明；连接后暂时沉默是正常现象。
- 只有监控信号发生变化时，服务端才会推送 JSON 数组消息。
- 当最新评级变为 `await` 时，服务端不会推送，所以"已连接但暂时无消息"通常代表当前没有有效买卖信号变化。
- 如果连接被关闭且关闭码为策略拒绝（常见为 `1008`），应优先检查：`apikey` 是否和会员中心保存的一致、`user_id` 是否正确、会员状态是否有效、会员等级是否满足 `monitor.html` 权限要求。

### 9. 连接成功后的用户反馈要求
- 一旦握手成功，应明确告诉用户："WebSocket 连接已成功建立，当前正在等待实时监控信号。"
- 如果几秒到几十秒内没有推送，应补充说明："这是正常现象，服务端只在监控信号变化时推送。"
- 如果收到 JSON 数组消息，再把结构化内容转述给用户。
- 如果连接失败，不要笼统说"连接异常"；要优先说明最可能的鉴权或权限原因。

## 返回处理
- 如果返回 `image_url`，直接把图片 URL 返回给用户
- 如果返回 `render_markdown`，优先把它作为聊天渲染内容返回给客户端
- 如果返回 `system_prompt` 和 `user_prompt`，按照下方"行情问答提示词"完成分析并返回
- 如果返回自然语言搜股结果，优先返回精简表格或结构化列表，保留字段顺序与接口一致
- 如果返回 `candidates`，提示用户从候选股票中进一步明确代码或名称

## 行情问答提示词

当 `intent=market_query` 时，API 返回 `system_prompt` 和 `user_prompt` 字段。你应按如下方式使用：

### 系统提示词（system_prompt）

```
你是一个只基于给定 TDX 股票字段和规则摘要进行推理的 A 股趋势诊断器。

任务边界：
1. 只能使用输入中明确提供的字段、数值和规则侧摘要，不得虚构新闻、公告、财报细节、资金流细节或 K 线结构。
2. 若信号互相冲突、字段缺失较多、估值无法判断或趋势不稳，必须主动降低置信度并说明原因。
3. 趋势判断只能使用"偏强 / 震荡 / 偏弱"等概率性语言，禁止"必涨""一定反转""稳健翻倍"等绝对化表述。
4. 分析重点是未来短期（1-2 周）与中期（1-3 个月）的趋势倾向、观察条件和风险，不要写成长篇泛化研报。
5. 如果某个结论的支撑不足，就明确说"当前证据不足"，不要硬给结论。

输出要求：
- 使用 Markdown。
- 严格按照以下标题输出，不要改标题名：

## 趋势判断
- 短期趋势：...
- 中期趋势：...
- 置信度：高 / 中 / 低，理由...

## 关键依据
- ...
- ...

## 风险与反证
- ...
- ...

## 操作建议
- ...
- ...

## 免责声明
- 仅基于最新 TDX 截面数据生成，不构成投资建议。

写作要求：
- 先结论，后依据。
- 每条依据尽量引用具体字段名和数值。
- 风险部分必须包含至少一个反证点；如果暂未发现极端风险，也要写"当前未见明显极端风险，但仍需继续观察 xxx"。
- 操作建议要与趋势和置信度一致，避免一边说高波动一边给出激进追涨建议。
```

### 用户提示词（user_prompt）

API 会返回基于 TDX 截面数据自动构建的用户提示词，包含以下结构化信息：
- 诊断对象（股票名称、代码、行业、地区）
- 规则侧预判（短期趋势、中期趋势、置信度、可用信号数、主要冲突）
- 行情快照（现价、涨幅、今开、最高、最低等）
- 短线动量信号（涨幅、量比、换手率、近日指标提示等）
- 中线趋势信号（20/60 日涨幅、强弱度、连涨天等）
- 资金与基本面信号（主力资金、估值、财务概况等）
- 已识别风险

请直接将 `user_prompt` 作为用户消息，配合上方系统提示词完成趋势诊断。

## 参考资料
- 接口字段说明见 [reference.md](reference.md)
- 调用示例见 [examples.md](examples.md)

