快速开始
在个人中心创建 API Key。请求时优先将 Key 放入 X-Api-Key 请求头,不要把 Key 写进浏览器前端、公开仓库或截图。
基础地址:
https://jinniu.ziyoutang.com。日期使用 YYYYMMDD,例如 20260805。所有 API 的响应压缩:客户端请求头带
Accept-Encoding: gzip 时,服务端使用 gzip 压缩传输;未携带时按默认 JSON 返回。该请求头不是业务参数,不需要写入各接口的请求示例。MCP 接入
支持无状态 Streamable HTTP MCP。将服务地址设为 https://jinniu.ziyoutang.com/mcp,并在请求头中使用 Authorization: Bearer YOUR_API_KEY;也兼容 X-Api-Key。
MCP 复用当前账号的数据权限。
请帮我添加并连接这个MCP服务:
名称:金牛行情数据
类型:Streamable HTTP
地址:https://jinniu.ziyoutang.com/mcp
鉴权:Authorization: Bearer YOUR_API_KEY
安装后请读取tools/list验证连接;如果不能自动添加,请告诉我配置入口。
连接验证
curl -X POST 'https://jinniu.ziyoutang.com/mcp' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"example","version":"1.0"}}}'
连接后通过 tools/list 获取当前工具及输入参数说明;通过 tools/call 查询数据。返回数据使用 data.fields + data.items 结构。
faq_search 可搜索已核验、可解释的FAQ,参数为 q(关键词,可省略)和 page(默认1),固定每页20条。未确认的问题不返回,查询不扣行情日额度;答案适用范围见返回的 scope,分页信息见 data.meta。已连接的AI如看不到新工具,请刷新工具列表或重新连接MCP。
调用规则
调用频率与并发
- 历史、实时及 MCP 调用均为每账户每分钟最多 60 次。
- 同一 API Key 最多同时发起 2 个并发请求;达到上限时服务端会返回
429和Retry-After: 2,请等待已有请求完成后再继续下一批。 - 账户数据权限到期、权限关闭或超限时,接口会拒绝请求。删除或重新生成 API Key 不会重置账户调用次数。
单次返回与批量查询
| 适用接口 | 单次返回上限 | 查询方式 |
|---|---|---|
| 股票、ETF、交易所指数历史日线;股票复权因子;股票、ETF、交易所指数、期货及期权历史分钟线;期权日线 | 5000 条 | 按代码、日期或时间区间分批查询。 |
| 期货合约信息 | 5000 条 | 按交易所、产品筛选,使用 offset 分页。 |
| 期货日线、主力映射、持仓排名 | 2000 条 | 按合约、日期或 offset 分页。 |
| 期货复权因子、复权日线 | 3000 条 | 主力合约换月复权。 |
| 期货仓单日报 | 1000 条 | 按产品、日期或 offset 分页。 |
| 申万指数历史分钟线 | 5000 条 | 单个指数代码,按时间区间分批查询。 |
| 股票基础信息:股票列表、交易日历、ST 历史、名称变更、公司主体、北交所代码映射;期权合约信息 | 5,000 条 | 通过各接口支持的代码、日期等条件筛选。 |
| 申万指数基本信息、行业分类、行业成分及历史成员;ETF 复权因子 | 2,000 条 | 通过代码、分类、日期等条件筛选。 |
| 申万指数历史日线 | 4,000 条 | 按指数代码与日期区间查询。 |
| 股票、ETF、交易所指数、期货实时分钟线;股票及 ETF 实时日线;申万指数实时行情 | 1,000 条 | 每次最多查询 100 个代码或合约。 |
| 股票日内分钟线;ETF、交易所指数及期货盘中分钟线 | 1,000 条 | 每次仅查询 1 个代码或合约。 |
- 分钟线不限制固定自然日跨度;超过单次返回量时请按时间范围分批查询。
- 所有 API 支持可选
gzip响应压缩:带Accept-Encoding: gzip时返回压缩内容;不带时按默认 JSON 返回。常见浏览器和 HTTP 客户端会自动协商并解压。 - 请妥善保管 API Key。发现泄露时,在个人中心轮换 Key,旧 Key 会立即失效。
- 数据仅限研究、学习和个人使用,使用者应自行核验并遵守适用的法律、平台与数据使用规则。
规范调用建议
- 按代码和时间范围分批查询,并通过
fields仅请求所需字段;已成功获取的数据请保存在本地,避免重复拉取。 - 收到
429时必须按照Retry-After等待后再重试,不要立即连续重发;网络异常建议间隔 2、5、10 秒逐步重试,最多 3 次。 - 大批量历史数据建议安排在非交易时段执行;实时接口仅查询当前业务需要的代码,不要循环请求全市场。
import json
import time
import requests
API_KEY = "YOUR_API_KEY"
URL = "https://jinniu.ziyoutang.com/api/stk_mins"
session = requests.Session()
session.headers.update({
"X-Api-Key": API_KEY,
"Content-Type": "application/json",
"Accept-Encoding": "gzip",
})
def query_minutes(ts_code, start_date, end_date):
payload = {
"ts_code": ts_code,
"freq": "1min",
"start_date": start_date,
"end_date": end_date,
"fields": "ts_code,trade_time,open,close,high,low,vol,amount",
"limit": 4000,
}
retry_delays = [2, 5, 10]
for attempt in range(4):
try:
response = session.post(URL, json=payload, timeout=60)
if response.status_code == 429:
time.sleep(int(response.headers.get("Retry-After", 5)))
continue
response.raise_for_status()
return response.json()
except requests.RequestException:
if attempt == 3:
raise
time.sleep(retry_delays[attempt])
# 按日期串行查询;同一 API Key 最多同时运行 2 个并发请求。
dates = ["2026-09-08", "2026-09-09", "2026-09-10"]
for trade_date in dates:
result = query_minutes(
ts_code="000001.SZ",
start_date=f"{trade_date} 09:30:00",
end_date=f"{trade_date} 15:00:00",
)
with open(f"000001.SZ_{trade_date}.json", "w", encoding="utf-8") as file:
json.dump(result, file, ensure_ascii=False)
time.sleep(1)
错误码
400 参数错误,401 API Key 无效或已删除,403 账户期限或数据权限不满足,429 请求超过限额,503 行情数据暂不可用。错误响应包含 code、message 和 data 字段。
请求频率超限时,HTTP 429 响应头会返回
Retry-After;响应体的 data 会提供 limit_type、retry_after_seconds 和 reset_at,客户端应等待后再重试。