Data & analysis

Yyqdata Stock Skill

Try it

A股/港股/美股量化数据查询(数据 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 的 scopesderivative,用户问期权 → 你必须真打 /openapi/v1/derivative/option/* 才能下结论,不能凭印象说"期权数据是空的"。
  • 空响应不是终点,是自检起点。 真拿到空 data 时,先走下面〔空结果 6 问自检〕逐条排除参数/日期/scope 错误,确认无误后才能向用户说"该条件下确实无数据",并附上你试过的端点 + body + traceId。
  • 📌 真实教训(2026-06):某 agent 仅调了一次 whoami 就对用户说"期权数据后端是空的"。实际后端 option_daily2000 万+ 行、恰好含用户要的交易日。这是本 skill 要根除的头号失败模式——你读到这里,就别再犯。

空结果 7 问自检(说"没有"之前逐条过一遍)

  1. 我真的发请求了吗? —— whoami / 看文档 / 凭记忆都不算。没有 traceId = 没查。

  2. 字段是 camelCase 吗? —— tradeDate 不是 trade_datetsCode 不是 ts_code。snake_case 被忽略 → 端点拿默认值 → 看似"空"。

  3. 日期格式对吗? —— 必须 YYYYMMDD(宏观月度 YYYYMM / GDP YYYYQX)。带 - / / / ISO / 时间戳全被当未传。

  4. 占位符替换了吗? —— body 里不能真的出现 <最新> ${...} 这种字面量;必须换成真实值(日期自己算、tsCode 先 search)。

  5. scope / 端点选对了吗? —— market(国内宏观,URL /market/)vs stock.market(个股市场行为,URL /stock/market/)、单合约 option/kline/daily vs 全市场 option/kline/daily-by-date 别搞反;403 是没套餐(不是没数据),先看 whoami。

  6. 省略的枚举字段补显式值了吗? —— 个别 int 枚举字段(如 kline/dailytype)在老版本服务端缺省时不走文档默认值而静默返回空。空结果且 body 里省略过枚举字段时,补显式默认值(如 type:11)重试一次。

  7. 返回值格式没踩坑吗? —— 以下场景数据明明有但因格式误判漏掉:

    • ⚠️ K线系响应日期四种格式stock/kline/dailytradeDate"YYYY-MM-DD" 带横杠字符串(非 YYYYMMDD!同时有 time 毫秒字段);stock/index/kline/dailystock/kline/percentage-changetradeDate毫秒时间戳stock/kline/limitsstock/kline/adj-factortradeDateYYYYMMDD 紧凑字符串(⚠️ 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-top10tradeDate 是 YYYYMMDD 字符串(非毫秒,属于 stock.market scope 内例外)
    • ⚠️ stock/kline/index-minute 的响应日期字段名是 tradeTime(不是 tradeDate!) = 毫秒时间戳——代码里按 tradeDate 取值永远是 undefined/null
    • ⚠️ hk/tradecalus/tradecal 的响应日期字段名是 calDate(不是 tradeDate!) = 毫秒时间戳;同时有 pretradeDate(也是毫秒)和 isOpen(0/1)
    • ⚠️ 港股/美股复权因子字段是 cumAdjfactor,A股是 adjFactor,两者字段名不同——混淆后永远拿不到正确的复权因子值
    • callPut 定长空格补齐("C "),== "C" 全漏,先 trim()
    • index-minute(idx_mins)混传 tradeDate + startDate 时 tradeDate 做精确 AND → 返空;只传 startDate+endDate 或只传 tradeDate
    • bond/yc 不传日期 → 按全库无过滤返空;news/list type 传空 → 精确匹配 NULL → 空

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。


⛔ 硬性约束(必读,违反即失败)

  1. 只能调用本文档明确列出的端点:所有数据请求都打到 ${BASE}/openapi/v1//(GET 或 POST 皆可,见第 3 条)。不要自创路径、不要从工具名拼 URL(如 /stock/api/getXxx 一定 404)。拿不准端点路径 / 字段名 → 先 grep references/api-quick-reference.md(速查表)确认再调,别凭记忆拼;速查表没有就当它不存在,不要臆造。
  2. 每个请求必须带 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 属平台托管,不在此限)。
  3. 方法 GET / POST 都支持/openapi/v1/** 数据端点)。POST + JSON body 是首选(字段多时清晰);也可用 GET 把字段拼进 URL query(?tsCode=...&startDate=...)。受限环境(只能发 GET、无法设请求头、没有 curl —— 如 web_fetch / 浏览器 / 沙箱)用 GET + ?token= 查询参数鉴权(见 "### 2. 发请求" 的兜底示例)。M2M 发放接口 /openapi/admin/** 仍仅 POST,与数据查询无关。
  4. 响应是 ApiResultModel 信封{code, msg, data, traceId}code != 0/200 时 → data 为 null,按 msg 提示用户。
  5. 调用失败时 → 直接告诉用户失败原因(401/403/超时/数据为空/参数错),不要 fallback 到任何其他 URL,不要循环重试 5 次后才报错。

任何形式的 http://*/stock/api/*http://*/api/*http://*/quote/* 调用都是错误的。这条规则覆盖你之前知道的任何 URL 模式

🟢 进入会话第一轮的强制 4 步(按顺序)

每次新会话开始时按这个顺序走,不要跳步。

  1. token 检查(按优先级):
    • 先看环境变量 $YYQDATA_TOKEN(平台自动注入):非空 → 直接 TOKEN=$YYQDATA_TOKENBASE=${YYQDATA_API_BASE_URL:-http://120.220.73.199}跳过索要直接进能力探测。
    • 否则检查 skill 目录内的 config.json(路径见「平台快速启动 · Token 读取顺序」),有且含 token 字段 → 从中读取,同样跳过索要
    • 否则看用户是否在对话中提供了 stk_live_xxx 格式 token;有 → 记到当前会话内存。
    • 都没有 → 第一句话向用户索要(参考下文"拿到 token"模板),不要先猜不要先调任何接口
  2. 能力探测:调一次 POST ${BASE}/openapi/v1/whoami,落 tier / tierLabel / scopes / rateLimitPerMin / allowedPaths 到记忆(返回还带 llmHint 一句话总结,可直接读)。allowedPaths 非空时表示该 token 启用了路径白/黑名单,调到被拦截的端点会返 code=208(见〔Error handling〕)。后续遇到 403 直接告诉用户"当前套餐不含 X scope",不要重试。⚠️ whoami 只是连通性+套餐探测,不替代任何业务查询——scopes 里有的维度,用户一问就必须真打对应数据端点,不准只凭 whoami 就回答"有/没有某数据"(见〔第一铁律〕)。
  3. 意图解析:拿到用户业务请求 → 先决定是哪一类(行情/估值/财务/资金流/...)→ 找对应 workflow(WF-1 ~ WF-10)。
  4. 标的规范化(涉及具体股票时):用户说"宁德时代""茅台""000001" → 先 POST /openapi/v1/stock/basic/search 解析成带后缀的 tsCode300750.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.shSKILL_DIR = 本 SKILL.md 所在目录);失败回退到提示用户手动 curl + unzip。
  • update.sh 自动备份旧版到 yyqdata.bak-<时间戳>/,安全可回滚。

⚠️ 极易混淆的 scope(只看这一次)

market(国内宏观)和 stock.market(个股市场行为)容易混。两者都是 Pro scope,URL 前缀不同

Scope套餐数据范围端点前缀
marketPro国内宏观(CPI/PPI/PMI/GDP/M2/LPR/Shibor/社融);news(Max)已独立/openapi/v1/market/...
stock.marketPro板块 / 龙虎榜 / 资金流 / 热度 / 涨跌停 / 大宗 / 集合竞价 / 同花顺概念 / 游资 / 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.shareholder scope)
  • stock.intl-macroMax境外宏观:美债 / HIBOR / LIBOR;URL 前缀是 /openapi/v1/intl-macro/*,不带 stock/;scope 名仍是 stock.intl-macro,2026-06-08 whoami 实测)≠ market scope 下的 /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),路径前缀完全不同
  • forexMax,境外外汇 / 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_TOKENBASE=${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,由后端管理员签发)。如不知道哪里拿,请联系后端管理员。"

拿到后:

  • 在当前会话内记忆变量 TOKENBASE
  • 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 == 0code == 200 → 取 data
  • code != 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/dailytradeDate毫秒时间戳(用 ÷1000|strftime);kline/dailytradeDate 是**"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-macroMax+):美债收益率曲线 / 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

真正请求数据之前先做:

  1. token 是否就绪:用户是否已在对话中给了 stk_live_* 格式的 token?没有就先索要,不要假装能继续。
  2. 服务可达 + token 有效:调一次 POST ${BASE}/openapi/v1/whoami(不需要任何 scope),返回的 data.tierLabel / data.scopes / data.rateLimitPerMin 告诉你能调哪些数据;同时这一步也是连通性 / 鉴权的最佳烟雾测试。
  3. 结果为空时:先判断是非交易日 / 数据未入库 / 股票未上市 / 筛选过严 / 代码错误,不要直接说"接口坏了"。

烟雾测试 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-1search→kline/daily+indicator/last+percentage-change+moneyflow
"对比 A 和 B / A vs B"WF-2search×N→indicator/last/by-codes+percentage-change循环
"XX 财务 / 报表 / 利润"WF-3search→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-4plate→plate/stocks-indicator+cash-flow
"龙虎榜 / 主力席位 / 游资"WF-5lhb/latest-dates→lhb/list+lhb/detail
"ML选股 / BUY列表 / 今天选了哪些"WF-6lhb/latest-dates→selection/ml/results(tradeDate必传!)
"社保/汇金/林园持仓"WF-7holder/find-stocks→WF-1循环
"全面研究 / 简报 / 帮我研究"WF-8WF-1+WF-3+WF-4+lhb+research/report
"期权 / 期货 / 豆粕期权"WF-9单合约→option/kline/daily;全市场→daily-by-date
"港股 / 腾讯港股 / 美股苹果"WF-10hk/kline-adj 或 us/kline(tsCode规则不同!)
"宏观 / CPI / PMI / LPR"WF-3.7macro/cpi+pmi+money-supply+lpr+gdp
"ETF / 基金"WF-3.6fund/etf/list→etf/kline/daily+portfolio+dividend
"可转债 / 强赎 / 溢价率"WF-3.8bond/cb/list→cb/share+cb/price-chg

意图不在上表?→ 先看〔Decision tree〕关键词匹配(含单端点快捷路径如"涨停/ST/游资/指数估值"),再看〔Intent taxonomy〕详细端点,或搜〔不要做的事〕排除陷阱。

Intent taxonomy — 意图到端点

端点路径见 api-quick-reference.md。本节用助记符指代。

1. 标的解析(必做第一步)

用户说 "宁德时代"、"茅台"、"那只创业板半导体龙头" ⇒

  • POST /openapi/v1/stock/basic/search body={"nameOrCode": "..."} → 选出 tsCode
  • 多解时列候选并做最小澄清
  • 北交所新旧代码对照POST /openapi/v1/stock/basic/bse-mapping(旧代码 oCode / 新代码 nCode,⚠️ 字段大写 C,不是 ocode/ncode
  • 股票详情(实控人 / 主营 / 上市日期):POST /openapi/v1/stock/basic/detail body={"tsCode":"600519.SH"};⚠️ listDate毫秒时间戳字符串(如 "998841600000"),listDateStr 才是可读的 YYYYMMDDdelistDate 对在市股票为 "None" 字符串非 null
  • 全市场精简列表POST /openapi/v1/stock/basic/list body={};仅返 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/131~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/expresstsCode 必填;日期字段 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-channelMA/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-turnDeMark 九转
"估值历史百分位"/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";量化策略请用 hfqqfq。默认窗口 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-detailtradeDate YYYYMMDD;⚠️ hmOrgs平文本字符串不是 JSON 数组,别 JSON.parse;tradeDate 响应是毫秒时间戳)
"营业部 / 券商席位明细"/openapi/v1/stock/market/broker-tradenameKeyword 模糊搜营业部)
"机构买卖明细"/openapi/v1/stock/market/institution-trading
"东财口径个股资金流"/openapi/v1/stock/market/moneyflow-dc(tsCode 必填;默认口径用 moneyflow

4.5 异动深度(stock.market scope 第二批)

口语端点
"今天涨停 / 几连板"/openapi/v1/stock/market/limit-analysistradeDate YYYYMMDD,limitStat="U" 涨停 / "D" 跌停)
"连板天梯(几连板有哪些票)"/openapi/v1/stock/market/limit-steptradeDate YYYYMMDD;⚠️ 响应 tradeDate 是毫秒时间戳;nums 是连板数 string)
"涨停最强板块 / 连板板块统计"/openapi/v1/stock/market/limit-cpt-listtradeDate 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-perftsCode 必填;⚠️ tradeDate 是 YYYYMMDD 字符串,非毫秒——属于 stock.market scope 内例外,同 moneyflow/block-trade/mainboard)
"筹码分布 / 获利盘比例 / 套牢盘"/openapi/v1/stock/market/cyq-chipstsCode 必填;响应 tradeDate 是毫秒时间戳;每行一个价格档位:price/percent(该档筹码比例%),可拼出筹码山图)
"开盘啦榜单(涨停时间/主题/封板资金)"/openapi/v1/stock/market/kpl-list(含 luTime/ldTime/status 首板/N连板/theme 主题)
"开盘啦题材成分 / 某题材包含哪些股票"/openapi/v1/stock/market/kpl-concept-constsCode 传题材代码;conCode = 个股代码非题材代码;description = 题材描述文字,原 Tushare desc 改名,⚠️ 别用 desc
"新能源汽车概念股"/openapi/v1/stock/market/ths-concepttsCode885xxx.TI 概念板块代码;⚠️ 与 ths-index/ths-daily 使用的 700xxx.TI 指数代码系不同
"股吧热度 / 讨论度"/openapi/v1/stock/market/guba-rank(⚠️ 底表暂空,用 ths-hot 替代)
"市场新闻情绪指数"/openapi/v1/stock/market/news-sentimenttradeDate 是 YYYYMMDD 字符串,⚠️ 非毫秒;响应字段:avgSentimentScore(-1~1)/ newsVolumeMa5/ newsSurgeRatio(量比)/ srcDiversity
"大盘整体行情(成交额/涨跌家数)"/openapi/v1/stock/market/mainboard(tradeDate 或 startDate/endDate 至少传一个;⚠️ netAmount 单位是亿元(不是元/万元);tradeDate 是 YYYYMMDD 字符串)
"A股大宗交易 / 哪只股票有大宗成交"/openapi/v1/stock/market/block-tradetsCode 必填;⚠️ vol 单位是万股(不是手!),amount万元tradeDate 是 YYYYMMDD 字符串;buyer/seller 是买卖方营业部全称)
"今天哪些股票被 ST / 新增 ST"/openapi/v1/stock/market/st-dailytradeDate YYYYMMDD;响应 tradeDate 是毫秒时间戳;type 字段="ST"/"*ST" 等)
"某股为什么被 ST / ST 事件详情"/openapi/v1/stock/market/st-warningtsCode 必填;⚠️ 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-hot885xxx.TI 代码系不同,不要混用;type 过滤:I=行业/BB=宽基/ST=风格/TH=特色)
"同花顺行业指数日行情"/openapi/v1/stock/market/ths-dailytsCode700xxx.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-membertsCode 板块代码传参;字段 4 个:tradeDate(ms)/tsCode/conCode/conName)
"中信行业指数日行情 / CI 行业板块涨跌"/openapi/v1/stock/market/ci-dailytsCode 传中信行业代码,如 "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/weightindexCode 传指数代码,如 000300.SH;响应 tradeDate毫秒时间戳(月度发布日);输入 tradeDate 用 YYYYMMDD;每月底更新)
"指数估值快照 / 沪深 300 PE/PB 历史"/openapi/v1/stock/index/dailybasictsCode 传指数代码;响应含 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(可选过滤:minScoreminConceptCount 最少热门概念叠加数,如 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

⚠️ 三个 */resultstradeDate 必传真实日期(后端 SQL 精确等值匹配):不传 = 必空(没有"默认最新"),传占位符字面量也是空——这是〔时间字段规范〕"今天→不传时间"通用规则的例外。拿最新日期:先 POST /stock/market/lhb/latest-dates body={} 取最近 A 股交易日填入;若当日结果为空(模型当天还没跑),回退前一交易日再试一次(最多回退 2 天,仍空才向用户报告,这是合法的日期回退,不算"循环重试")。

6.5 宏观经济(market scope,Pro)

口语端点时间格式
"CPI / PPI / 通胀"/openapi/v1/market/macro/cpi/ppiYYYYMM
"PMI / 景气度"/openapi/v1/market/macro/pmiYYYYMM
"GDP"/openapi/v1/market/macro/gdpYYYYQX
"M2 / 货币供应"/openapi/v1/market/macro/money-supplyYYYYMM
"社融"/openapi/v1/market/macro/social-financeYYYYMM
"Shibor"/openapi/v1/market/macro/shiborYYYYMMDD
"LPR / 降息"/openapi/v1/market/macro/lprYYYYMMDD
"宏观月度总览(一次拿全)"/openapi/v1/market/macro/monthlyYYYYMM
"政策新闻 / 资讯"/openapi/v1/market/news/listYYYYMMDD(⚠️ 此端点属 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-adjkline-adj 含复权 + 估值;⚠️ hk/klinevol 单位是(不是万手),amount 单位是港元(不是千元);kline-adj 的涨跌幅字段是 pctChange(而非 pctChg
"港股复权因子"/openapi/v1/stock/hk/adj-factorHFQ = 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-flowlong format,透视方法见 WF-10
"港股财务指标"/openapi/v1/stock/hk/fina-indicator36 列,可选 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-adjkline 已含 pe/pb 估值 + vwap;⚠️ kline-adj pe/pb(需估值改用 kline,见 ❌ "查美股估值" entry)
"美股复权因子"/openapi/v1/stock/us/adj-factor
"美股利润 / 资产 / 现金流"/openapi/v1/stock/us/income / /balance-sheet / /cash-flowlong format,透视方法见 WF-10
"美股财务指标"/openapi/v1/stock/us/fina-indicator29 列,可选 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/lprdate 是 YYYYMMDD 字符串)格式不同。

口语端点说明
"美债收益率曲线 / 期限利差"/openapi/v1/intl-macro/us-tycr13 期限:1M-30Y
"美债实际收益率 / TIPS"/openapi/v1/intl-macro/us-trycr5Y-30Y;与 tycr 同期限相减 ≈ 隐含通胀
"美国短期国债"/openapi/v1/intl-macro/us-tbr4w-52w,Bd / Ce 两口径;⚠️ w17Bd/w17Ce 常为 null,正常现象
"美债长端 LTC / CMT"/openapi/v1/intl-macro/us-tltr/us-trltr30Y 缺失时段的替代基准
"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)在 market scope,不在这里。

6.11 外汇(forex scope,Max)

口语端点
"外汇产品 / EURUSD 元数据"/openapi/v1/forex/obasictsCode 格式 "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-dailydate DESC + rank ASC
"本周 / 本月票房"/openapi/v1/tmt/bo-weekly/bo-monthlyweekly date=周一
"影院上座率"/openapi/v1/tmt/bo-cinema可选 cName 影院名
"电影 / 电视剧备案"/openapi/v1/tmt/film-record/teleplay-record备案号 / 名称模糊匹配
"台湾电子月营收"/openapi/v1/tmt/twincome/twincome-detaildate 格式 YYYYMM

7. 新闻 / 事件(news scope,Max+

口语端点
"最近有啥消息"/openapi/v1/market/news/liststartDate=近7天;titleKeyword 关键词过滤;⚠️ 响应 title 可能为 null,展示时优先用 newsTimeStr(可读字符串如 "2026-06-07 22:12:08")而非 newsTime(毫秒时间戳))
"新闻来源字典(sina/cls/eastmoney 对应什么名字)"/openapi/v1/market/news/types(⚠️ 返回来源 source 字典,字段 code/displayName/descriptioncode 对应 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-holdtsCode 传港股代码如 "00700.HK";响应 tradeDate 毫秒时间戳;含 shareholding/holdNums/holdRatio
"CCASS 持股明细 / 哪些机构持有腾讯"/openapi/v1/stock/shareholder/ccass-detailtsCode 传港股代码;每行一个 CCASS 参与者:colParticipantId/colParticipantName/colShareholding/colShareholdingPercent
"北向资金今天持有哪些 A 股 / 陆股通持仓"/openapi/v1/stock/shareholder/hk-holdexchange=SH 沪股通北向 / exchange=SZ 深股通

Related skills

当用户需要查询 A股和H股相关数据 可通过 FinXData 获取 金融数据 API 时使用本技能,包括股票行情、股票图谱、财务报表、市场新闻、龙虎榜、限售解禁、宏观经济、异动追踪。本技能调用与 FinXData MCP 工具相同的公开 HTTP 接口。下列数据Agent可直接获取:A股股票行情、重点指数行情、股票图谱摘要、股票财报、行情复盘、市场新闻

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线、涨跌排行、涨停/跌停/炸板、资金流、...

by Wu Bo Yu16 installs

当用户需要查询 A股和H股相关数据 可通过 FinXData 获取 金融数据 API 时使用本技能,包括股票行情、股票图谱、财务报表、市场新闻、龙虎榜、限售解禁、宏观经济、异动追踪。本技能调用与 FinXData MCP 工具相同的公开 HTTP 接口。下列数据Agent可直接获取:A股股票行情、重点指数行情、股票图谱摘要、股票财报、行情复盘、市场新闻

6 installs

股市/股票/行情/股价/涨跌/大盘/指数/个股分析——金融/投资/股票/基金/ETF/板块/指数/宏观/外汇/大宗商品/财报/估值/持仓/交易/仓位/量化/因子/回测/选股/期权/衍生品/投行建模/技术指标/行情监控/预警——内置研究框架(红线/检索策略/数据口径/50+方法论 references/scripts)、A股量化数据引擎(12层数据源·bin/quant.py)、多市场数据层(港股/期货/期权/宏观/公告事件·bin/cn/*.py)与 8 个研报写作工作流(读年报/可比公司/深度报告/业绩快评/调研纪要/行业研究/晨会纪要/研报摘要·references/research-wo

2 installs