Skills 问财选ETF
同花顺智能选ETF skill。根据行情、跟踪指数基本面、规模、风格类型等条件筛选ETF。返回符合条件的相关ETF数据。当用户询问ETF筛选问题时,必须使用此技能。
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/bensema/iwencai-skill-etf" ~/.claude/skills/clawdbot-skills-etf && rm -rf "$T"
manifest:
skills/bensema/iwencai-skill-etf/SKILL.mdsource content
问财选ETF 使用指南
技能概述
本技能提供ETF智能筛选能力,通过自然语言查询支持:
- 行情指标筛选(价格、涨跌幅、成交量、换手率等)
- 跟踪指数筛选(沪深300、中证500、上证50、创业板指等)
- 基本面筛选(估值、费率、跟踪误差等)
- 规模筛选(资产规模、份额变化等)
- 风格类型筛选(成长、价值、平衡等)
- 多条件组合筛选
核心处理流程
步骤 1: 接收用户 Query
接收用户的自然语言ETF筛选请求,分析用户意图。
步骤 2: Query 改写
将用户问句适当改写为标准的金融查询问句,保持原意不变:
改写规则:
- 保留用户核心意图(如:沪深300ETF、规模大于10亿等)
- 将口语化表达转为标准金融术语(如"给我选一个ETF" → "ETF有哪些")
- 适当简化过于复杂的复合条件
- 改写后需保持原意不变
思维链拆解(如果需要): 根据用户需求自行决定是否拆解思维链:
- 单次查询:如果用户问题可以直接用单个 query 回答,直接进入下一步
- 多次查询:如果用户问题涉及多个独立的问句,需要拆分为多个标准 query 分别调用接口。
步骤 3: API 调用
调用金融查询接口获取数据,支持分页参数:
# 使用 Python 标准库 import urllib.request import json import os url = "https://openapi.iwencai.com/v1/query2data" headers = { "Authorization": f"Bearer {os.environ['IWENCAI_API_KEY']}", "Content-Type": "application/json" } payload = { "query": "改写后的查询语句", "source": "test", "page": "1", "limit": "10", "is_cache": "1", "expand_index": "true" } data = json.dumps(payload).encode("utf-8") request = urllib.request.Request(url, data=data, headers=headers, method="POST") response = urllib.request.urlopen(request, timeout=30) result = json.loads(response.read().decode("utf-8")) datas = result.get("datas", [])
步骤 4: 空数据处理
如果
datas 为空或无数据,适当放宽或简化查询条件后重新请求(最多尝试2次):
- 首次重试:去掉过于苛刻的条件,保留核心筛选条件
- 二次重试:进一步放宽条件或使用更通用的表述
每次重试都算作一次改写,最终返回时需说明最终使用的查询问句。
步骤 5: 数据解析
解析返回的
datas 数组,提取相关指标:
for item in datas: # 根据查询类型提取相应字段
步骤 6: 数据扩展决策
skill 需要自行决策当前数据是否足够回答用户问题:
- 如果数据完整:直接返回格式化后的结果
- 如果需要更多背景信息:可以调用其他金融工具或者搜索工具获取相关资讯
步骤 7: 回答用户
组织语言回答用户问题,确保:
- 结果清晰易懂
- 如果改写了问句,需特别说明最终使用的查询问句
- 必须强调数据来源于同花顺问财
接口地址
IWENCAI_API_URL
认证方式
- 请求头:
Authorization: Bearer {IWENCAI_API_KEY} - 环境变量:
IWENCAI_API_KEY
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| query | STRING | 是 | 用户问句 |
| source | STRING | 否 | 来源,默认值:test |
| page | STRING | 否 | 分页参数,默认值:1 |
| limit | STRING | 否 | 分页参数,默认值:10 |
| is_cache | STRING | 否 | 缓存参数,默认值:1 |
| expand_index | STRING | 否 | 是否展开指数,默认值:true |
响应参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| datas | ARRAY | 金融数据列表,对象数组 |
响应示例:
{ "datas": [ {"ETF代码": "510300.SH", "ETF简称": "华泰柏瑞沪深300ETF", "涨跌幅": 1.25}, {"ETF代码": "159919.SZ", "ETF简称": "嘉实沪深300ETF", "涨跌幅": 1.18} ] }
CLI 使用方式
命令行参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| STRING | 是 | 直接传入查询字符串 |
| STRING | 否 | 分页参数,默认值:1 |
| STRING | 否 | 每页条数,默认值:10 |
| STRING | 否 | 缓存参数,默认值:1 |
| STRING | 否 | API密钥(默认从环境变量读取) |
使用示例
# 直接查询(默认分页10条) python scripts/cli.py --query "沪深300ETF有哪些?" # 指定分页参数 python scripts/cli.py --query "规模最大的ETF" --page "1" --limit "20" # 指定API密钥 python scripts/cli.py --query "创业板ETF" --api-key "your-key"
数据来源标注
重要提示:
- 引用同花顺数据时,必须强调数据来源于同花顺问财
- 如果没有查询到数据,提示用户可以到同花顺问财 web端查询:https://www.iwencai.com/unifiedwap/chat
错误处理
- API调用失败:给出友好错误提示
- 无数据返回:引导用户访问同花顺问财(https://www.iwencai.com/unifiedwap/chat)
- 最多重试2次逐步放宽条件
代码结构
hithink-etf-selector/ ├── SKILL.md # Skill 配置文件 ├── references/ │ ├── api.md # API 接口文档 │ └── requirement.md # 构建要求文档 └── scripts/ └── cli.py # CLI 入口(单一脚本,内含API调用和数据处理)