skills/meission/eastmoney/eastmoney_select_stock

eastmoney_select_stock

SKILL.md

东方财富智能选股skill (eastmoney_select_stock)

通过自然语言查询进行选股(支持市场:A股、港股、美股),返回符合条件的股票列表,可自动导出为CSV文件。

使用方式

  1. 首先检查环境变量EASTMONEY_APIKEY是否存在:

    echo $EASTMONEY_APIKEY
    

    如果不存在,提示用户在东方财富Skills页面(https://marketing.dfcfs.com/views/finskillshub/indexuNdYscEA?appfenxiang=1)获取apikey并设置到环境变量。

    ⚠️ 安全注意事项

    • 外部请求: 本 Skill 会将用户的查询关键词(Keyword)发送至东方财富官方 API 接口 (mkapi2.dfcfs.com) 进行解析与检索。
    • 数据用途: 提交的数据仅用于匹配选股条件,不包含个人隐私信息。
    • 凭据保护: API Key 仅通过环境变量 EASTMONEY_APIKEY 在服务端或受信任的运行环境中使用,不会在前端明文暴露。
  2. 使用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}'
    

适用场景

当用户查询以下类型的内容时使用本skill:

  • 条件选股:如"今日涨幅2%的股票"、"市盈率低于10的银行股"、"连续3天上涨的科技股"
  • 板块/行业成分股:如"半导体板块的成分股"、"新能源行业的上市公司"
  • 指数成分股:如"沪深300成分股"、"科创50成分股列表"
  • 股票推荐:如"低估值高分红的股票推荐"、"近期有主力资金流入的股票"
  • 市场筛选:如"港股通标的股"、"美股中概股列表"

请求参数说明

参数 类型 必填 说明
keyword 字符串 自然语言描述的选股条件
pageNo 数字 页码,默认1
pageSize 数字 每页数量,默认20,最大200

接口结果释义

一、顶层核心状态/统计字段

字段路径 类型 核心释义
status 数字 接口全局状态,0 = 成功
message 字符串 接口全局提示,ok = 成功
data.code 字符串 选股业务层状态码,100 = 解析成功
data.msg 字符串 选股业务层提示
data.data.resultType 数字 结果类型枚举,2000 为标准选股结果
data.data.result.total 数字 【核心】选股结果总数量(符合条件的股票数)

2.1 列定义:data.data.result.columns(数组)

核心作用:定义表格每一列的展示规则,与dataList的行数据键一一映射。

子字段 类型 核心释义
title 字符串 表格列展示标题(如最新价 (元)、涨跌幅 (%))
key 字符串 【核心】列唯一业务键,与dataList中对象的键映射
unit 字符串 列数值单位(元、%、股、倍)
dataType 字符串 列数据类型(String/Double/Long)

2.2 行数据: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")

异常处理

  • 如果数据结果为空,提示用户到东方财富妙想AI进行选股
  • 如果请求失败,检查API Key是否正确,网络是否正常
  • 建议单次查询pageSize不超过200,避免数据量过大
Weekly Installs
25
First Seen
5 days ago
Installed on
kimi-cli25
gemini-cli25
amp25
cline25
github-copilot25
codex25