Job ID: 9666cc9671ae Run Time: 2026-07-24 13:46:12 Schedule: 30 13 * * *
[IMPORTANT: The user has invoked the "mx-data" skill, indicating they want you to follow its instructions. The full skill content is loaded below.]
name: mx-data display_name: 妙想金融数据 (MXSKILLS) title: 妙想金融数据 skill description: 基于东方财富权威数据库的金融数据查询工具,支持行情、财务及关联关系数据。 homepage: https://dl.dfcfs.com/m/itc4 author: 东方财富妙想团队 version: 1.0.0 env: - MX_APIKEY: "通过东方财富妙想Skills页面获取的 API Key"
本 Skill 基于东方财富权威数据库及最新行情底层数据构建,支持通过自然语言查询以下三类数据:
采用此skill可避免模型基于自身过时知识回答金融相关数据问题,可为大模型提供权威及时的金融数据。
MX_APIKEY 设置/home/lighthouse/.hermes/cron/output/mx_data/(自动创建)mx_data_mx_data_{query}.xlsx - Excel 文件,每个数据表一个 sheet(多 sheet)mx_data_{query}_description.txt - 查询结果描述文件mx_data_{query}_raw.json - API 原始 JSON 数据bash
export MX_APIKEY=your_apikey_here```bash
python ./mx_data.py "东方财富最新价" python ./mx_data.py "贵州茅台今日收盘价 涨跌幅" python ./mx_data.py "宁德时代主力资金流向"
python ./mx_data.py "贵州茅台近五年年报收盘价" python ./mx_data.py "比亚迪近一年每个交易日的开盘价收盘价成交量"
python ./mx_data.py "贵州茅台近三年净利润 营业收入" python ./mx_data.py "东方财富每股收益 净资产收益率 近五年" python ./mx_data.py "万科A资产负债率 毛利率 近三年"
python ./mx_data.py "比亚迪公司简介 主营业务 成立时间" python ./mx_data.py "贵州茅台董事长是谁 总股本多少"
python ./mx_data.py "贵州茅台十大股东" python ./mx_data.py "比亚迪机构持股比例"
python ./mx_data.py "沪深300指数最新点位 涨跌幅" python ./mx_data.py "新能源板块成分股平均涨跌幅"
python ./mx_data.py "贵州茅台近五年年报" /path/to/output ```
⚠️ 安全注意事项
- 外部请求: 本 Skill 会将您的查询文本发送至东方财富官方 API 域名 (
mkapi2.dfcfs.com) 以获取金融数据。- 凭据保护: API Key 仅通过环境变量
MX_APIKEY在服务端或受信任的运行环境中使用,不会在前端明文暴露。
请谨慎查询大数据范围的数据,如某只股票3年的每日最新价,可能会导致返回内容过多,模型上下文爆炸问题。
查询"2022年 2023年 2024年 2025年"或"近四年"等多年范围时,API 经常漏掉最早年份(只返回2023-2025,不返回2022)。这是已知行为,不是查询写法问题。
正确做法:先查3年范围(如2023-2025),再单独补查最早年份(2022年报),两者合并。实战中ROE/毛利率/净利率/归母净利润/OCF 全部触发此问题,无一例外。
财务数据查询(OCF、利润表等)通常返回同一标的的两个数据表:一个按大陆会计准则(A股),一个按国际会计准则(IAS/H股)。两者数值不同(例如FY2022 OCF:A股96.49亿 vs IAS 91.39亿)。做A股分析时取A股口径。
问财 ↔ 妙想(mx-data)换着用,无固定优先级。 一只标的先试一个,失败换另一个,两个都失败才用腾讯行情兜底。不限A股/港股——两边都支持A+H,哪边先响应用哪个。腾讯行情仅兜底(免费无限但字段少、港股PE常为0)。
降级链:mx-data/问财任一试→另一试→腾讯行情。
mx-data 113 休眠时,问财 CLI 直接支持业务分部查询,无需 mx-data:
bash
cd ~/.iwencai-skillhub/skills/财务数据查询/hithink-finance-query/scripts
python3 cli.py -q "{标的名称} {YYYY}年报 按产品 收入构成"
返回字段:业务收入[YYYYMMDD]、收入占比[YYYYMMDD]、毛利率[YYYYMMDD]、业务利润[YYYYMMDD]、项目名称、分类标准。
⚠️ "终止经营业务"必须剔除:返回行可能含 项目名称: 终止经营业务(如药明康德 FY2025 剥离 WuXi XDC 占营收 4.48%、毛利率仅 20.6%)。计算②业务纯度的分母必须剔除终止经营,只看持续经营业务。药明案例:含终止经营时化学业务 80.2%;剔除后持续经营口径化学业务 = 80.22/(80.22+8.89+5.89) = 84.4%。
https://proxy.finance.qq.com/ifzqgtimg/appstock/app/fqkline/get?param=sh603259,day,2023-07-23,2026-07-23,800,qfq
返回 data[code]['qfqday'](或 day),每行字段顺序为 [date, open, close, high, low, volume](0-indexed:0=date, 1=open, 2=close, 3=high, 4=low, 5=vol)。
⚠️ 常见解析错误:误把 index 2 当 open、3 当 close、4 当 high、5 当 low → 会算出"3Y低点 84860"(实际是成交量)之类的荒谬值。正确取法:
python
rows = [(r[0], float(r[1]), float(r[2]), float(r[3]), float(r[4])) for r in k] # date,open,close,high,low
lows = [r[4] for r in rows] # low
closes = [r[2] for r in rows] # close
合理性自检:3Y低点应远小于现价(药明 33.10 vs 现价 127.45 合理);若"低点">1000 或 >现价,几乎肯定是字段顺序错位。
当 status 113 或 status 114 触发时,第一降级必须是问财 CLI:
东财 datacenter API(2026-07-23 新增,三线全挂时的终极降级):问财 401 也挂时,直接 curl 东财 datacenter API 拉季度财务(RPT_LICO_FN_CPD,含营收/归母/同比/ROE/毛利率)和主营构成(RPT_F10_FN_MAINOP,含产品/行业/地区三口径占比)。免费、无配额、无需 key,且自带同比列(问财常漏同比)。完整 curl 模板、字段表和陷阱(排序列必须 NOTICE_DATE、期间标识用 QDATE、MAINOP_TYPE 口径过滤)见 references/eastmoney-datacenter-api.md。三一重工 600031 重评实战验证(mx-data 113 + 问财 401 + web_search 空返回全挂时用此完成全部分析)。
```bash
cd ~/.iwencai-skillhub/skills/财务数据查询/hithink-finance-query/scripts python3 cli.py -q "标的名 代码 加权ROE 毛利率 净利率 经营现金流 2021 2022 2023 2024 2025" ```
问财也失败 → web_search 搜财务摘要 → 腾讯行情兜底实时价。
脚本执行后会:
1. 在终端输出查询结果预览(前20行)
2. 自动创建输出目录 /root/.openclaw/workspace/mx_data/output/
3. 保存完整数据到 Excel 文件(多 sheet)
4. 保存原始 JSON 响应供二次处理
5. 保存描述文件记录查询条件和结果统计
| 异常情形 | 可能原因 | 处理方式 |
|---|---|---|
| connect: Connection refused | 网络无法访问 mkapi2.dfcfs.com | 检查服务器网络配置,确保能访问公网 |
| 401 Unauthorized / code=114 / API密钥不存在 | API Key 错误或已失效 | 前往妙想Skills页面重新获取 API Key 并更新环境变量 |
| code=113 / 今日调用次数已达上限 | 当日调用次数超限,或账户休眠 | 前往东方财富APP搜索"妙想skill"进行激活。休眠状态每日限额仅10次(激活后恢复至50-150次/天)。激活后立即生效,无需重启或重配API Key。 |
| code=112 / 请求频率过高 | 连续请求间隔过短,触发频率限制 | 串行调用必须间隔≥3秒。遇到112后sleep 10-15秒再重试(5秒实测不够,仍会复现112)。批量查询时每个请求之间sleep 3-5秒。112与113(日限)不同——112是瞬时限流,等待足够长时间后即可恢复。多年份查询拆成单年逐次查,间隔充分,比一次大查询更稳。 |
| 数据结果为空 / No dataTable found | 查询条件太严格或查询内容不支持 | 放宽查询条件,或确认查询内容是否正确 |
| 返回数据行数过多 / 输出过大 | 查询范围过大(如多年每日数据) | 缩小查询时间范围,减少返回数据量 |
| JSON解析错误 | 网络中断或返回内容不完整 | 检查网络后重试 |
data| 字段路径 | 类型 | 核心释义 |
|---|---|---|
data.questionId |
字符串 | 查数请求唯一标识 ID,关联单次查询任务 |
data.dataTableDTOList |
数组 | 【核心】标准化后的证券指标数据列表,每个元素对应1 个证券 + 1 个指标的完整数据 |
data.rawDataTableDTOList |
数组 | 原始未加工的证券指标数据列表,与标准化列表结构完全一致,供原始数据调用 |
data.condition |
对象 | 本次查数的查询条件,记录查询关键词、时间范围等 |
data.entityTagDTOList |
数组 | 本次查询关联的证券主体汇总信息,去重后展示所有涉事证券的基础属性 |
data.dataTableDTOList[](单指标对象,表格核心)数组内每个对象为独立的指标数据单元,包含证券信息 + 表格数据 + 指标元信息 + 证券标签四大部分,是表格渲染的核心载体,表格逻辑为:table/rawTable为单元格数据,nameMap为列名映射,indicatorOrder为指标列排序。
| 字段路径 | 类型 | 核心释义 |
|---|---|---|
dataTableDTOList[].code |
字符串 | 证券完整代码(含市场标识,如 300059.SZ) |
dataTableDTOList[].entityName |
字符串 | 证券全称(含代码,如东方财富 (300059.SZ)) |
dataTableDTOList[].title |
字符串 | 本指标数据的标题,概括查询结果(如东方财富最新价) |
| 字段路径 | 类型 | 核心释义 | 表格逻辑 |
|---|---|---|---|
dataTableDTOList[].table |
对象 | 【核心】标准化表格数据,键 = 指标编码,值 = 指标数值数组;headName为时间 / 维度列值 |
键为指标列,headName为时间列,值为交叉单元格的指标数值 |
dataTableDTOList[].rawTable |
对象 | 原始表格数据,与table结构一致,未做数据标准化处理 |
同table,为原始数值,无格式 / 单位修正 |
dataTableDTOList[].nameMap |
对象 | 【核心】列名映射关系,将指标编码 / 内置字段转为业务中文名(如 f2→最新价) | 解决表格列名 "编码转中文" 的问题,headNameSub为时间列的固定名称 |
dataTableDTOList[].indicatorOrder |
数组 | 指标列的展示排序,元素为指标编码(如 [f2]) | 控制表格中多个指标列的前后顺序,单指标时为单元素数组 |
| 字段路径 | 类型 | 核心释义 |
|---|---|---|
dataTableDTOList[].dataType |
字符串 | 数据来源类型(如行情数据 / 数据浏览器) |
dataTableDTOList[].dataTypeEnum |
字符串 | 数据类型枚举值(HQ = 行情,DATA_BROWSER = 数据浏览器),供系统判断 |
dataTableDTOList[].dataTableType |
字符串 | 表格类型(NORM_TABLE = 标准表格),固定值 |
dataTableDTOList[].field |
对象 | 【核心】当前指标的详细元信息,含指标编码、名称、查询时间、粒度等 |
dataTableDTOList[].fieldSet |
数组 | 指标元信息集合,与field内容一致,为兼容多指标设计,单指标时为单元素数组 |
| 字段路径 | 类型 | 核心释义 |
|---|---|---|
dataTableDTOList[].entityTagDTO |
对象 | 本指标关联证券的详细主体属性(如证券类型、市场、简称等) |
dataTableDTOList[].entityTagDTOList |
数组 | 证券主体属性集合,与entityTagDTO一致,兼容多证券设计 |
field/entityTagDTO(元信息子字段)dataTableDTOList[].field| 字段路径 | 类型 | 核心释义 |
|---|---|---|
field.returnCode |
字符串 | 指标唯一编码(如 ZXJ_f2_3/100000000017975) |
field.returnName |
字符串 | 指标业务中文名(如最新价 / 收盘价) |
field.returnSourceCode |
字符串 | 指标原始来源编码(如 f2/CLOSE),对接底层数据源 |
field.returnSourceName |
字符串 | 指标原始来源名称,与returnName一致 |
field.startDate/endDate |
字符串 | 本次查询的时间范围(开始 / 结束) |
field.dateGranularity |
字符串 | 数据粒度(DAY = 日度,MIN = 分钟等) |
field.classCode |
字符串 | 指标分类编码,用于指标归类 |
dataTableDTOList[].entityTagDTO| 字段路径 | 类型 | 核心释义 |
|---|---|---|
entityTagDTO.secuCode |
字符串 | 证券纯代码(无市场标识,如 300059) |
entityTagDTO.marketChar |
字符串 | 市场标识(.SZ = 深交所,.SH = 上交所) |
entityTagDTO.entityTypeName |
字符串 | 证券类型(如 A 股 / 港股 / 债券) |
entityTagDTO.fullName |
字符串 | 证券完整中文名(如东方财富) |
entityTagDTO.entityId |
字符串 | 证券在系统内的唯一主体 ID |
entityTagDTO.className |
字符串 | 证券大类(如沪深京股票 / 创业板股票) |
condition/entityTagDTOListdata.condition| 字段路径 | 类型 | 核心释义 |
|---|---|---|
condition.search_data_task_0 |
数组 | 本次查数的原始条件,按【证券名 + 指标名 + 时间范围】排序 |
data.entityTagDTOList与dataTableDTOList[].entityTagDTO结构完全一致,为本次查询所有关联证券的去重汇总信息,避免重复展示,供页面顶部 / 筛选栏使用。
提示用户到东方财富妙想AI查询。 如果请求失败,检查API Key是否正确,网络是否正常
文档声称的路径: data.dataTableDTOList
实际raw.json中的路径: data['data']['data']['searchDataResultDTO']['dataTableDTOList']
原因是API响应最外层有包装(success/status/code/message/data),内层data又套了一层(protocolType/id/refSeq/keyEntityList/searchDataResultDTO/...)。解析raw.json时必须用三层嵌套:
python
import json
with open('raw.json') as f:
raw = json.load(f)
inner = raw['data']['data'] # 注意:两层的 data
dtos = inner['searchDataResultDTO']['dataTableDTOList']
for d in dtos:
title = d['title']
table = d['table']
head = table['headName'] # 行标签(时间/证券名)
nameMap = d['nameMap'] # 列名映射
for col_key, col_name in nameMap.items():
if col_key == 'headNameSub':
continue
values = table[col_key]
print(f'{col_name}: {values}')
参考 references/dividend-analysis-patterns.md,内含:
- 多标的同时查询模式
- 每股股利(税前) vs (税后) 的区分
- 年度总分红 = 年报 + 中报(避免低估50%)
- 股息率/支付率/ROE 计算方法
参考 references/value-framework-screening.md,内含:
- 巴菲特式7条硬指标筛选工作流(ROE/毛利率/净利率/FCF/OCF-NP/利息/股本)
- 海螺水泥600585完整实测数据
- CapEx从现金流量表提取技巧
- 年份范围查询缺陷的处理模式
参考 references/insurance-sotp-framework.md,内含:
- 保险股专用SOTP+P/EV+EV营运回报率分析框架(不适用七条硬指标/剑气双宗)
- EV/NBV/P/EV/偿付能力等保险独有字段的 mx-data 查询命令
- 利差分析(总投资收益率 vs 保单打平收益率)
- 已知数据缺口:代理人数/综合投资收益率/NBV Margin 无法从 API 获取
- 问财降级模式下保险字段的可用性矩阵
- 2026-07-18 中国太保 601601 实战验证数据
本 skill 查询结果若需展示给用户,注意:
---|---|--- 分隔行的那类)—— 飞书渲染为空白代码 | 名称 | 数据 分行写,不带表格分隔线代码 | 名称 | 数据 格式这是该用户反复强调(且极度恼火)的硬约束。违反一次就会被指正。
本 skill 的 references/ 目录包含关键领域知识(股息计算模式、港股税规则、年度累计股利解析等)。使用本 skill 查询分析数据前,先 skill_view(name='mx-data', file_path='references/...') 读取相关参考文件,避免得出错误的中间结论。
mx-data 对港股支持良好,用自然语言查:01448.HK 03613.HK ... 股息率 每股股利 归母净利润 资产负债率 经营现金流。港股数据返回质量优于问财和腾讯行情(后者PE常为0)。
小米集团(01810.HK)完整查询链: ```bash
python3 mx_data.py "小米集团 01810.HK 2023-06-30至2026-06-29 最低价 最低价日"
python3 mx_data.py "小米集团 01810.HK 2022年 2023年 2024年 2025年 归母净利润"
python3 mx_data.py "小米集团 01810.HK 2022年报 归母净利润"
```
关键经验:
- 区间低点查询必须显式指定日期范围 2023-06-30至2026-06-29,否则返回的是近几日低点
- 净利润查询有时会漏掉最早年份,需单独补查
- 港股净利润单位为港元(与A股人民币不同),跨市场对比需换算
港股股息率有20%红利税折扣(港股通),做攒股收息评分时需将名义股息率×0.8作为到手股息率。
The user has provided the following instruction alongside the skill invocation: [IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more.]
The following is the most recent output from a preceding cron job. Use it as context for your analysis.
```
Job ID: fb63cf0292ae Run Time: 2026-07-24 12:15:36 Schedule: 15 6,12 * * *
[IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more.]
你是 Athena 的信号监控系统。读取 TrendRadar 最新产出报告,提炼行业景气信号推送到飞书。
/home/lighthouse/trendradar/output/index.html```
{AI分析核心结论,不超过150字}
| 行业 | 信号数 |
|---|---|
| xxx | N |
| ... |
🛰️ 本轮无行业信号匹配东西方双主线分化:菲尔兹奖(中国籍数学家首次获奖)带动"人才红利"情绪型霸屏;谷歌Q2自由现金流转负引发"AI泡沫"认知型争议。新能源出海数据主权、地缘大宗波动为微观焦点。
| 行业 | 信号数 |
|---|---|
| 现象级事件 | 5 |
| 新能源车 | 4 |
| 锂电产业链 | 1 |
| 算力基础设施 | 1 |
| 产业政策 | 1 |
| 有色 | 1 |
| 能源 | 1 |
你是 Athena 的午间信号监控系统(午间扫描,午间公告)。用 TrendRadar 行业信号缩小范围,再扫描午间紧急公告。
今天是 {{CURRENT_DATE}}。
第一步必须读取 ~/.hermes/data/portfolio.json 获取真实持仓,扫描范围 = 持仓 + T0/T1 观察池(~/.hermes/data/watch_registry.json)。
信号无变化且无紧急公告 → [SILENT] 否则组装午间信号 markdown(信号变化+公告+行情+商品)。
报告组装完成后,必须执行部署并验证,这是任务不可分割的一部分:
bash
cat /tmp/signal_noon.md | python3 /home/lighthouse/.hermes/scripts/deploy_report.py --title '午间信号' --dest /var/www/html/briefing/signal_noon.html
curl -s -o /dev/null -w "%{http_code}" https://b1ng.cloud/briefing/signal_noon.html
curl 必须返回 200。未执行部署 = 任务失败。若 [SILENT] 则不部署。
| 行业 | 06:01 | 13:01 | 变化 |
|---|---|---|---|
| 现象级事件 | 5 | 1 | 仅余菲尔兹奖 |
| 产业政策 | 1 | 5 | 大幅升温 |
| 新能源车 | 4 | 3 | 略降 |
| 有色 | 1 | 2 | 升温 |
| 宏观经济 | 0 | 1 | 新增 |
| 算力基础设施 | 1 | 1 | 力箭一号发射 |
| 锂电产业链 | 1 | 0 | 消失 |
| 能源 | 1 | 0 | 消失 |
| 标的 | 最新价 | 涨跌幅 |
|---|---|---|
| 瑞芯微 | 225.11 | +5.19% |
| 歌尔股份 | 23.34 | +3.78% |
| 兆易创新 | 456.62 | +1.03% |
| 紫金矿业 | 31.14 | -5.81% |
| 金力永磁 | 24.50 | -5.41% |
| 拓普集团 | 46.01 | -4.48% |
| 平高电气 | 19.08 | -4.84% |
| 湖南黄金 | 22.38 | -4.11% |
| 金山办公 | 227.67 | -4.50% |
| 阳光电源 | 113.94 | -3.27% |
| 品种 | 最新 | 涨跌幅 |
|---|---|---|
| 布伦特原油 | 93.68 | -0.62% |
| WTI原油 | 91.65 | -0.59% |
| 纽约黄金 | 4030.20 | -0.49% |
| 纽约白银 | 57.84 | -0.36% |
| 碳酸锂(lcs主力) | 141,680 | -0.67% |
工具调用次数已达上限,未能执行 deploy_report.py 与 curl 验证。如需发布,请手动运行:
bash
cat /tmp/signal_noon.md | python3 /home/lighthouse/.hermes/scripts/deploy_report.py --title '午间信号' --dest /var/www/html/briefing/signal_noon.html
curl -s -o /dev/null -w "%{http_code}" https://b1ng.cloud/briefing/signal_noon.html