美股行情 API
免费 · 快速 · 稳定
美股与 ETF 的收盘报价(T+1)、历史 K 线、静态信息、批量查询与回测,统一 JSON 响应格式,无需注册即可调用。
接口地址: https://us2.ninequantai.com
所有端点都挂在这个地址下。路径区分大小写,标的代码不区分。
GET /v1/quote/AAPL.US{
"code": 0,
"message": "ok",
"data": {
"symbol": "AAPL.US",
"name": "苹果",
"market": "US",
"currency": "USD",
"last": 328.21,
"open": 324.87,
"high": 330.81,
"low": 324.11,
"prev_close": 324.96,
"change": 3.25,
"change_pct": 1.0001,
"volume": 37225838,
"ts": "2026-09-03T16:00:00-04:00",
"as_of": "2026-09-03",
"delayed": true,
"venue_mode": "consolidated",
"timeliness": { "mode": "eod_only", "delayed": true, "label": "T+1 收盘数据" },
"source": "eod"
}
}示例取自真实调用。delayed 与 as_of 原样保留,一眼就知道这批数据是什么时效。
当前提供 T+1 及更早的日线数据,盘中与实时数据暂未开放。 数据已更新至 2026/09/04
能力概览
四个数字都是打开本页时向服务端实测得到的,不是宣传口径,刷新一次即可复现。没测到的写「毫秒级」或「—」——我们不写没有测量依据的数字承诺。
为什么选择我们的 API?
六条都能在本页别处当场验证:能力数字、限流表、在线试用面板。我们不写验证不了的口号。
快速响应
历史 K 线与报价命中本地库后毫秒级返回。本页顶部四格就是你这次打开页面实测到的耗时。
稳定可靠
上游数据源故障时返回明确的 502,绝不拿旧数据或脏数据顶包。
智能限流
滑动窗口计数,429 自带 Retry-After 与 X-RateLimit-* 头,客户端可以自适应退避。
RESTful 接口
所有端点共用 code / message / data 一个响应外壳,客户端只写一处解析。
数据丰富
报价、日线周线月线、静态信息、标的搜索、批量查询与回测,一套接口全覆盖。
完全免费
游客免注册即可调用,注册后额度更高。免费档不是试用期,也不会静默降额。
💰 用量与定价
三档用量。卡上每一个数字都实时来自服务端套餐配置,前端一个都没写死。
游客版
- 单端点
- 30 次/分
- 批量查询
- 10 次/分
- 回测
- 5 次/分
- API Key
- 不可用
- 按来源 IP 限流,打开就能调
- 报价、K 线、静态信息、标的搜索、批量与回测全部开放
- 不签发 API Key
- 无调用记录与统计
- 无技术支持
注册版
推荐- 单端点
- 60 次/分
- 批量查询
- 20 次/分
- 回测
- 20 次/分
- API Key
- 1 把
- 按 API Key 限流,与他人互不干扰
- 控制台可查每日调用量统计
- 回测记录可保存与分享
- 邮件技术支持
Pro 版
- 单端点
- 300 次/分
- 批量查询
- 100 次/分
- 回测
- 60 次/分
- API Key
- 5 把
- 专属额度,可开多把 Key 分摊用量
- 按端点、按天的详细调用统计
- 参数优化、组合回测与 CSV 导出
- 专属技术支持,优先响应
回测接口游客 5 次/分、注册用户 20 次/分。以上限流数字来自 GET /api/plans,与定价页、控制台同源,不会出现互相矛盾的版本。 查看完整定价与机构版 →
| 接口类别 | 游客版 | 注册版 | Pro 版 | 机构版 |
|---|---|---|---|---|
| 报价 | 30 次/分 | 60 次/分 | 300 次/分 | 3000 次/分 |
| K 线 | 30 次/分 | 60 次/分 | 300 次/分 | 3000 次/分 |
| 分时 | 不可用 | 60 次/分 | 300 次/分 | 3000 次/分 |
| 静态信息 | 30 次/分 | 60 次/分 | 300 次/分 | 3000 次/分 |
| 标的搜索 | 30 次/分 | 60 次/分 | 300 次/分 | 3000 次/分 |
| 批量查询 | 10 次/分 | 20 次/分 | 100 次/分 | 1000 次/分 |
| 回测 | 5 次/分 | 20 次/分 | 60 次/分 | 600 次/分 |
| 参数优化 | 不可用 | 不可用 | 10 次/小时 | 200 次/小时 |
| 账户接口 | 不可用 | 120 次/分 | 300 次/分 | 600 次/分 |
每个行情端点各有一个独立计数桶,不共用。同时调报价和 K 线不会让你凭空少掉一半额度。
限流响应头
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 27
X-RateLimit-Reset: 1788451260
Retry-After: 12每个响应都带这几个头,客户端据此自适应节流,不必靠猜。
超限之后
X-RateLimit-Limit— 本窗口的额度上限X-RateLimit-Remaining— 本窗口剩余次数X-RateLimit-Reset— 配额重置的 Unix 秒Retry-After— 还要等多少秒,只在 429 时出现
返回 429,响应体里带 retry_after。请按 Retry-After 退避重试,不要用固定间隔硬打 —— 那只会让你一直卡在限流窗口里。
🔐 鉴权方式
三种调用身份,切换只需要改一个请求头。
游客模式
无需注册不带任何凭证直接调用,按来源 IP 计额度。
单端点额度: 30 次/分
- 适合先试接口、写 demo、跑一次性脚本
- 同一个出口 IP 下的所有调用共享额度 —— 公司网络、云函数、CI 要留意
- 不保留调用记录,控制台里看不到用量
注册用户
推荐请求头带上 API Key,按 Key 计额度。
单端点额度: 60 次/分
- 注册只要邮箱验证码,平台不设密码,注册即自动签发一把 Key
- Key 以 nq_ 开头,后接 64 位十六进制;控制台可随时重置
- 控制台能看到每日调用量,回测记录可保存与分享
Pro 版本
更高额度同样是 API Key,额度与可用功能按 Pro 档发放。
单端点额度: 300 次/分
- 可开多把 Key,额度按 Key 分配,互不干扰
- 按端点与按天的详细调用统计
- 参数优化、组合回测与 CSV 导出随档位开放
请求示例
GET https://us2.ninequantai.com/v1/quote/AAPL.US不带任何请求头,按来源 IP 计额度。
GET https://us2.ninequantai.com/v1/quote/AAPL.US
Authorization: Bearer nq_your_api_key_here
Accept-Language: zh-CN把 nq_your_api_key_here 换成控制台里的 Key。Accept-Language 决定错误信息用哪种语言返回。
凭证不合法时是 401,不会降级成游客
带了 Key 但 Key 过期或被重置,返回 401 而不是静默按游客处理 —— 否则你只会看到「数据怎么少了」,而不是「该换 Key 了」。完全不带凭证才按游客走。
⚠️ 别把 Key 写进前端
浏览器里的任何代码都是公开的。Key 只放服务端或本地脚本;一旦泄漏,去控制台重置,旧 Key 立即失效。
⚠️ 错误码
只列真正会遇到的六个,不铺满一整张 HTTP 状态码表。
| 状态码 | 含义 | 该怎么办 |
|---|---|---|
400 | 参数不合法:日期格式、period 取值、批量标的数超上限等 | 按 message 改参数。message 已按 Accept-Language 本地化,可以直接展示给你的用户。 |
401 | 凭证不合法或已过期 | 检查 Authorization 头是否写成 Bearer nq_xxx;Key 被重置过就去控制台取新的。完全不带凭证不会 401,会按游客处理。 |
403我方新增 | 当前身份没有这项权限 | 两种情况:分发姿态还没开放(例如 eod_only 下的分时),或当前套餐不含该能力。前者等授权,后者升级套餐。 |
404我方新增 | 标的或记录不存在 | 先用 /v1/symbols 确认拼写。统一格式是 QQQ.US,缺省市场按美股解释。 |
429 | 触发限流 | 读 Retry-After 退避重试。长期不够用就升级套餐,或者多开一把 Key —— 额度是按 Key 分配的。 |
502 | 上游数据源暂时不可用 | 我们宁可返回 502 也不返回脏数据。稍后重试,或改用已入库的历史区间。 |
403 与 404 是我方在四个通用错误码之外新增的:403 用于「分发姿态尚未开放」(例如当前的分时端点)与「当前套餐不含该能力」,404 用于标的或记录不存在。少了这两个,调用方分不清该等授权、该升级套餐,还是只是代码写错了。
500 / 503 同样遵守上面的响应外壳。任何错误响应都不会把堆栈吐给调用方,出问题请带上 X-Request-Id 找我们。
统一响应格式
所有 /v1 与 /api 端点返回同一个外壳,客户端只需要写一处解析。
{
"code": 0,
"message": "ok",
"data": { }
}{
"code": 429,
"message": "请求过于频繁,请在 12 秒后重试",
"data": null,
"retry_after": 12
}每个响应都带 X-Request-Id 头。反馈问题时附上它,我们能直接定位到那一次调用。
📦 SDK 示例
Python(requests)、JavaScript(fetch)与 cURL 三份,复制即可跑。把 YOUR_API_KEY 换成控制台里的 Key;不换也能跑,只是按游客额度计。
接口地址: https://us2.ninequantai.com
import requests
BASE = "https://us2.ninequantai.com"
# 游客调用把这一行删掉即可
headers = {"Authorization": "Bearer YOUR_API_KEY"}
r = requests.get(f"{BASE}/v1/quote/QQQ.US", headers=headers, timeout=20)
r.raise_for_status()
body = r.json() # 统一信封:code / message / data
if body["code"] != 0: # HTTP 200 也可能是业务失败,务必判 code
raise RuntimeError(body["message"])
print(body["data"])我们不提供也不打算提供官方 SDK:一个只有七个端点、统一响应外壳的 REST 接口,二十行代码就能封装完,多一层 SDK 只会多一层版本问题。
API 端点
七个端点:报价 / 历史K线 / 分时 / 静态信息 / 批量,再加上标的搜索与回测。每个端点都给了参数表、真实请求与响应示例,以及一个可以直接发请求的在线试用面板。
/v1/quote/{symbol}报价
单个标的的最新可分发报价
时效取决于部署的分发姿态:eod_only 下返回最近一个已过 T+1 的交易日快照,as_of 标明数据日期。响应里的 timeliness 会如实说明本次拿到的是哪一种。
参数
| 参数 | 位置 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|---|
symbol | 路径 | string | 必填 | — | 标的代码,QQQ 或 QQQ.US 均可,缺省市场按美股解释 |
请求示例
# 游客调用把这一行删掉即可
curl -s "https://us2.ninequantai.com/v1/quote/QQQ.US" \
-H "Authorization: Bearer YOUR_API_KEY"响应示例
{
"code": 0,
"message": "ok",
"data": {
"symbol": "QQQ.US",
"name": "纳斯达克100",
"market": "US",
"currency": "USD",
"last": 717.67,
"open": 710.85,
"high": 718.915,
"low": 709.69,
"prev_close": 709.24,
"change": 8.43,
"change_pct": 1.1886,
"volume": 29449781,
"ts": "2026-09-03T16:00:00-04:00",
"as_of": "2026-09-03",
"delayed": true,
"venue_mode": "consolidated",
"venue_mode_label": "合并口径(全市场)",
"timeliness": {
"mode": "eod_only",
"delayed": true,
"delay_minutes": null,
"label": "T+1 收盘数据",
"max_date": "2026-09-03"
},
"source": "eod"
}
}示例取自真实调用,为便于阅读裁剪了数组长度。
可能的错误
400参数不合法:日期格式、period 取值、批量标的数超上限等404标的或记录不存在429触发限流502上游数据源暂时不可用
在线试用
填好参数直接发一次真实请求。它会消耗你当前身份的额度,和线上调用完全一样。
还没发过请求。点上面的按钮试一次。
/v1/kline/{symbol}历史 K 线
日 / 周 / 月 K 线
周线与月线由日线重采样得出,不单独存储。adjust=qfq 为前复权:因子在查询时相乘算出,不预存复权价,最新价保持真实成交价;adjust_applied 会如实告诉你该区间是否真的有因子被应用。
参数
| 参数 | 位置 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|---|
symbol | 路径 | string | 必填 | — | 标的代码 |
period | 查询 | string | 选填 | day | day / week / month,默认 day |
start | 查询 | string | 选填 | — | 起始日期 YYYY-MM-DD |
end | 查询 | string | 选填 | — | 结束日期 YYYY-MM-DD,超出可分发范围会被收敛 |
days | 查询 | integer | 选填 | 250 | 返回最近 N 根(按 period 计数);与 start 同时给出时以 start 为准 |
adjust | 查询 | string | 选填 | none | none(默认)/ qfq 前复权 |
请求示例
# 游客调用把这一行删掉即可
curl -s "https://us2.ninequantai.com/v1/kline/QQQ.US?period=day&days=30&adjust=none" \
-H "Authorization: Bearer YOUR_API_KEY"响应示例
{
"code": 0,
"message": "ok",
"data": {
"symbol": "QQQ.US",
"name": "纳斯达克100",
"market": "US",
"currency": "USD",
"period": "day",
"adjust": "none",
"adjust_applied": false,
"venue_mode": "consolidated",
"venue_mode_label": "合并口径(全市场)",
"delayed": true,
"as_of": "2026-09-03",
"timeliness": { "mode": "eod_only", "delayed": true, "label": "T+1 收盘数据" },
"start": "2026-07-24",
"end": "2026-09-03",
"count": 30,
"bars": [
{ "ts": "2026-07-24", "open": 690.41, "high": 692.63, "low": 682.48, "close": 684.23, "volume": 42876658 },
{ "ts": "2026-07-27", "open": 691.68, "high": 692.3, "low": 675.945, "close": 682.12, "volume": 42681473 },
{ "...": "共 30 根,其余略" },
{ "ts": "2026-09-03", "open": 710.85, "high": 718.915, "low": 709.69, "close": 717.67, "volume": 29449781 }
]
}
}示例取自真实调用,为便于阅读裁剪了数组长度。
可能的错误
400参数不合法:日期格式、period 取值、批量标的数超上限等404标的或记录不存在429触发限流502上游数据源暂时不可用
在线试用
填好参数直接发一次真实请求。它会消耗你当前身份的额度,和线上调用完全一样。
还没发过请求。点上面的按钮试一次。
/v1/intraday/{symbol}当前部署下不可用分时数据
当日分时 K 线
盘中数据的对外分发需要交易所额外授权。分发模式为 eod_only 时本端点返回 403 —— 这不是你的参数写错了,而是这个部署还没有开放盘中分发。授权落实后把分发模式改成 delayed 或 realtime 即可,端点与字段不变。
当前分发模式为 eod_only:这个端点会返回 403。原因是盘中数据的对外分发需要交易所额外授权 —— 不是你的参数写错了。授权落实后把分发模式改成 delayed 或 realtime 即可,端点路径与字段一律不变。
参数
| 参数 | 位置 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|---|
symbol | 路径 | string | 必填 | — | 标的代码 |
date | 查询 | string | 选填 | — | 交易日 YYYY-MM-DD,默认最近可分发交易日 |
interval | 查询 | string | 选填 | 1m | 分时粒度,如 1m |
请求示例
# 游客调用把这一行删掉即可
curl -s "https://us2.ninequantai.com/v1/intraday/QQQ.US?interval=1m" \
-H "Authorization: Bearer YOUR_API_KEY"响应示例
{
"code": 403,
"message": "分时数据暂不对外提供",
"data": null
}示例取自真实调用,为便于阅读裁剪了数组长度。
可能的错误
400参数不合法:日期格式、period 取值、批量标的数超上限等403当前身份没有这项权限404标的或记录不存在429触发限流502上游数据源暂时不可用
在线试用
填好参数直接发一次真实请求。它会消耗你当前身份的额度,和线上调用完全一样。
还没发过请求。点上面的按钮试一次。
/v1/static/{symbol}静态信息
标的静态属性与本地历史覆盖区间
除了名称、类型、主交易所这些静态属性,还返回本地已入库的日线区间(history_start / history_end),方便你在发起回测前先确认数据够不够。已退市标的同样返回,并在 note 里注明。
参数
| 参数 | 位置 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|---|
symbol | 路径 | string | 必填 | — | 标的代码 |
请求示例
# 游客调用把这一行删掉即可
curl -s "https://us2.ninequantai.com/v1/static/QQQ.US" \
-H "Authorization: Bearer YOUR_API_KEY"响应示例
{
"code": 0,
"message": "ok",
"data": {
"symbol": "QQQ.US",
"raw_symbol": "QQQ",
"market": "US",
"name": "纳斯达克100",
"asset_type": "etf",
"primary_venue": "XNAS",
"currency": "USD",
"listed_on": null,
"delisted_on": null,
"is_delisted": false,
"is_popular": true,
"lot_size": 40,
"status": "active",
"history_start": "2024-07-01",
"history_end": "2026-09-03",
"venue_mode": "consolidated",
"note": null
}
}示例取自真实调用,为便于阅读裁剪了数组长度。
可能的错误
400参数不合法:日期格式、period 取值、批量标的数超上限等404标的或记录不存在429触发限流502上游数据源暂时不可用
在线试用
填好参数直接发一次真实请求。它会消耗你当前身份的额度,和线上调用完全一样。
还没发过请求。点上面的按钮试一次。
/v1/batch批量查询
一次查询多个标的
单个标的失败不会让整次请求失败:成功的结果在 results,失败原因逐条列在 errors 里,便于定位是哪个代码写错了,而不是整批一起重来。单次标的数上限由套餐决定,见上方额度表。
参数
| 参数 | 位置 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|---|
symbols | 请求体 | string[] | 必填 | — | 标的代码数组,按去重后计数 |
type | 请求体 | string | 选填 | quote | quote / static / kline |
period | 请求体 | string | 选填 | day | type=kline 时生效 |
adjust | 请求体 | string | 选填 | none | type=kline 时生效 |
days | 请求体 | integer | 选填 | — | type=kline 时每个标的返回的根数 |
请求示例
# 游客调用把这一行删掉即可
curl -s -X POST "https://us2.ninequantai.com/v1/batch" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"symbols": [
"QQQ.US",
"SPY.US",
"NOPE.US"
],
"type": "quote"
}'响应示例
{
"code": 0,
"message": "ok",
"data": {
"type": "quote",
"requested": 3,
"succeeded": 2,
"failed": 1,
"distribution_mode": "eod_only",
"results": {
"QQQ.US": { "symbol": "QQQ.US", "last": 717.67, "change_pct": 1.1886, "as_of": "2026-09-03", "...": "字段与 /v1/quote 相同" },
"SPY.US": { "...": "同上" }
},
"errors": [
{ "symbol": "NOPE.US", "code": 404, "message": "未找到标的 NOPE.US" }
]
}
}示例取自真实调用,为便于阅读裁剪了数组长度。
可能的错误
400参数不合法:日期格式、period 取值、批量标的数超上限等429触发限流502上游数据源暂时不可用
在线试用
填好参数直接发一次真实请求。它会消耗你当前身份的额度,和线上调用完全一样。
还没发过请求。点上面的按钮试一次。
/v1/symbols标的搜索
按代码或名称模糊搜索标的
代码精确命中排最前,其次是代码前缀,最后才是名称命中。不传 q 时返回热门标的,适合做搜索框的初始态。结果包含已退市标的,只是排序上让位于在营标的。
参数
| 参数 | 位置 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|---|
q | 查询 | string | 选填 | — | 关键词,匹配代码前缀或名称片段 |
market | 查询 | string | 选填 | US | 市场代码,当前仅支持 US |
limit | 查询 | integer | 选填 | 20 | 返回条数上限,默认 20,最大 100 |
请求示例
# 游客调用把这一行删掉即可
curl -s "https://us2.ninequantai.com/v1/symbols?q=QQ&market=US&limit=2" \
-H "Authorization: Bearer YOUR_API_KEY"响应示例
{
"code": 0,
"message": "ok",
"data": {
"query": "QQ",
"market": "US",
"total": 30,
"count": 2,
"items": [
{
"symbol": "QQQ.US",
"raw_symbol": "QQQ",
"market": "US",
"name": "纳斯达克100",
"asset_type": "etf",
"primary_venue": "XNAS",
"currency": "USD",
"listed_on": null,
"delisted_on": null,
"is_delisted": false,
"is_popular": true
},
{ "...": "共 2 条,其余略" }
]
}
}示例取自真实调用,为便于阅读裁剪了数组长度。
可能的错误
400参数不合法:日期格式、period 取值、批量标的数超上限等429触发限流502上游数据源暂时不可用
在线试用
填好参数直接发一次真实请求。它会消耗你当前身份的额度,和线上调用完全一样。
还没发过请求。点上面的按钮试一次。
/v1/backtest运行回测
用内置策略跑一次回测
与网页版回测共用同一套引擎,同参数同版本必然复现同结果。策略参数既可以放进 params 嵌套给,也可以直接平铺在顶层(两者同时出现时以 params 为准)。默认返回 K 线与成交明细,只要那十几个指标时把 include_klines / include_equity 置为 false,能省掉大部分带宽。
参数
| 参数 | 位置 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|---|
symbol | 请求体 | string | 必填 | — | 标的代码 |
strategy | 请求体 | string | 选填 | chandelier | 策略代码,见 GET /v1/strategies |
time_range | 请求体 | string | 选填 | 1Y | 预设区间:YTD / 1M / 3M / 6M / 1Y / 2Y / 3Y / 4Y / 5Y / 6Y / 7Y / 8Y / 10Y / MAX |
start | 请求体 | string | 选填 | — | 起始日期 YYYY-MM-DD,给了就忽略 time_range |
end | 请求体 | string | 选填 | — | 结束日期 YYYY-MM-DD |
params | 请求体 | object | 选填 | — | 策略参数对象,按 params_schema 校验 |
execute_on | 请求体 | string | 选填 | close | 成交时点:close=信号日收盘成交(默认);next_open=信号次日开盘成交(更接近实盘) |
cost | 请求体 | object | 选填 | — | 交易成本 {commission_rate, min_commission, slippage_bps}。不传则三项全为 0 —— 默认口径不计成本,结果里的 notes 会带 no_cost_model 说明这件事 |
include_klines | 请求体 | boolean | 选填 | true | 是否返回 K 线数组 |
include_trades | 请求体 | boolean | 选填 | true | 是否返回成交明细 |
include_equity | 请求体 | boolean | 选填 | true | 是否返回净值曲线 |
请求示例
# 游客调用把这一行删掉即可
curl -s -X POST "https://us2.ninequantai.com/v1/backtest" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"symbol": "QQQ.US",
"strategy": "chandelier",
"time_range": "1Y",
"params": {
"sma_period": 100
},
"execute_on": "close",
"include_klines": false,
"include_trades": true,
"include_equity": false
}'响应示例
{
"code": 0,
"message": "ok",
"data": {
"symbol": "QQQ.US",
"time_range": "1Y",
"strategy": "chandelier",
"engine_version": "1.1.0",
"venue_mode": "consolidated",
"start_date": "2025-09-08",
"end_date": "2026-09-04",
"num_trades": 8,
"win_rate": 50.0,
"total_pnl_pct": 8.56,
"annualized_pct": 8.66,
"max_drawdown_pct": 11.12,
"sharpe": 0.624,
"profit_factor": 1.84,
"buy_hold_pnl_pct": 24.2,
"excess_return_pct": -15.64,
"params": { "sma_period": 100, "atr_period": 14, "entry_mult": 2.0, "exit_mult": 3.0, "entry_mode": "chandelier", "trail_mode": "rolling", "...": "其余略" },
"cost": {
"commission_rate": 0.0,
"min_commission": 0.0,
"slippage_bps": 0.0,
"initial_capital": 100000.0,
"execute_on": "close"
},
"data_range": { "actual_start": "2025-09-08", "actual_end": "2026-09-04", "bars": 251, "truncated": false },
"data_freshness": { "distribution_mode": "eod_only", "as_of": "2026-09-04", "delayed": true },
"notes": [
{ "code": "no_cost_model", "level": "info", "message": "本次未计成本。实盘会有手续费与滑点…" }
],
"trades": [{ "seq": 1, "entry_date": "2025-09-08", "entry_price": 578.87, "exit_date": "2025-10-10", "exit_price": 589.5, "pnl_pct": 1.8363363103978347, "exit_reason": "stop", "...": "其余略" }],
"disclaimer": "数据与回测结果仅供研究参考,不构成任何投资建议。"
}
}示例取自真实调用,为便于阅读裁剪了数组长度。
可能的错误
400参数不合法:日期格式、period 取值、批量标的数超上限等404标的或记录不存在429触发限流502上游数据源暂时不可用
在线试用
填好参数直接发一次真实请求。它会消耗你当前身份的额度,和线上调用完全一样。
还没发过请求。点上面的按钮试一次。
机读文档
接口的 OpenAPI 描述随服务一起发布,可以直接导入 Postman / Insomnia,或者用它生成客户端代码。那份文档里的限流说明同样由服务端套餐配置渲染,不会与本页对不上。
数据时效声明
当前分发模式:eod_only当前提供 T+1 及更早的日线数据,盘中与实时数据暂未开放。
交易所对数据的对外转发有明确规则:T+1 及更早的收盘数据可以免费分发,实时与盘中数据需要额外授权。授权落实之前,我们宁可不提供,也不含糊其辞地给一份说不清来源的数据。授权到位后这里会改成延迟或实时,端点路径与字段一律不变。
每个行情响应都带 timeliness 字段,如实标注这批数据的时效 —— 能不能用于实时决策,看响应就知道,不必靠读文档猜。
数据口径随数据一起返回
每条行情都带 venue_mode。合并口径(consolidated)汇总全部交易场所,单交易所口径(single_venue)只有一家 —— 实测两者收盘价最大偏差 7.1%,单场成交量仅为合并量的 23%~34% 且随季度漂移,single_venue 因此一律拒绝进入回测。行情接口只返回合并口径;回测要取 2024-07 之前的美股历史时,会拼上主场常规时段重建口径(primary_session:收盘价取交易所官方收盘价,实测与合并口径逐日相等;开高低由主场分钟线重建,偏差 ≤0.03%;成交量为单场口径),并在结果里挂 mixed_session_source 把这件事说清楚。
标的库含已退市标的
退市标的照常可查,并标注 is_delisted。回测不做幸存者偏差过滤 —— 把退市公司剔掉,历史收益会凭空变好看。
平台没有下单能力
我们不对接任何券商实盘交易,接口里也不会出现下单、持仓、资金相关的端点。
免费开放
下面这些端点游客无需注册即可调用,按来源 IP 计额度。
可用端点
- GET/v1/quote/{symbol}报价
- GET/v1/kline/{symbol}历史 K 线
- GET/v1/intraday/{symbol}分时数据当前部署下不可用
- GET/v1/static/{symbol}静态信息
- POST/v1/batch批量查询
- GET/v1/symbols标的搜索
- POST/v1/backtest运行回测
限流规则(游客档)
- 报价30 次/分
- K 线30 次/分
- 分时不可用
- 静态信息30 次/分
- 标的搜索30 次/分
- 批量查询10 次/分
- 回测5 次/分
- 参数优化不可用
每个类别各有一个独立计数桶,不共用。数字来自 GET /api/plans 的游客档,与定价页同源。
注册后可提高用量
- 额度改按 API Key 计,不再与同一出口 IP 的其他人共享
- 单端点、批量与回测额度提高到注册档,具体数字见上方额度表
- 控制台可查每日调用量,回测记录可保存、分享
常见问题
命中本地库的历史 K 线与报价是毫秒级返回。本页顶部四格就是你这次打开页面时实测到的往返耗时,刷新一次即可自己复现。我们不写「小于 50 毫秒」这类没有测量依据的承诺。
当前只支持美股与美股 ETF。港股与 A 股在规划中,尚未实现,接口现在只接受 market=US。上线时间会在本页如实更新,不做没影的承诺。
不需要。所有 /v1 端点游客都能直接调用,按来源 IP 计额度(单端点 30 次/分、批量 10 次/分)。注册只要邮箱验证码,注册后按 API Key 计额度(单端点 60 次/分、批量 20 次/分),并且能在控制台看到调用记录。
每日美股收盘后更新,隔日(T+1)可取。当前提供 T+1 及更早的日线数据,盘中与实时数据暂未开放。数据已更新至 2026/09/04,合并口径日线自 2024/07/01 起入库。盘中与实时数据需要交易所额外授权,暂未开放。
curl -s "https://us2.ninequantai.com/v1/quote/AAPL.US"以游客身份直接调用,按来源 IP 计额度。
联系我们
接入问题、额度需求、数据合作都可以直接写信。
微信咨询
公众号与客服微信正在申请中
待公布