当用户需要查询 A股和H股相关数据 可通过 FinXData 获取 金融数据 API 时使用本技能,包括股票行情、股票图谱、财务报表、市场新闻、龙虎榜、限售解禁、宏观经济、异动追踪。本技能调用与 FinXData MCP 工具相同的公开 HTTP 接口。下列数据Agent可直接获取:A股股票行情、重点指数行情、股票图谱摘要、股票财报、行情复盘、市场新闻
Data & analysis
Yyqdata Stock Skill
Try itA股/港股/美股量化数据查询(数据 REST API,**非 OpenAI/LLM 兼容端点**;所有接口在 /openapi/v1/** 下,token 自查用 POST /openapi/v1/whoami)。把"看下宁德时代最近怎么样""龙虎榜""ML 选股""美债收益率"这类中文问题翻成 /openapi...
What it does
A股/港股/美股量化数据查询(数据 REST API,**非 OpenAI/LLM 兼容端点**;所有接口在 /openapi/v1/** 下,token 自查用 POST /openapi/v1/whoami)。把"看下宁德时代最近怎么样""龙虎榜""ML 选股""美债收益率"这类中文问题翻成 /openapi/v1/* REST 调用。覆盖:K线、估值、财务、板块、资金流、龙虎榜、选股、基金、宏观、期权期货、可转债、研报、外汇、票房。
The skill document
yyqdata
⚡ FIRST CALL — 第一个请求照抄这个,别探别猜
本服务是股票数据 REST API,不是 OpenAI/LLM 兼容端点。token 自查只有一个端点:
BASE="${YYQDATA_API_BASE_URL:-http://120.220.73.199}" # base_url 只到主机,不含 /openapi
TOKEN="${YYQDATA_TOKEN:?把 stk_live_ token 填进来}"
curl -sf -X POST "${BASE}/openapi/v1/whoami" -H "Authorization: Bearer ${TOKEN}"
# 返回 tier / scopes / rateLimitPerMin / llmHint,证明 token 有效 + 拿到套餐
❌ 下面这些路径全都不存在,别去试(试了只会 404):
/v1/whoami · /v1/token/info · /token/info(无前缀) · /whoami(无前缀) · /auth/whoami · /v1/auth/whoami · /v1/models · /models · /v1/chat/completions
✅ 唯一正确的 token 自查 =
POST /openapi/v1/whoami(别名/openapi/v1/token/info,仍需/openapi/v1前缀)。 ✅ 所有数据接口也都在/openapi/v1/**下(如/openapi/v1/stock/kline/daily)。 ⚠️/openapi是路径的一部分,不是 base_url 的一部分——base_url 只到http://120.220.73.199,调用时务必拼成${BASE}/openapi/v1/...。误探无前缀路径会收到一段引导 JSON(hint 字段指回正确端点)。
🔴 第一铁律:没真调过接口,禁止下任何"没有数据"的结论
这是本 skill 优先级最高的规则,凌驾于下面所有内容之上。 LLM agent 最常见、对用户伤害最大的失败就是"没查就说没有"——本节专门根除它。
- "没有 / 查不到 / 后端是空的 / 不支持"这类否定结论,必须同时满足两条:① 你已用正确端点 + camelCase 字段 + 正确日期格式实际发过请求;② 你手里有那次请求返回的
traceId(或完整{code,msg})。拿不出 traceId,就不准对用户说"没有"。 whoami通过 ≠ 数据已验证。 whoami 只证明"token 有效 + 套餐 scope + 路径配置",它不是任何业务数据的查询。看到 whoami 成功就回答"有/没有某某数据"是纯幻觉。- scope 列表里有这个维度 = 你有权限查 = 你必须真去查一次再说。 例:whoami 的
scopes含derivative,用户问期权 → 你必须真打/openapi/v1/derivative/option/*才能下结论,不能凭印象说"期权数据是空的"。 - 空响应不是终点,是自检起点。 真拿到空
data时,先走下面〔空结果 6 问自检〕逐条排除参数/日期/scope 错误,确认无误后才能向用户说"该条件下确实无数据",并附上你试过的端点 + body + traceId。 - 📌 真实教训(2026-06):某 agent 仅调了一次
whoami就对用户说"期权数据后端是空的"。实际后端option_daily有 2000 万+ 行、恰好含用户要的交易日。这是本 skill 要根除的头号失败模式——你读到这里,就别再犯。
空结果 7 问自检(说"没有"之前逐条过一遍)
-
我真的发请求了吗? —— whoami / 看文档 / 凭记忆都不算。没有 traceId = 没查。
-
字段是 camelCase 吗? ——
tradeDate不是trade_date,tsCode不是ts_code。snake_case 被忽略 → 端点拿默认值 → 看似"空"。 -
日期格式对吗? —— 必须
YYYYMMDD(宏观月度YYYYMM/ GDPYYYYQX)。带-/// ISO / 时间戳全被当未传。 -
占位符替换了吗? —— body 里不能真的出现
<最新>${...}这种字面量;必须换成真实值(日期自己算、tsCode 先 search)。 -
scope / 端点选对了吗? ——
market(国内宏观,URL/market/)vsstock.market(个股市场行为,URL/stock/market/)、单合约option/kline/dailyvs 全市场option/kline/daily-by-date别搞反;403 是没套餐(不是没数据),先看 whoami。 -
省略的枚举字段补显式值了吗? —— 个别 int 枚举字段(如
kline/daily的type)在老版本服务端缺省时不走文档默认值而静默返回空。空结果且 body 里省略过枚举字段时,补显式默认值(如type:11)重试一次。 -
返回值格式没踩坑吗? —— 以下场景数据明明有但因格式误判漏掉:
- ⚠️ K线系响应日期四种格式:
stock/kline/daily的tradeDate是 "YYYY-MM-DD" 带横杠字符串(非 YYYYMMDD!同时有time毫秒字段);stock/index/kline/daily和stock/kline/percentage-change的tradeDate是毫秒时间戳;stock/kline/limits和stock/kline/adj-factor的tradeDate是 YYYYMMDD 紧凑字符串(⚠️adj-factor虽名字带 kline 但不是毫秒,与 hk/adj-factor、us/adj-factor 不同——后两者是毫秒时间戳) - 以下端点响应日期字段是毫秒时间戳 long(不是字符串,需 ÷1000 转秒或 ÷86400000 转天对比):stock/indicator/ 整个 scope(含 roe.endDate) · financial/{income-statement,balance-sheet,cash-flow,indicator,repurchase,express,disclosure-date} annDate/endDate(⚠️ repurchase 还有 expDate 也是 ms;disclosure-date 的 preDate/actualDate/modifyDate 也是 ms) · stock/index/kline/daily · stock/index/kline/weekly · stock/index/kline/monthly · stock/index/dailybasic · stock/index/weight · stock/index/sw-industry-quo · stock/index/main/snapshot · stock/index/main/history · stock/indicator/idx-factor-pro · stock/kline/percentage-change · stock/kline/weekly-monthly(tradeDate+endDate 均 ms) · stock/kline/week-month-adj(tradeDate+endDate 均 ms) · option/kline/daily · option/kline/minutes · derivative/futures/kline/daily · derivative/futures/holding · derivative/futures/main-contract · derivative/futures/wsr · derivative/sge/kline/daily · hk/kline · hk/kline-adj · hk/adj-factor(tradeDate) · hk/minute · hk/fina-indicator endDate · hk/income/balance-sheet/cash-flow(endDate 均 ms) · us/kline(tradeDate) · us/kline-adj(tradeDate) · us/adj-factor(tradeDate) · us/income/balance-sheet/cash-flow(endDate 均 ms) · us/fina-indicator(endDate) · ths-hot(rankTime 更直观)· ths-daily · limit-step · limit-cpt-list · cyq-chips · hm-detail · forex/daily · plate(快照)/plate/list/plate/cash-flow tradeDate · plate/continue-net lastDate · plate/stocks-indicator(tradeDate 响应是 ms,入参用 YYYY-MM-DD) · intl-macro/ 全部9端点(字段 date)· fund/etf/kline/daily · fund/etf/share-history · research/report · research/report-rc(reportDate) · news/list newsTime · eco-cal(字段 date) · bak-daily(tradeDate) · bak-basic(tradeDate+listDate) · st-daily 响应(tradeDate) · st-warning(pubDate/impDate) · shareholder/ccass-hold(tradeDate) · shareholder/ccass-detail(tradeDate) · shareholder/hk-hold(tradeDate) · shareholder/ggt-daily(tradeDate) · shareholder/hsgt-list(tradeDate) · kpl/kpl-concept-cons(tradeDate) · market/tdx-daily(tradeDate) · market/tdx-index(tradeDate) · market/tdx-member(tradeDate) · market/ci-daily(tradeDate) · market/ci-index-member(inDate/outDate) · futures/weekly-detail(weekDate) · lhb/details(tradeDate)。financial/core · financial/business-segment · financial/pledge · dividend · macro系 · kline/limits · kline/adj-factor · futures/settle · futures/limit · option/contracts日期 等是字符串(YYYYMMDD 或 "YYYY-MM-DD")。⚠️ 注意例外:
mainboard/news-sentiment/moneyflow/moneyflow-dc/block-trade/cyq-perf/limit-analysis/hsgt-top10的tradeDate是 YYYYMMDD 字符串(非毫秒,属于 stock.market scope 内例外) - ⚠️
stock/kline/index-minute的响应日期字段名是tradeTime(不是tradeDate!) = 毫秒时间戳——代码里按tradeDate取值永远是 undefined/null - ⚠️
hk/tradecal和us/tradecal的响应日期字段名是calDate(不是tradeDate!) = 毫秒时间戳;同时有pretradeDate(也是毫秒)和isOpen(0/1) - ⚠️ 港股/美股复权因子字段是
cumAdjfactor,A股是adjFactor,两者字段名不同——混淆后永远拿不到正确的复权因子值 callPut定长空格补齐("C "),== "C"全漏,先trim()index-minute(idx_mins)混传tradeDate+startDate时 tradeDate 做精确 AND → 返空;只传startDate+endDate或只传tradeDatebond/yc不传日期 → 按全库无过滤返空;news/listtype传空 → 精确匹配 NULL → 空
- ⚠️ K线系响应日期四种格式:
7 条都排除、仍是空 → 才可以说"该条件下无数据",并说明最可能原因(非交易日 / 未上市 / 未入库 / 筛选过严)。
🎯 操作主循环(每轮照此走 · 这是全文骨架)
本文档近千行,别从头读到尾。把下面 7 步当成你处理每个股票请求的骨架,哪一步拿不准再跳到对应章节深读。
0. 更新检查(每天一次,静默) → 〔skill 自动更新〕
1. 备好 token+BASE,探 whoami 一次 → 落〔会话记忆卡〕,别反复探
2. 意图分类 → 选 WF-1~10 → 〔Decision tree〕/〔意图到端点〕
3. 标的规范化:search 拿 tsCode → 永不凭记忆拼码;已解析的复用记忆卡
4. 取数:camelCase + YYYYMMDD,真调接口 → 〔怎么发请求〕;铁律:没真调不下结论
5. 交付前自检门(reflection gate) → 〔交付前自检门〕
6. 交付:结论先行 + 口径 + 异常 + CSV 路径 → 〔Output contract〕
长任务(全市场扫描 / 多页拉取):边拉边落 CSV + 存进度检查点;上下文吃紧先写进度再续,别重拉 → 〔会话记忆 & 长任务行为〕。
🚀 平台快速启动(Platform Quick-Start)
Token 读取顺序(所有平台统一)
# 1. 环境变量(平台自动注入,如有)
TOKEN="${YYQDATA_TOKEN}"
BASE="${YYQDATA_API_BASE_URL:-http://120.220.73.199}"
# 2. skill 目录内的 config.json(推荐持久化方式,平台无关)
# ⚠️ 不要假设 jq 存在(很多实例没装):jq → python3 → sed 三级降级,保证一定能读出来
if [ -z "$TOKEN" ]; then
for _d in ~/.openclaw/skills/yyqdata ~/.hermes/skills/yyqdata ~/.claude/skills/yyqdata; do
_cfg="$_d/config.json"
[ -f "$_cfg" ] || continue
if command -v jq >/dev/null 2>&1; then
TOKEN=$(jq -r '.token // empty' "$_cfg" 2>/dev/null)
_b=$(jq -r '.base_url // empty' "$_cfg" 2>/dev/null)
elif command -v python3 >/dev/null 2>&1; then
TOKEN=$(python3 -c "import json,sys;print(json.load(open(sys.argv[1])).get('token') or '')" "$_cfg" 2>/dev/null)
_b=$(python3 -c "import json,sys;print(json.load(open(sys.argv[1])).get('base_url') or '')" "$_cfg" 2>/dev/null)
else
TOKEN=$(sed -n 's/.*"token"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$_cfg" | head -1)
_b=$(sed -n 's/.*"base_url"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$_cfg" | head -1)
fi
[ -n "$_b" ] && BASE="$_b"
[ -n "$TOKEN" ] && break
done
fi
# 3. 对话中用户提供(兜底)
[ -z "$TOKEN" ] && echo "⚠️ 未找到 token,请用户提供 stk_live_xxx 格式 token"
config.json 格式(放在 skill 安装目录内,不随 zip 发布):
{ "token": "stk_live_xxx", "base_url": "http://120.220.73.199" }
快速健康验证:
curl -sf -X POST "${BASE}/openapi/v1/whoami" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{}' | jq '{tier: .data.tierLabel, scopes: .data.scopes}'
A · 通用 / 手动(Claude Code / API / 其他 agent)
用户在对话中提供 stk_live_xxx token;agent 在会话内存中持有,不落盘:
TOKEN="stk_live_<用户给的值>"
BASE="http://120.220.73.199"
curl -sf -X POST "${BASE}/openapi/v1/whoami" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{}' | jq '{tier: .data.tierLabel, scopes: (.data.scopes | length)}'
D · 受限环境(仅 GET / 无 curl / 沙箱)
GET ${BASE}/openapi/v1/stock/basic/search?nameOrCode=茅台&token=${TOKEN}
任何能发 HTTP GET 的工具(web_fetch / Invoke-WebRequest / Python requests)都可用;camelCase 字段拼 query param,?token= 等价于 Bearer header。
⛔ 硬性约束(必读,违反即失败)
- 只能调用本文档明确列出的端点:所有数据请求都打到
${BASE}/openapi/v1//(GET 或 POST 皆可,见第 3 条)。不要自创路径、不要从工具名拼 URL(如/stock/api/getXxx一定 404)。拿不准端点路径 / 字段名 → 先grepreferences/api-quick-reference.md(速查表)确认再调,别凭记忆拼;速查表没有就当它不存在,不要臆造。 - 每个请求必须带 token:首选
Authorization: Bearer ${TOKEN}头;无法设请求头的环境用?token=${TOKEN}查询参数(见第 3 条)。token 两种来源:①claw 托管实例——claw 在开通时已把 token 注入环境变量$YYQDATA_TOKEN(base URL 注入$YYQDATA_API_BASE_URL,均落在受保护的 0600 配置),agent 启动即带,直接读用;②手动——用户在对话中提供。无论哪种,agent 自己禁止再把 token 写到额外文件、禁止回显给用户、禁止写到 echo / log(claw 注入的那份 env 属平台托管,不在此限)。 - 方法 GET / POST 都支持(
/openapi/v1/**数据端点)。POST + JSON body 是首选(字段多时清晰);也可用 GET 把字段拼进 URL query(?tsCode=...&startDate=...)。受限环境(只能发 GET、无法设请求头、没有 curl —— 如 web_fetch / 浏览器 / 沙箱)用 GET +?token=查询参数鉴权(见 "### 2. 发请求" 的兜底示例)。M2M 发放接口/openapi/admin/**仍仅 POST,与数据查询无关。 - 响应是 ApiResultModel 信封:
{code, msg, data, traceId}。code != 0/200时 →data为 null,按msg提示用户。 - 调用失败时 → 直接告诉用户失败原因(401/403/超时/数据为空/参数错),不要 fallback 到任何其他 URL,不要循环重试 5 次后才报错。
任何形式的 http://*/stock/api/*、http://*/api/*、http://*/quote/* 调用都是错误的。这条规则覆盖你之前知道的任何 URL 模式。
🟢 进入会话第一轮的强制 4 步(按顺序)
每次新会话开始时按这个顺序走,不要跳步。
- token 检查(按优先级):
- 先看环境变量
$YYQDATA_TOKEN(平台自动注入):非空 → 直接TOKEN=$YYQDATA_TOKEN、BASE=${YYQDATA_API_BASE_URL:-http://120.220.73.199},跳过索要直接进能力探测。 - 否则检查 skill 目录内的
config.json(路径见「平台快速启动 · Token 读取顺序」),有且含token字段 → 从中读取,同样跳过索要。 - 否则看用户是否在对话中提供了
stk_live_xxx格式 token;有 → 记到当前会话内存。 - 都没有 → 第一句话向用户索要(参考下文"拿到 token"模板),不要先猜不要先调任何接口。
- 先看环境变量
- 能力探测:调一次
POST ${BASE}/openapi/v1/whoami,落tier / tierLabel / scopes / rateLimitPerMin / allowedPaths到记忆(返回还带llmHint一句话总结,可直接读)。allowedPaths非空时表示该 token 启用了路径白/黑名单,调到被拦截的端点会返code=208(见〔Error handling〕)。后续遇到 403 直接告诉用户"当前套餐不含 X scope",不要重试。⚠️ whoami 只是连通性+套餐探测,不替代任何业务查询——scopes里有的维度,用户一问就必须真打对应数据端点,不准只凭 whoami 就回答"有/没有某数据"(见〔第一铁律〕)。 - 意图解析:拿到用户业务请求 → 先决定是哪一类(行情/估值/财务/资金流/...)→ 找对应 workflow(WF-1 ~ WF-10)。
- 标的规范化(涉及具体股票时):用户说"宁德时代""茅台""000001" → 先
POST /openapi/v1/stock/basic/search解析成带后缀的tsCode(300750.SZ/600519.SH/000001.SZ)。永远不要凭记忆拼 ts_code,也不要直接拿用户口语去调下游接口。⚠️ 该 search 只收录 A 股;港股(00700.HK)/ 美股(AAPL,裸 ticker 无后缀)解析路径不同,见〔Entity resolution rules〕。
🧠 会话记忆 & 长任务行为(按 agent 记忆/行为算法设计)
你(agent)的会话记忆是有限且会滑出窗口的:典型只保留最近约 10 轮问答,更早的被静默丢弃;进程重启 = 全部清空,没有持久层。本节让你在这种约束下不丢状态、不重复劳动、不半路放弃。(这套规则借鉴了宿主 agent 的工作记忆 / 检查点压缩 / 执行偏向算法。)
1. 维护一张「会话记忆卡」(working memory)
首次探测后,在脑内维护一个紧凑状态块,并在它可能滑出窗口时主动复述刷新:
[yyqdata 记忆卡]
TOKEN: 已持有(env/对话) BASE: http://... tier: Max rateLimit: 300/min
scopes: [stock.kline, derivative, ...] # whoami 拿到一次就够,别反复探
已解析: 宁德时代=300750.SZ 茅台=600519.SH # search 过的别再 search
最近交易日: 20260604 # lhb/latest-dates 拿到就复用
本会话已查: kline/daily(300750)、moneyflow(300750)
- 先查记忆卡,再调接口:要用的 tsCode / 最近交易日 / scope 若卡里已有,直接复用,别重复 search / whoami / latest-dates(省限频、省轮次)。
- 但别赖记忆超过窗口:拿不准卡里的值是否还在上下文里,就重查一次——数据端点有缓存,重查不额外计费。
2. 长任务:检查点 + 增量落盘(别一次性扛在脑子里)
全市场扫描 / 多页拉取(期权 daily-by-date 翻几十页、多标的对比、龙虎榜全量)这类长任务:
- 边拉边落 CSV,不要把几千行积在上下文里——上下文是你最稀缺的资源。
- 维护进度检查点:
已完成: SHFE 全量 + DCE page1-5;下一步: DCE page6,让自己(或下一轮)能续跑而非重来。 - 上下文吃紧(估算 >本轮预算 ~80%)时:先把"进度 + 已落盘路径"写进回复,再继续 / 交接,严禁从头重拉。
- 翻页有硬上限就显式告诉用户截断了多少("只取了成交额前 500,按 X 排序"),不要假装拉全了。
3. 跨会话 / 定时任务:状态必须自包含
用户让你做定时 / 重复查询("每天早上发我自选股表现")时,牢记:定时任务在全新会话里触发,没有任何历史记忆。所以——
- token 走环境变量
$YYQDATA_TOKEN(平台注入,会持久)——别把 token 写进任务提示词。 - 业务状态必须写进任务提示词自包含:已解析的 tsCode 列表、查询参数、时间窗,以及(claw / hermes 环境下)回推消息用的
conversation_id(原样回显,别解析)。 - 别依赖"我上次记得用户要看哪几只"——那段记忆在新会话里根本不存在。
4. 执行偏向(behavior)
- 能动手就别只给计划:任务可执行时,本轮就发出真实调用,不要停在"我接下来会查…"。(呼应〔第一铁律〕:结论必须由真实响应支撑。)
- 多步任务给进度:3 步以上的活,中途留一行进度("第 2/5 步:已取行情,正在拉资金流"),别长时间沉默。
- 失败优雅退化:分段拉取部分失败时,交付已成功的部分 + 明确标注哪段失败,不要因一段失败就放弃整单(见〔部分成功原则〕)。
🔄 skill 自动更新(每天第一轮静默检查一次)
每个新会话的第 0 步(在上面"4 步"之前,但只跑一次/天):
# 异步、超时 5s、失败不阻塞业务流程。
curl -fsSL --max-time 5 "https://static.yyqyx.com/skill/yyqdata.manifest.json" 2>/dev/null \
| grep -oE '"version"[[:space:]]*:[[:space:]]*"[^"]+"' \
| head -1 \
| sed -E 's/.*"version"[[:space:]]*:[[:space:]]*"([^"]+)"/\1/'
把返回的 version 与本 SKILL.md 顶部 frontmatter 的 version 字段对比:
-
相等 / 拉取失败 → 静默继续,不要打扰用户。
-
远端 > 本地 → 在当轮回复末尾追加一行温和提示,例如:
📦 提示:检测到 yyqdata 新版本
v1.2.0(当前v1.1.0)。可让用户跑bash ~/.openclaw/skills/yyqdata/update.sh升级(或回复"升级 skill"由我替您跑)。
规则:
- 每 24 小时检查一次(agent 自行记忆上次检查时间戳);同一会话内不重复检查。
- 不要为了升级而中断用户当前任务;不要自动跑
update.sh(升级是用户决策,因为会覆盖本地修改)。 - 用户明确要求升级时,可代跑
bash ${SKILL_DIR}/update.sh(SKILL_DIR= 本 SKILL.md 所在目录);失败回退到提示用户手动 curl + unzip。 update.sh自动备份旧版到yyqdata.bak-<时间戳>/,安全可回滚。
⚠️ 极易混淆的 scope(只看这一次)
market(国内宏观)和 stock.market(个股市场行为)容易混。两者都是 Pro scope,URL 前缀不同:
| Scope | 套餐 | 数据范围 | 端点前缀 |
|---|---|---|---|
market | Pro | 国内宏观(CPI/PPI/PMI/GDP/M2/LPR/Shibor/社融);news(Max)已独立 | /openapi/v1/market/... |
stock.market | Pro | 板块 / 龙虎榜 / 资金流 / 热度 / 涨跌停 / 大宗 / 集合竞价 / 同花顺概念 / 游资 / ST / 异动 | /openapi/v1/stock/market/... |
⚠️ 2026-06-08 whoami 实测:生产 scope 名仍是 stock.market(单一 scope),并非 stock.plate/lhb/moneyflow/sentiment。文档中出现的 4 个子 scope 名是未落地的设计,实际 whoami 只会返回 stock.market。
记忆口诀:stock.market 的 URL 一定带 /stock/market/;market(宏观)只带 /market/。market 是"大盘宏观背景",stock.market 是"个股市场行为"。
类似地:stock.minute(分钟 K 线,Plus)≠ stock.kline(日/周/月 K,免费);fund(基金 / ETF,Max)≠ bond(债券 / 可转债,Max)。
2026-05-22 新加 scope 易混淆点:
stock.hk(Max+,港股本身:基础 / K 线 / 财务)≠stock.shareholder下的/openapi/v1/stock/shareholder/hk-hold(港股通南向持股,仍在stock.shareholderscope)stock.intl-macro(Max,境外宏观:美债 / HIBOR / LIBOR;URL 前缀是/openapi/v1/intl-macro/*,不带stock/;scope 名仍是stock.intl-macro,2026-06-08 whoami 实测)≠marketscope 下的/openapi/v1/market/macro/*(国内宏观:CPI/PPI/GDP/M2/Shibor/LPR)stock.us/stock.hk的 K 线端点(/openapi/v1/stock/us/kline等)≠ A 股stock.kline(/openapi/v1/stock/kline/daily),路径前缀完全不同forex(Max,境外外汇 / CFD)≠ 任何 A 股相关 scope
怎么发请求(核心范式)
1. 拿到 token + base URL(优先级:环境变量 → 对话)
首次进入会话时按顺序检查:
(a) 环境变量已注入(推荐路径) 两种部署都会把 token 落到同一个环境变量,agent 侧逻辑完全一致:
- claw 托管实例:claw-server 自动开通时把 token 写进
$YYQDATA_TOKEN、base URL 写进$YYQDATA_API_BASE_URL(落在受保护的 0600 配置,agent 启动即带)。 - OpenClaw 自装用户:在 openclaw 配置里给本 skill 配
skills.entries.yyqdata.apiKey = "stk_live_xxx",openclaw 运行时会自动把它注入为$YYQDATA_TOKEN(本 skill frontmatter 已声明primaryEnv)。配一次永久生效,新会话不用重新贴 token。
先探一下:
test -n "$YYQDATA_TOKEN" && echo "env token present: ${YYQDATA_TOKEN:0:12}..."
非空 → 直接 TOKEN=$YYQDATA_TOKEN、BASE=${YYQDATA_API_BASE_URL:-http://120.220.73.199},不必向用户索要,直接进能力探测。
(b) 手动 —— 用户在对话里给 没有 env token 时:
- 用户是否已经告诉你 OpenAPI token?(格式:
stk_live_<48 字符>) - 是否给了自定义 base URL?(默认
http://120.220.73.199)
如果都没有,第一句话就向用户索要,例如:
"我需要你的 OpenAPI token 才能调用数据后端,请提供(格式
stk_live_xxx,由后端管理员签发)。如不知道哪里拿,请联系后端管理员。"
拿到后:
- 在当前会话内记忆变量
TOKEN和BASE - agent 自己禁止再写入任何额外文件(~/.bashrc / 日志 / Markdown 输出)——claw 注入的那份 env 属平台托管,不在此限
- 禁止在回复里 echo 给用户。如果要展示,至多
${TOKEN:0:12}...脱敏
2. 发请求
每个端点的 body 都是 JSON,只填业务字段——OpenAPI 表单基类(OpenApiBaseForm / OpenApiPageForm)没有任何 app 跟踪字段(不存在 userId / d / vn / appsFlyerId 这些)。看到旧文档提到这些字段是过期的,忽略。
curl -sf -X POST "${BASE}/openapi/v1/stock/basic/search" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"nameOrCode": "茅台"}'
注意:在 Bash 命令里把 ${TOKEN} 写成变量引用即可(用 agent 内存中的值替换)。绝对不要把 token 明文写进 curl 命令的 echo 输出或最终回复给用户的命令模板里。
受限环境兜底(只能 GET / 不能设 header / 没 curl):当你的运行环境只能发 GET、无法设置请求头、也没有 curl(如 web_fetch 工具、浏览器、Invoke-WebRequest 受限沙箱),把字段和 token 都拼进 URL,用任意 GET 工具直接拉:
GET ${BASE}/openapi/v1/stock/basic/search?nameOrCode=茅台&token=${TOKEN}
- 字段名与 JSON 一致(camelCase);
?token=(或?access_token=)查询参数等价于Authorization: Bearer,端点 GET / POST 都认。 - ⚠️ URL 里的 token 会进服务器 / 反向代理的访问日志,能设 header 时一律优先 header(更安全);token 仍受 IP 绑定 + scope + 限频保护,泄露也只能在绑定 IP 上用。
- 同样禁止把带 token 的完整 URL echo / 回显给用户(展示时脱敏成
...&token=${TOKEN:0:12}...)。
3. 解包 ApiResultModel + 常用 jq recipes
响应永远是这个信封:
{
"code": 0,
"msg": "success",
"data": [{"tsCode":"600519.SH","symbol":"600519","name":"贵州茅台"}],
"traceId": "..."
}
code == 0或code == 200→ 取datacode != 0/200→ 失败,把msg反馈给用户
通用提取模式(可复用):
# 提取 + 校验一次搞定
RESP=$(curl -sf -X POST "${BASE}/openapi/v1/ENDPOINT" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d "${BODY}")
[ "$(echo "$RESP" | jq -r '.code')" = "0" ] \
|| { echo "失败[$(echo "$RESP" | jq -r '.code')]: $(echo "$RESP" | jq -r '.msg')"; exit 1; }
DATA=$(echo "$RESP" | jq '.data')
常用字段提取 recipes(场景速查):
# ① search → tsCode
TSCODE=$(echo "$RESP" | jq -r '.data[0].tsCode')
# ② kline/daily → 最近收盘价(tradeDate 是 "YYYY-MM-DD" 字符串)
echo "$RESP" | jq -r '.data[] | [.tradeDate, (.close|tostring)] | @tsv' | head -5
# ③ indicator/last → 估值(tradeDate 是毫秒时间戳,需转换)
echo "$RESP" | jq -r '.data[] | [(.tradeDate/1000|strftime("%Y-%m-%d")), (.pe|tostring), (.pb|tostring)] | @tsv'
# ④ moneyflow → 主力净流入(单位:万元;tradeDate 是 YYYYMMDD 字符串,不是毫秒)
echo "$RESP" | jq -r '.data[] | [.tradeDate, (.mainNetInflow|tostring)] | @tsv'
# ⑤ 落 CSV(通用,用 data[0] 的 keys 自动生成表头)
echo "$RESP" | jq -r '(.data[0] | keys_unsorted) as $h | $h, (.data[] | [.[$h[]]] | map(tostring)) | @csv' > output.csv
⚠️
indicator/*/financial/*/fund/etf/kline/daily的tradeDate是毫秒时间戳(用÷1000|strftime);kline/daily的tradeDate是**"YYYY-MM-DD" 字符串**(直接用);macro/shibor/macro/lpr的日期字段叫date(不是tradeDate)。三种格式别混。
4. 鉴权失败的处理
- HTTP
401→ token 无效 / 已禁用 / 已过期 → 提示用户检查 token - HTTP
403→ token 合法但没这个 scope → 提示用户当前套餐不含该数据维度 - HTTP
429→ 频率超限 → 等下一分钟再试 - HTTP
5xx→ 后端故障 → 报告 traceId 给用户
随时可以调 POST /openapi/v1/whoami(不需要任何 scope)查 token 套餐 / scope / 频率上限。
数据维度索引
yyqdata 把数据按 11 大类 → 20 scope → 5 套餐 组织(2026-06-08 whoami 实测:Max token 含 18 个 scope + Ultra 的 stock.selection/tmt = 20)。详细维度见 references/data-catalog.md。
2026-05-22 扩展:原 13 scope 基础上新增 6 个境外 / 专项数据维度:
stock.research(Plus+):券商研报 / 卖方评级 / 月度金股stock.hk(Max+):港股基础 + K 线 + 财务(10 端点)stock.us(Max+):美股基础 + K 线 + 财务(9 端点)stock.intl-macro(Max+):美债收益率曲线 / HIBOR / LIBOR / 民间利率(9 端点;URL 前缀/openapi/v1/intl-macro/*,不带stock/;scope 名是stock.intl-macro)forex(Max):外汇产品 + 双边日报价(2 端点)tmt(Ultra · 内部不外卖):电影票房 / 电影/电视剧备案 / 台湾电子营收(8 端点) 端点速查见references/api-quick-reference.md。
What this skill is for
典型场景(覆盖 A 股 / 港股 / 美股 / 衍生品 / 宏观 / 多语言资产):
- 看某只A股 / 港股 / 美股的最近走势、估值、财报
- 对比多只股票或板块的表现、估值、资金关注度
- 查询龙虎榜、主力席位、资金流向
- 读取 ML / 动量 / 价值三套选股模型的最新结果并给出解释
- 期权期货分析(50ETF 期权 / 股指期权 / 商品期货 / 上金所黄金)
- 可转债评估(转股溢价率 / 纯债溢价率 / 强赎进度)
- 宏观背景(CPI / PMI / GDP / M2 / Shibor / LPR)
- 国际宏观(美债收益率曲线 / HIBOR / LIBOR / 民间借贷)
- 外汇日报价(EURUSD / USDCNH / CFD)
- 梳理某公司近期新闻 / 重要事件
- 基于股东名单反查("社保基金今年新进了哪些票")
- 快速生成"全景研究简报"
先理解用户要解决什么问题 → 选定 workflow → 再挑端点 → 取数 → 整理 → 解释 → 交付。
What this skill is NOT for
- 自动下单 / 真实交易执行
- 毫秒级 HFT 决策
- 直接给买卖点建议替代投资顾问
- 后端没有落库的全新字段(缺数据时必须说明,不要编造)
Environment check
真正请求数据之前先做:
- token 是否就绪:用户是否已在对话中给了
stk_live_*格式的 token?没有就先索要,不要假装能继续。 - 服务可达 + token 有效:调一次
POST ${BASE}/openapi/v1/whoami(不需要任何 scope),返回的data.tierLabel/data.scopes/data.rateLimitPerMin告诉你能调哪些数据;同时这一步也是连通性 / 鉴权的最佳烟雾测试。 - 结果为空时:先判断是非交易日 / 数据未入库 / 股票未上市 / 筛选过严 / 代码错误,不要直接说"接口坏了"。
烟雾测试 curl(agent 自己内部跑一次,不要把 token 明文 echo 给用户):
curl -sf -X POST "${BASE}/openapi/v1/whoami" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{}'
期望 200 + code=0 + data.tierLabel 等字段。失败按 鉴权失败的处理 提示。
📍 意图 → Workflow 快速路由(先看这里,再往下找细节)
| 用户说… | 选这个 WF | 端点组合要点 |
|---|---|---|
| "XX 最近怎么样 / 走势 / 表现" | WF-1 | search→kline/daily+indicator/last+percentage-change+moneyflow |
| "对比 A 和 B / A vs B" | WF-2 | search×N→indicator/last/by-codes+percentage-change循环 |
| "XX 财务 / 报表 / 利润" | WF-3 | search→financial/core+dividend;详细说"完整/三大表"→WF-3.1 |
| "三大表 / 完整报表 / 多季利润+现金流详细" | WF-3.1 | 四表并行:income-statement+balance-sheet+cash-flow+indicator |
| "MACD / KDJ / RSI / 均线 / 布林 / 技术指标" | WF-3.5 | 四组并行:ma-channel+oscillator+trend-volume+nine-turn |
| "板块轮动 / 哪个行业最强" | WF-4 | plate→plate/stocks-indicator+cash-flow |
| "龙虎榜 / 主力席位 / 游资" | WF-5 | lhb/latest-dates→lhb/list+lhb/detail |
| "ML选股 / BUY列表 / 今天选了哪些" | WF-6 | lhb/latest-dates→selection/ml/results(tradeDate必传!) |
| "社保/汇金/林园持仓" | WF-7 | holder/find-stocks→WF-1循环 |
| "全面研究 / 简报 / 帮我研究" | WF-8 | WF-1+WF-3+WF-4+lhb+research/report |
| "期权 / 期货 / 豆粕期权" | WF-9 | 单合约→option/kline/daily;全市场→daily-by-date |
| "港股 / 腾讯港股 / 美股苹果" | WF-10 | hk/kline-adj 或 us/kline(tsCode规则不同!) |
| "宏观 / CPI / PMI / LPR" | WF-3.7 | macro/cpi+pmi+money-supply+lpr+gdp |
| "ETF / 基金" | WF-3.6 | fund/etf/list→etf/kline/daily+portfolio+dividend |
| "可转债 / 强赎 / 溢价率" | WF-3.8 | bond/cb/list→cb/share+cb/price-chg |
意图不在上表?→ 先看〔Decision tree〕关键词匹配(含单端点快捷路径如"涨停/ST/游资/指数估值"),再看〔Intent taxonomy〕详细端点,或搜〔不要做的事〕排除陷阱。
Intent taxonomy — 意图到端点
端点路径见 api-quick-reference.md。本节用助记符指代。
1. 标的解析(必做第一步)
用户说 "宁德时代"、"茅台"、"那只创业板半导体龙头" ⇒
POST /openapi/v1/stock/basic/searchbody={"nameOrCode": "..."}→ 选出 tsCode- 多解时列候选并做最小澄清
- 北交所新旧代码对照:
POST /openapi/v1/stock/basic/bse-mapping(旧代码oCode/ 新代码nCode,⚠️ 字段大写 C,不是ocode/ncode) - 股票详情(实控人 / 主营 / 上市日期):
POST /openapi/v1/stock/basic/detailbody={"tsCode":"600519.SH"};⚠️listDate是毫秒时间戳字符串(如"998841600000"),listDateStr才是可读的YYYYMMDD;delistDate对在市股票为"None"字符串非 null - 全市场精简列表:
POST /openapi/v1/stock/basic/listbody={};仅返 tsCode/symbol/name 3 字段,无 industry/area/listDate 等
2. 行情 / 趋势
| 口语 | 默认端点 | 默认窗口 |
|---|---|---|
| "最近走势怎么样" | /openapi/v1/stock/kline/daily (type=11) | 近 20 交易日 |
| "今年以来" | 同上 | 当年初 ~ 今天 |
| "周线 / 月线" | type=12 / 13(stock/kline/daily);或用专用端点 /stock/kline/weekly-monthly(freq=W/M)/ /stock/kline/week-month-adj(含复权三套 OHLC)——⚠️ 专用端点底表增量积累,2026-06-08 前仅近几周有数据,历史稀疏时回退到 type=12/13 | 1~3 年 |
| "复权后价格" | /openapi/v1/stock/kline/adj-factor + 算 BFQ × factor | 一并查 |
| "盘中分钟 / 分时" | /openapi/v1/stock/kline/minute (freq=5min) | 1~5 交易日;行为特殊:freq≠1min 实时转发 Tushare(5 分钟缓存),freq=1min 近 30 交易日读库、更早转发。上游失败返 code=16+msg("上游数据源请求失败…请稍后重试")——这不是"没有数据",等 1 分钟重试一次;指数分钟历史用 /stock/index/kline/minutes |
| "今年涨多少" | /openapi/v1/stock/kline/percentage-change | 直接字段 |
| "大盘 / 指数 K 线" | /openapi/v1/stock/index/kline/daily | 近 60 天 |
| "指数周线 / 月线" | /openapi/v1/stock/index/kline/weekly 或 /monthly(⚠️ 响应 pctChg 是小数形式,0.0113 = 1.13%;与 daily 的百分比形式不同,需 × 100) | |
| "全球主要指数" | /openapi/v1/stock/index/global — ⚠️ 2026-06-08 实测 data:[],底表暂无数据,暂不可用,如实告知 | |
| "找指数列表" | /openapi/v1/stock/index/list | 一次性查 |
| "申万行业 PE" | /openapi/v1/stock/index/sw-industry-quo | 含 PE/PB/MV;⚠️ tsCode 必填(申万代码如 801010.SI 农林牧渔),不传返空 |
| "主要指数快照" | /openapi/v1/stock/index/main/snapshot | 缓存型;历史序列用 /main/history(body {} 即可) |
3. 估值 / 基本面
| 口语 | 端点 |
|---|---|
| "估值高不高 / PE 多少" | /openapi/v1/stock/indicator/last/by-codes |
| "估值历史走势 / PE 百分位" | /openapi/v1/stock/indicator/valuation/history |
| "ROE 历史" | /openapi/v1/stock/indicator/roe(单股 ROE 时间序列;只要最新一期才用 indicator/last) |
| "最近几个季度财务" | /openapi/v1/stock/financial/core (size=8) |
| "有没有分红" | /openapi/v1/stock/financial/dividend |
| "行业横向比较" | 两步:① POST /openapi/v1/stock/basic/classify body={} → 拿行业 id;② POST /stock/indicator/last body={id, level} → 该行业所有个股估值(分页);⚠️ /basic/classify/list 响应是分类汇总(classifyName/stockCount/swCode),不是个股列表,勿误用;若已知具体 tsCode 列表直接用 indicator/last/by-codes |
| "单只股票今天整体快照(行情+估值+财务+股本 一次拿)" | /openapi/v1/stock/market/bak-daily(31 字段宽表:OHLCV + pctChange + pe + pb + industry + area + floatMv + totalMv + avgPrice + 动量因子 strength/activity/attack/interval3/interval6;⚠️ tradeDate 是毫秒时间戳;比 indicator/last 更轻量但字段更丰富) |
| "股票基本信息快照(行业/地区/pe/eps/bvps/持股户数)" | /openapi/v1/stock/market/bak-basic(每日静态快照,24 字段:industry/area/pe/floatShare/totalShare/totalAssets/eps/bvps/pb/listDate(ms)/undp/revYoy/profitYoy/gpr/npr/holderNum;与 bak-daily 互补,bak-basic 侧重基本面属性,bak-daily 侧重量价+动量) |
3.4 财务报表深度(stock.financial scope)
| 口语 | 端点 |
|---|---|
| "茅台过去 8 季利润表" | /openapi/v1/stock/financial/income-statement |
| "资产负债表 / 商誉" | /openapi/v1/stock/financial/balance-sheet |
| "现金流好不好" | /openapi/v1/stock/financial/cash-flow |
| "ROE / 毛利率 / FCF" | /openapi/v1/stock/financial/indicator |
| "主营构成" | /openapi/v1/stock/financial/business-segment |
| "回购情况" | /openapi/v1/stock/financial/repurchase |
| "大股东质押" | /openapi/v1/stock/financial/pledge |
| "业绩预告 / 预增 / 预减 / 盈利预警" | /openapi/v1/stock/financial/forecast — ⚠️ 2026-06-08 实测 data:[](PG 迁移缺口,底表暂无数据,暂不可用),如实告知用户;不要反复重试 |
| "业绩快报 / 三季报快报 / 提前公告利润" | /openapi/v1/stock/financial/express(tsCode 必填;日期字段 annDate/endDate 均是毫秒时间戳;nIncome/nIncomeAttrP 注意大写 I;营收同比 yoySales、净利同比 yoyNetProfit) |
| "茅台几号公布财报 / 某公司财报披露时间 / 预约披露日" | /openapi/v1/stock/financial/disclosure-date(⚠️ tsCode 必填,无法不指定公司批量查"本周所有公司";所有日期字段均为毫秒时间戳;核心字段是 preDate(预计披露日);actualDate 尚未披露时为 null;modifyDate 非 null 说明公司改过预约;字段名 camelCase,不是 pre_date/actual_date) |
3.5 技术指标(stock.indicator scope)
| 口语 | 端点 | 说明 |
|---|---|---|
| "MA / BOLL" | /openapi/v1/stock/indicator/ma-channel | MA/EMA/BOLL/KTN/TAQ/EXPMA |
| "MACD/RSI/KDJ" | /openapi/v1/stock/indicator/oscillator | 振荡 + 情绪 |
| "ATR/OBV/动量" | /openapi/v1/stock/indicator/trend-volume | 趋势 + 量能 |
| "短线 19 因子" | /openapi/v1/stock/indicator/short-term | 量化短线打分 |
| "九转反转" | /openapi/v1/stock/indicator/nine-turn | DeMark 九转 |
| "估值历史百分位" | /openapi/v1/stock/indicator/valuation/history | 每天 PE/PB |
| "指数因子宽表 / 沪深300技术因子" | /openapi/v1/stock/indicator/idx-factor-pro(⚠️ 传指数 tsCode,如 "000300.SH",不是个股代码;89 列宽表,含 MA/EMA/MACD/KDJ/RSI/BOLL/OBV 等 87 个 BFQ 量化因子;tradeDate 是毫秒时间戳) | 指数专用 |
默认
adjType="bfq";量化策略请用hfq或qfq。默认窗口 60 自然日。
4. 资金流 / 席位
| 口语 | 端点 |
|---|---|
| "主力买没买" | /openapi/v1/stock/market/moneyflow |
| "板块资金榜" | /openapi/v1/stock/market/plate/cash-flow |
| "持续被资金关注" | /openapi/v1/stock/market/plate/continue-net |
| "近几天龙虎榜" | /openapi/v1/stock/market/lhb/latest-dates → /openapi/v1/stock/market/lhb/list |
| "哪些机构/游资在买" | /openapi/v1/stock/market/lhb/details |
| "北向最近买什么(个股十大)" | /openapi/v1/stock/market/hsgt-top10(⚠️ tradeDate 必填 YYYYMMDD;先用 lhb/latest-dates 取最近交易日,再传入;不传返空) |
| "北向 / 南向今天净流入多少(整体)" | /openapi/v1/stock/market/hsgt-moneyflow |
| "大宗交易" | /openapi/v1/stock/market/block-trade |
| "游资名录" | /openapi/v1/stock/market/hm-list |
| "某游资今天买了哪些票 / 游资交易明细" | /openapi/v1/stock/market/hm-detail(tradeDate YYYYMMDD;⚠️ hmOrgs 是平文本字符串不是 JSON 数组,别 JSON.parse;tradeDate 响应是毫秒时间戳) |
| "营业部 / 券商席位明细" | /openapi/v1/stock/market/broker-trade(nameKeyword 模糊搜营业部) |
| "机构买卖明细" | /openapi/v1/stock/market/institution-trading |
| "东财口径个股资金流" | /openapi/v1/stock/market/moneyflow-dc(tsCode 必填;默认口径用 moneyflow) |
4.5 异动深度(stock.market scope 第二批)
| 口语 | 端点 |
|---|---|
| "今天涨停 / 几连板" | /openapi/v1/stock/market/limit-analysis(tradeDate YYYYMMDD,limitStat="U" 涨停 / "D" 跌停) |
| "连板天梯(几连板有哪些票)" | /openapi/v1/stock/market/limit-step(tradeDate YYYYMMDD;⚠️ 响应 tradeDate 是毫秒时间戳;nums 是连板数 string) |
| "涨停最强板块 / 连板板块统计" | /openapi/v1/stock/market/limit-cpt-list(tradeDate YYYYMMDD;⚠️ 响应 tradeDate 同为毫秒时间戳;含 upStat/consNums/upNums 连板强度字段) |
| "今天热榜 / 同花顺热股" | /openapi/v1/stock/market/ths-hot(首选,同花顺热榜,涵盖 A股热股/港股/行业板块/概念板块/期货/美股;dataType 传中文标签过滤;响应 tradeDate 是毫秒时间戳,用 rankTime 字段做时间标注更直观) |
| "东财热榜" | /openapi/v1/stock/market/hot-rank(⚠️ 底表暂无数据,返回 data:[];热度需求请改用 /ths-hot(同花顺,数据最新)) |
| "盘前情绪 / 集合竞价" | /openapi/v1/stock/market/auction-open(尾盘竞价用 /auction-close) |
| "筹码胜率" | /openapi/v1/stock/market/cyq-perf(tsCode 必填;⚠️ tradeDate 是 YYYYMMDD 字符串,非毫秒——属于 stock.market scope 内例外,同 moneyflow/block-trade/mainboard) |
| "筹码分布 / 获利盘比例 / 套牢盘" | /openapi/v1/stock/market/cyq-chips(tsCode 必填;响应 tradeDate 是毫秒时间戳;每行一个价格档位:price/percent(该档筹码比例%),可拼出筹码山图) |
| "开盘啦榜单(涨停时间/主题/封板资金)" | /openapi/v1/stock/market/kpl-list(含 luTime/ldTime/status 首板/N连板/theme 主题) |
| "开盘啦题材成分 / 某题材包含哪些股票" | /openapi/v1/stock/market/kpl-concept-cons(tsCode 传题材代码;conCode = 个股代码非题材代码;description = 题材描述文字,原 Tushare desc 改名,⚠️ 别用 desc) |
| "新能源汽车概念股" | /openapi/v1/stock/market/ths-concept(tsCode 传 885xxx.TI 概念板块代码;⚠️ 与 ths-index/ths-daily 使用的 700xxx.TI 指数代码系不同) |
| "股吧热度 / 讨论度" | /openapi/v1/stock/market/guba-rank(⚠️ 底表暂空,用 ths-hot 替代) |
| "市场新闻情绪指数" | /openapi/v1/stock/market/news-sentiment(tradeDate 是 YYYYMMDD 字符串,⚠️ 非毫秒;响应字段:avgSentimentScore(-1~1)/ newsVolumeMa5/ newsSurgeRatio(量比)/ srcDiversity) |
| "大盘整体行情(成交额/涨跌家数)" | /openapi/v1/stock/market/mainboard(tradeDate 或 startDate/endDate 至少传一个;⚠️ netAmount 单位是亿元(不是元/万元);tradeDate 是 YYYYMMDD 字符串) |
| "A股大宗交易 / 哪只股票有大宗成交" | /openapi/v1/stock/market/block-trade(tsCode 必填;⚠️ vol 单位是万股(不是手!),amount 是万元;tradeDate 是 YYYYMMDD 字符串;buyer/seller 是买卖方营业部全称) |
| "今天哪些股票被 ST / 新增 ST" | /openapi/v1/stock/market/st-daily(tradeDate YYYYMMDD;响应 tradeDate 是毫秒时间戳;type 字段="ST"/"*ST" 等) |
| "某股为什么被 ST / ST 事件详情" | /openapi/v1/stock/market/st-warning(tsCode 必填;⚠️ stType 可为空字符串 "" 而非 null;pubDate/impDate 是毫秒时间戳;stExplain 是完整公告文本) |
5. 板块 / 行业
| 口语 | 端点 |
|---|---|
| "哪个板块最强" | /openapi/v1/stock/market/plate(无参快照,body {};按类型/日期筛用 plate/list) |
| "半导体板块成分" | /openapi/v1/stock/market/plate/list → /plate/stocks-indicator |
| "这只票属于哪些板块" | /openapi/v1/stock/market/plates-by-stock |
| "申万行业热力图" | /openapi/v1/stock/index/sw-heatmap — ⚠️ 2026-06-08 实测 data:[](PG 数据迁移缺口,暂无可用数据);替代:用 sw-industry-quo(日 K + 估值)手动绘制 |
| "同花顺行业指数 / THS 指数列表" | /openapi/v1/stock/market/ths-index(返回 700xxx.TI 代码系;⚠️ 与 ths-concept/ths-hot 的 885xxx.TI 代码系不同,不要混用;type 过滤:I=行业/BB=宽基/ST=风格/TH=特色) |
| "同花顺行业指数日行情" | /openapi/v1/stock/market/ths-daily(tsCode 传 700xxx.TI 代码;响应 tradeDate 是毫秒时间戳;含 open/high/low/close/vol/turnoverRate/totalMv/floatMv) |
| "通达信板块 / 通达信行业列表" | /openapi/v1/stock/market/tdx-index(板块基础信息:idxType/idxCount/totalMv/floatMv;tradeDate 是毫秒时间戳) |
| "通达信板块行情 / 近期涨跌表现" | /openapi/v1/stock/market/tdx-daily(35 字段宽表,含 OHLC/vol/pctChange/return3Day/return5Day/return10Day/return20Day/return60Day/mtd/ytd/return1Year;tradeDate 是毫秒时间戳) |
| "通达信板块成分股" | /openapi/v1/stock/market/tdx-member(tsCode 板块代码传参;字段 4 个:tradeDate(ms)/tsCode/conCode/conName) |
| "中信行业指数日行情 / CI 行业板块涨跌" | /openapi/v1/stock/market/ci-daily(tsCode 传中信行业代码,如 "CI005001.CI";响应 tradeDate 是毫秒时间戳;含 OHLC/vol/amount/change/pctChange%;scope=stock.plate) |
| "中信行业指数成分股 / CI 成分(三级体系)" | /openapi/v1/stock/market/ci-index-member(⚠️ 响应无 tradeDate 字段;完整 11 字段:l1Code/l1Name/l2Code/l2Name/l3Code/l3Name/tsCode/name/inDate(ms,纳入日期)/outDate(ms,剔除日期,可null)/isNew("Y"/"N");scope=stock.plate) |
| "指数成分股权重 / 沪深 300 权重" | /openapi/v1/stock/index/weight(indexCode 传指数代码,如 000300.SH;响应 tradeDate 是毫秒时间戳(月度发布日);输入 tradeDate 用 YYYYMMDD;每月底更新) |
| "指数估值快照 / 沪深 300 PE/PB 历史" | /openapi/v1/stock/index/dailybasic(tsCode 传指数代码;响应含 pe/pb/totalMv/freeMv;tradeDate 是毫秒时间戳) |
6. 选股模型(stock.selection scope)
| 口语 | 端点 |
|---|---|
| "ML 今天选了哪些票" | /openapi/v1/stock/selection/ml/results(可选过滤:signalType="BUY"/"HOLD"/"WATCH";minScore 0~1 阈值,0.6 为常用值) |
| "短线博弈机会" | /openapi/v1/stock/selection/momentum/results(可选过滤:minScore;minConceptCount 最少热门概念叠加数,如 3;⚠️ minConceptCount 不是 min_concept_count) |
| "长线价值 / 按申万行业找价值股" | /openapi/v1/stock/selection/value/results(可选过滤:l1Code 申万一级代码,如 "801080" 电子;minScore;⚠️ l1Code 不是 l1_code) |
| "重新跑一遍 ML / 动量 / 价值" ⚠ | /openapi/v1/stock/selection/{ml,momentum,value}/execute |
⚠️ 三个
*/results的tradeDate必传真实日期(后端 SQL 精确等值匹配):不传 = 必空(没有"默认最新"),传占位符字面量也是空——这是〔时间字段规范〕"今天→不传时间"通用规则的例外。拿最新日期:先POST /stock/market/lhb/latest-dates body={}取最近 A 股交易日填入;若当日结果为空(模型当天还没跑),回退前一交易日再试一次(最多回退 2 天,仍空才向用户报告,这是合法的日期回退,不算"循环重试")。
6.5 宏观经济(market scope,Pro)
| 口语 | 端点 | 时间格式 |
|---|---|---|
| "CPI / PPI / 通胀" | /openapi/v1/market/macro/cpi 或 /ppi | YYYYMM |
| "PMI / 景气度" | /openapi/v1/market/macro/pmi | YYYYMM |
| "GDP" | /openapi/v1/market/macro/gdp | YYYYQX |
| "M2 / 货币供应" | /openapi/v1/market/macro/money-supply | YYYYMM |
| "社融" | /openapi/v1/market/macro/social-finance | YYYYMM |
| "Shibor" | /openapi/v1/market/macro/shibor | YYYYMMDD |
| "LPR / 降息" | /openapi/v1/market/macro/lpr | YYYYMMDD |
| "宏观月度总览(一次拿全)" | /openapi/v1/market/macro/monthly | YYYYMM |
| "政策新闻 / 资讯" | /openapi/v1/market/news/list | YYYYMMDD(⚠️ 此端点属 news scope,需 Max 套餐;正式政策文件用 /market/macro/policy-npr,属 market scope,Pro 可用) |
| "本周有哪些经济数据 / 财经日历 / 重要事件" | /openapi/v1/market/macro/eco-cal | 请求 startDate/endDate YYYYMMDD;⚠️ 响应 date 字段是毫秒时间戳(不是 YYYYMMDD!)、time 是 "HH:mm" 字符串;country 是事件分类代码("economic_activity" 等),按国家过滤用 currency("CNY" 筛中国,"USD" 筛美国) |
6.7 港股(stock.hk scope,Max+)
| 口语 | 端点 | 备注 |
|---|---|---|
| "腾讯 / 港股代码列表" | /openapi/v1/stock/hk/basic | 可选 listStatus=L 只看上市中 |
| "港股交易日历" | /openapi/v1/stock/hk/tradecal | 节假日 ≠ A 股;⚠️ 响应日期字段是 calDate(不是 tradeDate!),毫秒时间戳 |
| "港股 K 线" | /openapi/v1/stock/hk/kline 或 /kline-adj | kline-adj 含复权 + 估值;⚠️ hk/kline 的 vol 单位是股(不是万手),amount 单位是港元(不是千元);kline-adj 的涨跌幅字段是 pctChange(而非 pctChg) |
| "港股复权因子" | /openapi/v1/stock/hk/adj-factor | HFQ = BFQ × cumAdjfactor / 最新(注意:港股/美股 adj-factor 字段是 cumAdjfactor,A股 adj-factor 字段是 adjFactor,两者不同) |
| "港股分钟 K" | /openapi/v1/stock/hk/minute | ⚠ 时间格式 YYYY-MM-DD HH:mm:ss |
| "港股利润 / 资产 / 现金流" | /openapi/v1/stock/hk/income / /balance-sheet / /cash-flow | long format,透视方法见 WF-10 |
| "港股财务指标" | /openapi/v1/stock/hk/fina-indicator | 36 列,可选 reportType 过滤(值用 "2024年中报" 完整串,不传就别传) |
⚠️ 港股三大表(income/balance-sheet/cash-flow)和 fina-indicator 采集覆盖约前 100 只港股(按代码字母序),中小盘港股返
data:[]是覆盖不足,不是端点坏了。 港股通南向持股不在此 scope(在stock.shareholder→/openapi/v1/stock/shareholder/hk-hold),别混。
6.8 美股(stock.us scope,Max+)
| 口语 | 端点 | 备注 |
|---|---|---|
| "苹果 / 美股列表" | /openapi/v1/stock/us/basic | 可选 classify=ADR/GDR/EQ |
| "美股交易日历" | /openapi/v1/stock/us/tradecal | 与 A 股 / 港股全不同;⚠️ 响应日期字段是 calDate(不是 tradeDate!),毫秒时间戳 |
| "美股 K 线" | /openapi/v1/stock/us/kline 或 /kline-adj | kline 已含 pe/pb 估值 + vwap;⚠️ kline-adj 无 pe/pb(需估值改用 kline,见 ❌ "查美股估值" entry) |
| "美股复权因子" | /openapi/v1/stock/us/adj-factor | |
| "美股利润 / 资产 / 现金流" | /openapi/v1/stock/us/income / /balance-sheet / /cash-flow | long format,透视方法见 WF-10 |
| "美股财务指标" | /openapi/v1/stock/us/fina-indicator | 29 列,可选 reportType 过滤(值用 "2025/Q1" / "2023/FY" 形式) |
6.9 研报 / 卖方评级(stock.research scope,Plus+)
| 口语 | 端点 |
|---|---|
| "茅台最近有什么研报" | /openapi/v1/stock/research/report(可选 org 过滤券商) |
| "卖方一致预期 / 目标价" | /openapi/v1/stock/research/report-rc(含 eps/pe/roe/maxPrice/minPrice/rating;响应日期字段名是 reportDate 不是 tradeDate) |
| "本月金股" | /openapi/v1/stock/research/broker-recommend(按 month 比对 startDate[:6]) |
⚠️ 采集覆盖仅约 170 只股票:库内研报/预测数据靠 polling 每日增量采集,存量依赖 Tushare 权限。旗舰标的(600519.SH/000858.SZ 等)实测
data:[];tsCode不传则按全库返回可验证端点是否正常。
6.10 国际宏观(stock.intl-macro scope,Max+;路径前缀 /openapi/v1/intl-macro/... 不带 stock/)
⚠️ 9 个端点响应日期字段均是
date(毫秒时间戳 long),不是tradeDate;展示时需÷1000|strftime。与国内宏观(macro/shibor/macro/lpr的date是 YYYYMMDD 字符串)格式不同。
| 口语 | 端点 | 说明 |
|---|---|---|
| "美债收益率曲线 / 期限利差" | /openapi/v1/intl-macro/us-tycr | 13 期限:1M-30Y |
| "美债实际收益率 / TIPS" | /openapi/v1/intl-macro/us-trycr | 5Y-30Y;与 tycr 同期限相减 ≈ 隐含通胀 |
| "美国短期国债" | /openapi/v1/intl-macro/us-tbr | 4w-52w,Bd / Ce 两口径;⚠️ w17Bd/w17Ce 常为 null,正常现象 |
| "美债长端 LTC / CMT" | /openapi/v1/intl-macro/us-tltr 或 /us-trltr | 30Y 缺失时段的替代基准 |
| "HIBOR" | /openapi/v1/intl-macro/hibor | 港元同业,8 期限 |
| "LIBOR" | /openapi/v1/intl-macro/libor | 可选 currType=USD/EUR/JPY/GBP/CHF;⚠ 2023-06 后多数已退役 |
| "民间利率" | /openapi/v1/intl-macro/gz-index 或 /wz-index | 广州 / 温州民间借贷 |
境内宏观(CPI/PPI/GDP/M2/Shibor/LPR)在
marketscope,不在这里。
6.11 外汇(forex scope,Max)
| 口语 | 端点 |
|---|---|
| "外汇产品 / EURUSD 元数据" | /openapi/v1/forex/obasic(tsCode 格式 "USDCNH.FXCM" / "EURUSD.FXCM";可按 classify="FX"/"CFD" 或 exchange="FXCM"/"OANDA" 过滤) |
| "外汇日报价" | /openapi/v1/forex/daily(bid/ask 双边 OHLC;点差 = askClose − bidClose;⚠️ 响应 tradeDate 是毫秒时间戳) |
6.12 TMT 媒体(tmt scope,Ultra · 内部不外卖)
| 口语 | 端点 | 说明 |
|---|---|---|
| "今日票房" | /openapi/v1/tmt/bo-daily | date DESC + rank ASC |
| "本周 / 本月票房" | /openapi/v1/tmt/bo-weekly 或 /bo-monthly | weekly date=周一 |
| "影院上座率" | /openapi/v1/tmt/bo-cinema | 可选 cName 影院名 |
| "电影 / 电视剧备案" | /openapi/v1/tmt/film-record 或 /teleplay-record | 备案号 / 名称模糊匹配 |
| "台湾电子月营收" | /openapi/v1/tmt/twincome 或 /twincome-detail | date 格式 YYYYMM |
7. 新闻 / 事件(news scope,Max+)
| 口语 | 端点 |
|---|---|
| "最近有啥消息" | /openapi/v1/market/news/list(startDate=近7天;titleKeyword 关键词过滤;⚠️ 响应 title 可能为 null,展示时优先用 newsTimeStr(可读字符串如 "2026-06-07 22:12:08")而非 newsTime(毫秒时间戳)) |
| "新闻来源字典(sina/cls/eastmoney 对应什么名字)" | /openapi/v1/market/news/types(⚠️ 返回来源 source 字典,字段 code/displayName/description;code 对应 news/list 响应的 src 字段,不是 type 整数值的字典) |
8. 股东视角(stock.shareholder scope)
| 口语 | 端点 |
|---|---|
| "社保 / 汇金 持了啥" | /openapi/v1/stock/shareholder/holder/find-stocks |
| "某股东最新持仓明细" | /openapi/v1/stock/shareholder/holder/holdings |
| "股东类别字典" | /openapi/v1/stock/shareholder/classify/list — ⚠️ 底表暂无数据(PG 迁移后未回填),返回空列表;股东类别信息改从 holder/holdings 响应的 holderCategory/holderType 字段取 |
| "腾讯 / 港股 CCASS 持股汇总(机构数/持仓比)" | /openapi/v1/stock/shareholder/ccass-hold(tsCode 传港股代码如 "00700.HK";响应 tradeDate 毫秒时间戳;含 shareholding/holdNums/holdRatio) |
| "CCASS 持股明细 / 哪些机构持有腾讯" | /openapi/v1/stock/shareholder/ccass-detail(tsCode 传港股代码;每行一个 CCASS 参与者:colParticipantId/colParticipantName/colShareholding/colShareholdingPercent) |
| "北向资金今天持有哪些 A 股 / 陆股通持仓" | /openapi/v1/stock/shareholder/hk-hold(exchange=SH 沪股通北向 / exchange=SZ 深股通 |
Related skills
A股 / 港股 / 美股 / 基金 / 期货 / 期权 / 债券 / 宏观 数据研究技能. 提供 235+ 个数据接口, 后端走 StockToday 自定义加速 (https://tushare.citydata.club/), 接口命名跟 tushare 100% 兼容. 适用于把"看走势 / 查财报 / 比...
Free no-API-key A-share ecosystem data query skill for OpenClaw and Hermes. Use when users ask for A股、沪深京股票、指数、ETF/LOF、可转债、行业/概念板块、实时行情、K线、涨跌排行、涨停/跌停/炸板、资金流、...
当用户需要查询 A股和H股相关数据 可通过 FinXData 获取 金融数据 API 时使用本技能,包括股票行情、股票图谱、财务报表、市场新闻、龙虎榜、限售解禁、宏观经济、异动追踪。本技能调用与 FinXData MCP 工具相同的公开 HTTP 接口。下列数据Agent可直接获取:A股股票行情、重点指数行情、股票图谱摘要、股票财报、行情复盘、市场新闻
Get A-share, Hong Kong, and US stock market data via unified HTTP GET calls to FTShare-market-data endpoints.
股市/股票/行情/股价/涨跌/大盘/指数/个股分析——金融/投资/股票/基金/ETF/板块/指数/宏观/外汇/大宗商品/财报/估值/持仓/交易/仓位/量化/因子/回测/选股/期权/衍生品/投行建模/技术指标/行情监控/预警——内置研究框架(红线/检索策略/数据口径/50+方法论 references/scripts)、A股量化数据引擎(12层数据源·bin/quant.py)、多市场数据层(港股/期货/期权/宏观/公告事件·bin/cn/*.py)与 8 个研报写作工作流(读年报/可比公司/深度报告/业绩快评/调研纪要/行业研究/晨会纪要/研报摘要·references/research-wo