tags: 量化 数据源 东方财富 天天基金 同花顺 Chrome插件 # 爱盯盘插件行情接口整理 本文记录一次对 Chrome 插件“爱盯盘-股票盯盘-基金助手”的接口分析。插件版本为 `2.31.1`。这里只整理可复用的行情、基金、板块和市场热度接口,不展开插件作者自己的登录、云同步、订阅后台接口。 整体结论: 1. 股票、ETF、板块、K 线主体来自东方财富接口。 2. 场外基金估值和净值来自天天基金/东方财富基金接口。 3. 市场热度、涨跌分布、热门股票来自同花顺接口。 4. 涨停题材来自大智慧接口。 5. 插件自身后台主要用于登录、配置同步、订阅等,不是行情源。 接口多为公开网页或 App 接口,稳定性不保证。实际抓取时要控制频率,设置 `Referer` 和常规 `User-Agent`,不要高并发。 ## 通用约定 东方财富 `secid` 常见格式: ```text 1.600519 上海 A 股 0.000001 深圳 A 股 1.516820 上海 ETF 0.159915 深圳 ETF 116.00700 港股 105.AAPL 美股 90.BKxxxx 板块 ``` 东方财富 quote 字段常见含义: | 字段 | 含义 | | --- | --- | | `f12` | 证券代码 | | `f13` | 市场编号 | | `f14` | 名称 | | `f2` | 最新价 | | `f3` | 涨跌幅,百分比数值 | | `f4` | 涨跌额 | | `f5` | 成交量 | | `f6` | 成交额 | | `f8` | 换手率 | | `f9` | 市盈率 | | `f10` | 量比 | | `f18` | 昨收 | | `f20` | 总市值 | | `f21` | 流通市值 | | `f22` | 涨速 | | `f25` | 年初至今涨跌幅 | | `f62` | 主力净流入 | | `f100` | 所属行业 | | `f145` | 基金或特殊品种相关字段,插件用于识别场外基金/联接场景 | | `f265` | 扩展字段,插件保留 | | `f266` | 扩展字段,插件保留 | 插件把行情行映射成类似结构: ```json { "code": "600519", "name": "贵州茅台", "price": 1500.0, "changePercent": 1.23, "marketValue": 1880000000000, "volume": 123456789, "ytdChangePercent": 12.34, "f13": 1, "codeId": "1.600519" } ``` ## 股票和 ETF 实时行情 接口: ```text https://push2delay.eastmoney.com/api/qt/ulist.np/get ``` 典型参数: ```python params = { "fltt": "2", "fields": "f12,f13,f14,f2,f3,f4,f18,f20,f25,f6,f8,f10,f9,f22,f62,f100,f145,f265,f266", "secids": "1.600519,0.000001,1.516820", } ``` 关键参数: | 参数 | 说明 | | --- | --- | | `secids` | 逗号分隔的证券 ID | | `fields` | 返回字段列表 | | `fltt=2` | 数值格式,返回小数形式 | 返回结构: ```json { "rc": 0, "rt": 10, "data": { "total": 3, "diff": [ { "f12": "600519", "f13": 1, "f14": "贵州茅台", "f2": 1500.0, "f3": 1.23 } ] } } ``` ## 股票搜索 接口: ```text https://searchapi.eastmoney.com/api/Info/Search ``` 典型参数: ```python params = { "appid": "el1902262", "type": 14, "token": "", "and14": "MultiMatch/Name,Code,PinYin/茅台/true", "returnfields14": ( "Name,Code,PinYin,MarketType,JYS,MktNum,JYS4App," "MktNum4App,ID,Classify,IsExactMatch,SecurityType,SecurityTypeName" ), "pageIndex14": 1, "pageSize14": 20, "isAssociation14": "false1640928200409", } ``` `token` 是东方财富搜索接口的固定参数,插件源码里有硬编码值。公开笔记里建议写成占位符,实际使用时从页面或客户端请求里确认。 返回结构通常是搜索结果列表,核心字段: | 字段 | 说明 | | --- | --- | | `Name` | 名称 | | `Code` | 代码 | | `PinYin` | 拼音 | | `MarketType` | 市场类型 | | `MktNum` / `MktNum4App` | 东方财富市场编号 | | `SecurityType` | 证券类型 | | `SecurityTypeName` | 类型名称 | | `IsExactMatch` | 是否精确匹配 | ## 分时走势 单日分时接口: ```text https://push2delay.eastmoney.com/api/qt/stock/trends2/get ``` 五日分时接口: ```text https://push2his.eastmoney.com/api/qt/stock/trends2/get ``` 典型参数: ```python params = { "secid": "1.600519", "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14", "fields2": "f51,f53,f56,f58", "iscr": 0, "iscca": 0, "ndays": 1, # 五日分时用 5 } ``` 返回结构: ```json { "data": { "code": "600519", "market": 1, "name": "贵州茅台", "preClose": 1480.0, "trendsTotal": 241, "trends": [ "2026-07-10 09:30,1490.00,1490.00,123456,184000000" ] } } ``` `trends` 是字符串数组。插件使用时主要取: | 位置 | 含义 | | --- | --- | | 第 1 列 | 时间 | | 第 2 列 | 价格 | | 第 4 列 | 成交量或成交额相关字段,取决于接口字段 | ## K 线 东方财富 K 线接口: ```text https://push2his.eastmoney.com/api/qt/stock/kline/get ``` 典型参数: ```python params = { "secid": "1.600519", "klt": 101, "fqt": 1, "end": "20260710", "iscca": 1, "fields1": "f1,f2,f3,f4,f5", "fields2": "f51,f52,f53,f54,f55,f56,f57,f59", "ut": "f057cbcbce2a86e2866ab8877db1d059", "forcect": 1, "lmt": 400, } ``` `klt` 映射: | 周期 | `klt` | | --- | --- | | 日 K | `101` | | 周 K | `102` | | 月 K | `103` | | 季 K | `104` | | 年 K | `106` | | 120 分 | `120` | | 60 分 | `60` | | 30 分 | `30` | | 15 分 | `15` | | 5 分 | `5` | 返回结构: ```json { "data": { "code": "600519", "market": 1, "name": "贵州茅台", "klines": [ "2026-07-10,1480.00,1500.00,1510.00,1470.00,123456,1840000000,2.70,1.35,20.00,0.50" ] } } ``` `klines` 每行通常包含日期、开盘、收盘、最高、最低、成交量、成交额、振幅、涨跌幅、涨跌额、换手率等。 插件在东方财富 K 线失败时会用新浪兜底: ```text https://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData ``` 典型参数: ```python params = { "symbol": "sh600519", "scale": "240", "ma": "no", "datalen": 401, } ``` ## 板块列表 接口: ```text https://push2delay.eastmoney.com/api/qt/clist/get ``` 插件中的概念板块参数: ```python params = { "pn": 1, "pz": 2000, "po": 1, "np": 3, "fid": "f3", "fs": "m:90+t:3", "fields": ( "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17," "f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152," "f100,f103" ), "fltt": 2, "invt": 2, "ut": "b2884a393a59ad64002292a3e90d46a5", } ``` 关键参数: | 参数 | 说明 | | --- | --- | | `fs=m:90+t:3` | 概念板块 | | `fs=b:MK0878` | 插件中用于另一个板块集合 | | `fid=f3` | 按涨跌幅排序 | | `pn` / `pz` | 页码和每页数量 | 返回结构仍是: ```json { "data": { "total": 400, "diff": [ { "f12": "BKxxxx", "f14": "某概念", "f3": 2.34, "f62": 123456789 } ] } } ``` 注意:这个接口可以通过 `fid` 改排序字段。和资金流页面不同,插件这里默认按 `f3` 涨跌幅排序。 ## 板块成分股 接口: ```text https://push2delay.eastmoney.com/api/qt/clist/get ``` 典型参数: ```python params = { "pn": 1, "pz": 300, "po": 1, "np": 3, "fid": "f3", "fs": "b:BKxxxx", "fields": "f12,f14,f2,f3,f4,f25,f20,f13,f18,f6,f145,f100,f265,f266", "fltt": 2, "invt": 2, "ut": "b2884a393a59ad64002292a3e90d46a5", } ``` 返回结构: ```json { "data": { "total": 100, "diff": [ { "f12": "600519", "f13": 1, "f14": "贵州茅台", "f2": 1500.0, "f3": 1.23, "f20": 1880000000000 } ] } } ``` ## ETF 跟踪指数 接口: ```text https://datacenter.eastmoney.com/stock/etfselector/api/data/get ``` 按基金代码查跟踪指数: ```python params = { "type": "RPTA_APP_ETFSELECT", "sty": "DERIVE_INDEX_CODE,INDEXNAME,SECURITY_CODE", "source": "SECURITIES", "client": "APP", "filter": '(SECURITY_CODE="510050")', "p": 1, "ps": 1, } ``` 返回结构: ```json { "result": { "data": [ { "SECURITY_CODE": "510050", "DERIVE_INDEX_CODE": "000016", "INDEXNAME": "上证50" } ] } } ``` ## T0 ETF 列表 接口: ```text https://datacenter.eastmoney.com/stock/etfselector/api/data/get ``` 典型参数: ```python params = { "type": "RPTA_APP_ETFSELECT", "sty": ( "ETF_TYPE_CODE,DEAL_AMOUNT,SECUCODE,SECURITY_CODE,CHANGE_RATE_1W," "CHANGE_RATE_1M,CHANGE_RATE_3M,CHANGE_RATE_12M,ETF_SCALE," "YTD_CHANGE_RATE,DEC_TOTALSHARE,DEC_NAV,SECURITY_NAME_ABBR," "DERIVE_INDEX_CODE,INDEX_CODE,INDEXNAME,NW_PRICE,CHANGE_RATE," "CHANGE,VOLUME,PREMIUM_DISCOUNT_RATIO,QUANTITY_RELATIVE_RATIO," "HIGH_PRICE,LOW_PRICE,STOCK_ID,PRE_CLOSE_PRICE,PREMIUM_RATIO," "HIGH,LOW,SPEED_UP,STOCK_ID" ), "source": "SECURITIES", "client": "APP", "filter": '(IS_SUPPORT="1")', "p": 1, "ps": 530, "st": "CHANGE_RATE,CHANGE,SECURITY_CODE", "sr": "-1,-1,1", "isIndexFilter": 0, } ``` 返回结构: ```json { "result": { "data": [ { "SECURITY_CODE": "510050", "SECURITY_NAME_ABBR": "上证50ETF", "NW_PRICE": 2.5, "CHANGE_RATE": 1.23, "ETF_SCALE": 10000000000, "INDEXNAME": "上证50" } ] } } ``` ## 指数成分股 接口: ```text https://datacenter-web.eastmoney.com/api/data/v1/get ``` 典型参数: ```python params = { "reportName": "RPT_INDEX_COMPONENT", "columns": "ALL", "filter": '(INDEX_CODE="000016")', "pageNumber": 1, "pageSize": 50, "source": "WEB", "client": "WEB", } ``` 返回结构: ```json { "result": { "pages": 2, "data": [ { "INDEX_CODE": "000016", "SECURITY_CODE": "600519", "SECURITY_NAME_ABBR": "贵州茅台" } ] } } ``` 插件拿到成分股代码后,会再用 `push2delay.eastmoney.com/api/qt/ulist.np/get` 补实时价格、涨跌幅、市值等字段。 ## 场外基金实时估值 天天基金估值接口: ```text https://fundgz.1234567.com.cn/js/{基金代码}.js ``` 典型请求: ```text https://fundgz.1234567.com.cn/js/161725.js?rt=时间戳 ``` 返回是 JSONP: ```javascript jsonpgz({ "fundcode": "161725", "name": "招商中证白酒指数", "jzrq": "2026-07-09", "dwjz": "1.2345", "gsz": "1.2500", "gszzl": "1.26", "gztime": "2026-07-10 14:55" }) ``` 字段: | 字段 | 说明 | | --- | --- | | `fundcode` | 基金代码 | | `name` | 基金名称 | | `jzrq` | 净值日期 | | `dwjz` | 单位净值 | | `gsz` | 估算净值 | | `gszzl` | 估算涨跌幅 | | `gztime` | 估值时间 | ## 基金净值和估值补充 接口: ```text https://fundmobapi.eastmoney.com/FundMNewApi/FundMNFInfo ``` 典型参数: ```python params = { "pageIndex": 1, "pageSize": 1, "plat": "Android", "appType": "ttjj", "product": "EFund", "Version": 1, "deviceid": "Wap", "Fcodes": "161725", "_": 1720000000000, } ``` 返回结构: ```json { "ErrCode": 0, "Datas": [ { "FCODE": "161725", "SHORTNAME": "招商中证白酒指数", "PDATE": "2026-07-09", "NAV": "1.2345", "GSZ": "1.2500", "GSZZL": "1.26", "GZTIME": "2026-07-10 14:55", "NAVCHGRT": "0.80" } ], "Expansion": { "GZTIME": "2026-07-10 14:55" } } ``` 插件逻辑: 1. 先请求 `fundgz.1234567.com.cn`。 2. 同时请求 `FundMNFInfo`。 3. 如果东方财富返回的 `PDATE` 和 `GZTIME` 表明当天净值已发布,则使用 `NAV` 和 `NAVCHGRT`。 4. 否则使用 `GSZ` 和 `GSZZL` 作为估值。 ## 基金持仓 接口: ```text https://fundmobapi.eastmoney.com/FundMNewApi/FundMNInverstPosition ``` 典型参数: ```python params = { "FCODE": "161725", "Uid": "", "deviceid": "Wap", "plat": "Wap", "product": "EFund", "version": "2.0.0", "_": 1720000000000, } ``` 返回结构: ```json { "ErrCode": 0, "Expansion": "2026-03-31", "Datas": { "fundStocks": [ { "GPDM": "600519", "GPJC": "贵州茅台", "NEWTEXCH": "1", "JZBL": "9.50", "PCTNVCHGTYPE": "增加", "PCTNVCHG": "1.20", "INDEXNAME": "中证白酒" } ] } } ``` 字段: | 字段 | 说明 | | --- | --- | | `GPDM` | 股票代码 | | `GPJC` | 股票简称 | | `NEWTEXCH` | 东方财富市场编号 | | `JZBL` | 占基金净值比例 | | `PCTNVCHGTYPE` | 持仓变化类型 | | `PCTNVCHG` | 持仓比例变化 | | `INDEXNAME` | 指数或组合名称 | 插件会把 `NEWTEXCH.GPDM` 拼成 `secid`,再请求实时行情补价格和涨跌幅。 ## 基金概况 接口: ```text https://fundmobapi.eastmoney.com/FundMApi/FundBaseTypeInformation.ashx ``` 典型参数: ```python params = { "FCODE": "161725", "deviceid": "Wap", "plat": "Wap", "product": "EFund", "version": "2.0.0", } ``` 返回字段常见映射: | 字段 | 说明 | | --- | --- | | `FCODE` | 基金代码 | | `SHORTNAME` | 基金简称 | | `FTYPE` | 基金类型 | | `DWJZ` | 单位净值 | | `LJJZ` | 累计净值 | | `FSRQ` | 净值日期 | | `SYL_Y` | 近一月收益 | | `SYL_3Y` | 近三月收益 | | `SYL_6Y` | 近六月收益 | | `SYL_1N` | 近一年收益 | | `RANKM` / `RANKQ` / `RANKY` | 排名 | | `SGZT` | 申购状态 | | `SHZT` | 赎回状态 | | `JJGS` | 基金公司 | | `JJJL` | 基金经理 | | `ENDNAV` | 规模 | ## 基金收益走势 优先接口: ```text https://dataapi.1234567.com.cn/dataapi/fund/FundVPageAcc ``` 典型参数: ```python params = { "INDEXCODE": "000300", "CODE": "161725", "FCODE": "161725", "RANGE": "n", "deviceid": "Wap", "product": "EFund", "_": 1720000000000, } ``` 返回结构: ```json { "errorCode": 0, "data": [ { "pdate": "2026-07-10", "yield": "1.23", "indexYield": "0.80", "fundTypeYield": "0.50" } ] } ``` 插件映射: ```json { "date": "2026-07-10", "yield": 1.23, "indexYield": 0.80, "peerYield": 0.50 } ``` 如果这个接口失败,插件兜底请求: ```text https://fundmobapi.eastmoney.com/FundMApi/FundNetDiagram.ashx ``` 参数: ```python params = { "FCODE": "161725", "RANGE": "n", } ``` 返回的 `Datas` 中常见字段: | 字段 | 说明 | | --- | --- | | `FSRQ` | 日期 | | `DWJZ` | 单位净值 | | `LJJZ` | 累计净值 | | `JZZZL` | 净值增长率 | ## ETF 季报持仓 接口: ```text https://fundf10.eastmoney.com/FundArchivesDatas.aspx ``` 典型参数: ```python params = { "type": "jjcc", "code": "510050", "topline": "10000", "year": "", "month": "", "rt": "随机数", } ``` 需要请求头: ```python headers = { "Referer": "https://fundf10.eastmoney.com/", "User-Agent": "Mozilla/5.0", } ``` 返回不是标准 JSON,而是脚本变量,里面的 `content` 是 HTML。插件解析: 1. 从响应里取 `content`。 2. 用 DOMParser 解析 HTML。 3. 找 `table.comm.tzxq`。 4. 逐行提取持仓股票。 持仓行字段: | 字段 | 说明 | | --- | --- | | 序号列 | 持仓排名 | | 第 2 列 | 股票代码 | | 第 3 列 | 股票名称 | | 第 7 列 | 占净值比例 | | 第 8 列 | 持股数 | | 第 9 列 | 持仓市值 | 插件标准化结构: ```json { "quarter": "2026年1季度", "deadline": "2026-03-31", "fundName": "上证50ETF", "items": [ { "rank": 1, "code": "600519", "name": "贵州茅台", "ratio": 9.50, "shares": 123456, "marketValue": 123456789 } ] } ``` ## 同花顺市场热度接口 成交额分钟接口: ```text https://dq.10jqka.com.cn/fuyao/market_analysis_api/chart/v1/get_chart_data?chart_key=turnover_minute ``` 涨跌分布接口: ```text https://dq.10jqka.com.cn/fuyao/up_down_distribution/distribution/v2/realtime ``` 涨停分钟接口: ```text https://dq.10jqka.com.cn/fuyao/market_analysis_api/chart/v1/get_chart_data?chart_key=limit_up_minute ``` 热门股票接口: ```text https://dq.10jqka.com.cn/fuyao/hot_list_data/out/hot_list/v1/stock ``` 热门股票参数: ```python params = { "stock_type": "a", "type": "1小时热度", "list_type": "normal", } ``` 涨跌分布返回结构大致: ```json { "data": { "up": 3000, "down": 1800, "flat": 200, "limit_up": 80, "limit_down": 10, "table": [], "last_update_time": "2026-07-10 14:59:00" } } ``` 成交额接口里插件取: ```json { "data": { "charts": { "header": [ {"key": "turnover", "val": 10000}, {"key": "turnover_pre", "val": 9000}, {"key": "turnover_change", "val": 11.11}, {"key": "predict_turnover", "val": 12000} ] } } } ``` ## 大智慧涨停题材 接口: ```text https://webrelease.dzh.com.cn/htmlweb/ztts/api.php ``` 典型参数: ```python params = { "service": "getZttdData", "date": "2026-07-10", } ``` 返回结构随大智慧页面变化,插件直接把 JSON 交给前端展示。这个接口适合做涨停题材归因参考,但字段稳定性弱于东方财富 quote 接口。 ## 请求代码骨架 下面是一个尽量克制频率的请求骨架: ```python import time import requests session = requests.Session() session.headers.update({ "User-Agent": "Mozilla/5.0", "Referer": "https://quote.eastmoney.com/", }) def get_json(url, params=None, referer=None, timeout=15): headers = {} if referer: headers["Referer"] = referer time.sleep(1.2) r = session.get(url, params=params, headers=headers, timeout=timeout) r.raise_for_status() return r.json() url = "https://push2delay.eastmoney.com/api/qt/ulist.np/get" params = { "fltt": "2", "fields": "f12,f13,f14,f2,f3,f18,f20,f25", "secids": "1.600519,0.000001", } data = get_json(url, params=params) rows = data["data"]["diff"] print(rows[:2]) ``` ## 使用注意 1. 这些接口不是正式授权的数据服务,字段和风控策略可能随时变化。 2. 东方财富 `push2delay` 带有延迟含义,做交易执行前要确认延迟和刷新频率是否满足需求。 3. 单次抓取建议控制在 1 到 2 秒一个请求,不要多线程压接口。 4. 基金接口里 `FundArchivesDatas.aspx` 返回 HTML 片段,不是标准 JSON,要单独解析。 5. 场外基金估值和实际净值要区分。`GSZ/GSZZL` 是估值,`NAV/NAVCHGRT` 是净值或实际涨跌。 6. 板块接口的排序完全由 `fid` 决定。按涨跌幅、成交额、主力净流入得到的排名不是一回事。 7. 如果做回测,需要保存每天的接口快照。用今天的板块和基金持仓去解释过去,会引入未来函数。 这次分析的价值不在于复制插件,而是把常见网页和插件背后的数据源关系理清楚:实时行情、分时、K 线、板块、基金估值、基金持仓、市场热度分别来自不同系统,落库时最好按来源和抓取时间分表保存,避免混成一个不可追溯的“行情表”。