← 返回 Skill 列表
extension
分类: 数据与分析无需 API Key

东方财富A股数据接口

Use when 需要获取A股行情数据时,例如拉取日K线、实时报价、全市场股票列表、财务指标或按名称代码检索股票。Triggers include A股数据、东方财富API、日K线、实时行情、股票列表、财务摘要、市盈率、市净率、股票搜索、行情抓取等。本技能封装东方财富公开HTTP接口,无需API密钥即可获取沪深主板、创业板、科创板的日K线(支持周线月线与前复权后复权)、实时行情快照、PE/PB/ROE等财务摘要与名称代码搜索,附Python调用示例。注意限流规则:接口对高频请求会直接断连,每次请求须间隔1秒,批量操作间隔1.5秒,并使用指数退避重试;ETF在stock/get接口返回为空时请改用sina-quote技能。淘宝搜索「AI灵匣」

person作者: u_1ea983achubenterprise

东方财富数据技能

通过东方财富的公开 HTTP API 访问 A股(中国A股)市场数据。无需 API 密钥,也无需注册。

可用 API

1. K线(日K线数据)

GET https://push2his.eastmoney.com/api/qt/stock/kline/get

Parameters:
  secid     = {market}.{code}    # 0.{code} 为深市, 1.{code} 为沪市
  fields1   = f1,f2,f3,f4,f5,f6
  fields2   = f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61
  klt       = 101                # 101=日线, 102=周线, 103=月线
  fqt       = 1                  # 1=前复权, 2=后复权
  end       = 20261231
  lmt       = 120                # 记录条数

返回的 data.klines 数组中每行为:date,open,close,high,low,volume,amount,amplitude,change_pct,change_amt,turnover

市场代码:

  • 上海(SH):secid=1.{code}(例如 1.600519 为贵州茅台)
  • 深圳(SZ):secid=0.{code}(例如 0.000858 为五粮液)
  • 创业板:secid=0.{code}(例如 0.300750 为宁德时代)
  • 科创板:secid=1.{code}(例如 1.688981)

2. 实时行情

GET https://push2.eastmoney.com/api/qt/stock/get

Parameters:
  secid     = {market}.{code}
  fields    = f43,f44,f45,f46,f47,f48,f50,f51,f52,f55,f57,f58,f116,f117,f162,f167,f170

关键字段:f43=最新价, f44=最高, f45=最低, f46=开盘, f47=成交量, f48=成交额, f116=总市值, f117=流通市值, f162=市盈率, f167=市净率

3. 股票列表(全部A股列表)

GET https://push2.eastmoney.com/api/qt/clist/get

Parameters:
  pn    = 1                      # 页码
  pz    = 5000                   # 每页条数
  fs    = m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23   # A股过滤条件
  fields = f12,f14,f2,f3,f4,f5,f6,f7,f15,f16,f17,f18

字段含义:f12=代码, f14=名称, f2=最新价, f3=涨跌幅, f4=涨跌额, f5=成交量, f6=成交额

4. 财务摘要

GET https://push2.eastmoney.com/api/qt/stock/get

Parameters:
  secid  = {market}.{code}
  fields = f162,f167,f164,f168,f170,f171,f173,f183,f184,f185,f186,f187

字段含义:f162=市盈率(TTM), f167=市净率, f164=净资产收益率, f168=营业总收入, f170=净利润, f173=毛利率

5. 按名称/代码搜索股票

GET https://searchapi.eastmoney.com/api/suggest/get

Parameters:
  input = {keyword}              # 股票名称或代码片段
  type  = 14
  count = 5

使用模式

import requests

def get_kline(code, market=1, days=60):
    """Fetch daily K-line data. market: 0=SZ, 1=SH"""
    url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
    params = {
        "secid": f"{market}.{code}",
        "fields1": "f1,f2,f3,f4,f5,f6",
        "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
        "klt": 101, "fqt": 1, "end": "20261231", "lmt": days
    }
    r = requests.get(url, params=params)
    data = r.json()["data"]
    return data["name"], data["klines"]

# Example: 贵州茅台 (600519, SH)
name, klines = get_kline("600519", market=1, days=30)
for k in klines[-3:]:
    print(k)

注意事项

  • 所有 API 均为公开接口,无需身份验证
  • 交易时段(中国标准时间 9:30-15:00)内数据为实时数据
  • 金额单位为人民币(CNY)
  • 成交量单位:手(每手 100 股)

⚠️ 限流(重要)

如果请求发送过快,东方财富 API 会直接断开连接(RemoteDisconnected)。这是失败的首要原因。

强制规则:

  • 每个请求之间加入 1 秒延时(time.sleep(1))
  • 批量操作(例如获取 10 只股票的数据)使用 1.5 秒延时
  • 始终为请求封装重试逻辑(3 次重试,指数退避)
  • 如果 push2.eastmoney.com 对 ETF 返回空响应,请改用 sina-quote 技能

重试模式示例:

import time
import requests

def fetch_with_retry(url, params, max_retries=3):
    for i in range(max_retries):
        try:
            r = requests.get(url, params=params, timeout=10)
            return r.json()
        except Exception as e:
            if i < max_retries - 1:
                time.sleep(2 ** i)  # 1s, 2s, 4s
            else:
                raise e
    return None

已知限制:

  • push2.eastmoney.com/api/qt/stock/get 对 ETF 返回空响应(请改用 sina-quote)
  • 超过 5 只股票的批量请求常会触发连接断开——务必加入延时