东方财富智能选股 Skill(eastmoney_select_stock)用于通过自然语言查询进行选股,支持 A 股、港股、美股市场,返回符合条件的股票列表,并可自动导出为 CSV 文件。
一、用途 本 Skill 适用于以下类型的内容查询:
- 条件选股:如“今日涨幅2%的股票”“市盈率低于10的银行股”“连续3天上涨的科技股”。
- 板块/行业成分股:如“半导体板块的成分股”“新能源行业的上市公司”。
- 指数成分股:如“沪深300成分股”“科创50成分股列表”。
- 股票推荐:如“低估值高分红的股票推荐”“近期有主力资金流入的股票”。
- 市场筛选:如“港股通标的股”“美股中概股列表”。
二、使用方式
- 首先检查环境变量 EASTMONEY_APIKEY 是否存在:
echo $EASTMONEY_APIKEY
如果不存在,提示用户在东方财富 Skills 页面(https://marketing.dfcfs.com/views/finskillshub/indexuNdYscEA?appfenxiang=1)获取 apikey 并设置到环境变量。
- 使用 POST 请求调用接口:
curl -X POST --location 'https://mkapi2.dfcfs.com/finskillshub/api/claw/stock-screen'
--header 'Content-Type: application/json'
--header "apikey: $EASTMONEY_APIKEY"
--data '{"keyword": "选股条件", "pageNo": 1, "pageSize": 20}'
请求参数说明:
- keyword:字符串,必填,自然语言描述的选股条件。
- pageNo:数字,否,页码,默认1。
- pageSize:数字,否,每页数量,默认20,最大200。
三、接口结果释义 顶层核心状态/统计字段:
- status:数字,接口全局状态,0 = 成功。
- message:字符串,接口全局提示,ok = 成功。
- data.code:字符串,选股业务层状态码,100 = 解析成功。
- data.msg:字符串,选股业务层提示。
- data.data.resultType:数字,结果类型枚举,2000 为标准选股结果。
- data.data.result.total:数字,选股结果总数量(符合条件的股票数)。
列定义:data.data.result.columns(数组),定义表格每一列的展示规则,与 dataList 的行数据键一一映射。子字段包括:
- title:字符串,表格列展示标题(如最新价 (元)、涨跌幅 (%))。
- key:字符串,列唯一业务键,与 dataList 中对象的键映射。
- unit:字符串,列数值单位(元、%、股、倍)。
- dataType:字符串,列数据类型(String/Double/Long)。
行数据:data.data.result.dataList(数组),选股结果的具体股票数据,每个对象对应一只符合条件的股票。核心键包括:
- SERIAL:字符串,表格行序号。
- SECURITY_CODE:字符串,股票代码(如 603866、300991)。
- SECURITY_SHORT_NAME:字符串,股票简称(如桃李面包、创益通)。
- MARKET_SHORT_NAME:字符串,市场简称(SH = 上交所,SZ = 深交所,HK = 港交所,US = 美股)。
- NEWEST_PRICE:数字/字符串,最新价(单位:元)。
- CHG:数字/字符串,涨跌幅(单位:%)。
- PCHG:数字/字符串,涨跌额(单位:元)。
选股条件说明:
- data.data.responseConditionList:数组,单条筛选条件的统计,每个对象对应1个筛选条件。
- data.data.responseConditionList[].describe:字符串,筛选条件描述(如今日涨跌幅在 [1.5%,2.5%] 之间)。
- data.data.totalCondition.describe:字符串,组合条件描述(所有条件叠加后的最终筛选规则)。
- data.data.parserText:字符串,选股条件的解析文本,以分号分隔单条件。
四、示例代码
import os import csv import json import requests
api_key = os.getenv("EASTMONEY_APIKEY") if not api_key: raise ValueError("请先设置EASTMONEY_APIKEY环境变量")
url = "https://mkapi2.dfcfs.com/finskillshub/api/claw/stock-screen" headers = { "Content-Type": "application/json", "apikey": api_key } data = { "keyword": "今日涨幅2%的股票", "pageNo": 1, "pageSize": 20 }
response = requests.post(url, headers=headers, json=data) response.raise_for_status() result = response.json()
检查是否有数据返回
if result.get("status") != 0 or not result.get("data") or result["data"].get("code") != "100": print("选股查询失败,建议到东方财富妙想AI进行选股。") print(f"错误信息: {result.get('message', '未知错误')}") sys.exit(0)
result_data = result["data"]["data"]["result"] if not result_data.get("dataList"): print("没有找到符合条件的股票,建议调整筛选条件或到东方财富妙想AI查询。") sys.exit(0)
导出为CSV
columns = result_data["columns"] data_list = result_data["dataList"]
生成列名映射
column_map = {col["key"]: col["title"] for col in columns} csv_headers = [column_map[key] for key in data_list[0].keys() if key in column_map]
with open("stock_selection_result.csv", "w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=csv_headers) writer.writeheader() for row in data_list: csv_row = {column_map[key]: value for key, value in row.items() if key in column_map} writer.writerow(csv_row)
print(f"找到 {result_data['total']} 只符合条件的股票,结果已保存到 stock_selection_result.csv")
五、安全注意事项
- 外部请求:本 Skill 会将用户的查询关键词(Keyword)发送至东方财富官方 API 接口 (mkapi2.dfcfs.com) 进行解析与检索。
- 数据用途:提交的数据仅用于匹配选股条件,不包含个人隐私信息。
- 凭据保护:API Key 仅通过环境变量 EASTMONEY_APIKEY 在服务端或受信任的运行环境中使用,不会在前端明文暴露。
六、异常处理
- 如果数据结果为空,提示用户到东方财富妙想AI进行选股。
- 如果请求失败,检查 API Key 是否正确,网络是否正常。
- 建议单次查询 pageSize 不超过 200,避免数据量过大。
七、限制
- 需要有效的 EASTMONEY_APIKEY 才能调用接口。
- 单次查询 pageSize 最大 200。
- 具体收费、价格、平台支持范围等未在资料中提供。