API 开发者文档
如需美股历史行情回放与复盘工具,欢迎访问 ReplayEdge,让市场研究与交易复盘更加直观高效。
Market Data API 为开发者提供专业、稳定的美股与期权市场数据服务,覆盖历史 K 线、逐笔成交、实时报价、市场快照和财经新闻等内容。您可以通过 REST API 查询历史数据,也可以通过 WebSocket 实时订阅行情,快速将市场数据接入量化研究、行情展示和交易分析等应用。
需要更便宜的 Massive 官方数据?欢迎访问 www.massiveprivateserver.site 拼车,$45/月 享官方全量 API 与 Flatfile 下载。
如有相关问题、服务咨询或购买需求,请联系:general.kim.vpn@gmail.com
交易时间说明
美股常规交易时间 (Regular Trading Hours)
美东时间 (ET): 周一至周五 09:30 — 16:00
API 返回时间 (UTC):
- 夏令时 (3月-11月): 13:30 — 20:00 UTC
- 冬令时 (11月-3月): 14:30 — 21:00 UTC
* 注意:API 返回的所有 t 字段(时间戳)均为 UTC 零时区 时间。
数据覆盖范围
股票数据 (Stocks)
历史起始: 2016年 至今
实时性: 实时数据无延迟
期权数据 (Options)
历史起始: 2024年 至今
实时性: 实时数据无延迟
鉴权说明
API 使用私有密钥进行鉴权。REST 请求需在 Header 中包含 X-API-KEY,WebSocket 需在连接后发送认证 JSON 包。
# REST Header 示例
headers = { "X-API-KEY": "bc_xxxxxxxxxxxx" }
# WebSocket 认证包示例
auth_payload = { "key": "bc_xxxxxxxxxxxx" }
Part 1. 历史数据查询 (REST API)
http://bcprivateserver.site/api/v1股票接口系列 (Stocks)
股票:历史 K 线 (Bars)
/market/stocks/bars
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| tickers | 是 | 股票代码列表,逗号分隔 (如: AAPL,TSLA) |
| interval | 是 |
支持的聚合跨度格式: • [1-59]Min (分钟)• [1-23]Hour (小时)• 1Day (天)• 1Week (周)• [1-12]Month (月)
|
| start_time | 否 | 起始时间。过滤等于或晚于此时间的数据 (RFC-3339 格式) |
| end_time | 否 | 结束时间。过滤等于或早于此时间的数据 (RFC-3339 格式) |
| max_rows | 否 | 返回条数限制 (默认 1000, 最大 10000) |
| price_adjust | 否 | 复权调整类型。可选值: raw (默认), split, dividend, all |
| page_token | 否 | 分页凭证。用于获取下一页数据 |
| data_feed | 否 | 数据源。可选值: iex, sip |
| order | 否 | 排序方式。可选值: asc (默认升序), desc (降序) |
响应数据结构 (Bars Schema)
| Attribute | Type | Description |
|---|---|---|
| t | date-time | 时间戳 (RFC-3339 格式,纳秒精度) |
| o | double | 开盘价 |
| h | double | 最高价 |
| l | double | 最低价 |
| c | double | 收盘价 |
| v | int64 | 成交量 |
| n | int64 | 该 K 线内的成交笔数 |
| vw | double | 成交量加权平均价 (VWAP) |
股票:最新 K 线 (Latest Bars)
/market/stocks/bars/latest
获取指定股票当前交易日(或最近一个交易日)的最新一根分钟级 K 线数据。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| tickers | 是 | 股票代码列表,逗号分隔 |
| data_feed | 否 | 数据源 (如: iex, sip) |
股票:历史逐笔成交 (Trades)
/market/stocks/trades
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| tickers | 是 | 股票代码列表,逗号分隔 |
| start_time | 否 | 起始时间 (RFC-3339 格式) |
| end_time | 否 | 结束时间 (RFC-3339 格式) |
| max_rows | 否 | 单次最大请求量 (默认 1000, 最大 10000) |
| page_token | 否 | 分页凭证 |
| data_feed | 否 | 数据源 (如: iex, sip) |
| order | 否 | 排序方式 (asc 或 desc) |
响应数据结构 (Trades Schema)
| Attribute | Type | Description |
|---|---|---|
| t | date-time | 时间戳 (纳秒精度) |
| x | string | 交易所代码 (可通过 Meta 接口查询) |
| p | double | 成交价格 |
| s | int64 | 成交数量 |
| c | array(string) | 成交条件集合 (可通过 Meta 接口查询) |
| i | int64 | 交易记录的系统唯一标识 ID |
| z | string | Tape (如: A, B, C) |
股票:最新成交 (Latest Trades)
/market/stocks/trades/latest
获取指定股票的全市场最新一笔成交记录。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| tickers | 是 | 股票代码列表,逗号分隔 |
| data_feed | 否 | 数据源 (如: iex, sip) |
股票:历史逐笔报价 (Quotes)
/market/stocks/quotes
获取历史全市场最优买卖报价(NBBO)的变动记录。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| tickers | 是 | 股票代码列表,逗号分隔 |
| start_time | 否 | 起始时间 (RFC-3339 格式) |
| end_time | 否 | 结束时间 (RFC-3339 格式) |
| max_rows | 否 | 单次最大请求量 (默认 1000, 最大 10000) |
| page_token | 否 | 分页凭证 |
| data_feed | 否 | 数据源 (如: iex, sip) |
| order | 否 | 排序方式 (asc 或 desc) |
响应数据结构 (Quotes Schema)
| Attribute | Type | Description |
|---|---|---|
| t | date-time | 时间戳 (纳秒精度) |
| ax | string | 卖方 (Ask) 交易所代码 |
| ap | double | 卖出价 (Ask Price) |
| as | int64 | 卖出数量 (Ask Size) |
| bx | string | 买方 (Bid) 交易所代码 |
| bp | double | 买入价 (Bid Price) |
| bs | int64 | 买入数量 (Bid Size) |
| c | array(string) | 报价条件集合 |
| z | string | Tape |
股票:最新报价 (Latest Quotes)
/market/stocks/quotes/latest
获取指定股票全市场实时的最新最优买卖报价(NBBO)。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| tickers | 是 | 股票代码列表,逗号分隔 |
| data_feed | 否 | 数据源 (如: iex, sip) |
股票:集合竞价 (Auctions)
/market/stocks/auctions
检索指定股票每日的开盘竞价 (Open Auction) 与 收盘竞价 (Closing Auction) 数据。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| tickers | 是 | 股票代码列表,逗号分隔 |
| start_time | 否 | 起始时间 (RFC-3339 格式) |
| end_time | 否 | 结束时间 (RFC-3339 格式) |
| max_rows | 否 | 限制返回天数 (默认 1000) |
| page_token | 否 | 分页凭证 |
| data_feed | 否 | 数据源 (如: iex, sip) |
| order | 否 | 排序方式 (asc 或 desc) |
股票:市场快照 (Snapshots)
/market/stocks/snapshots一次性获取包含最新成交、最新报价、分钟线、当日线、前一日线在内的全景快照数据。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| tickers | 是 | 股票代码列表,逗号分隔(若已在 URL 路径中指定 ticker 则可忽略此参数) |
| data_feed | 否 | 数据源 (如: iex, sip) |
股票:元数据字典 (Meta Conditions & Exchanges)
/market/stocks/meta/exchanges
期权接口系列 (Options)
期权:历史 K 线 (Bars)
/market/options/bars
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| contracts | 是 | 期权代码列表,逗号分隔 (OSI 格式,如: AAPL250609C00200000) |
| interval | 是 |
支持的聚合跨度格式: • [1-59]Min (分钟)• [1-23]Hour (小时)• 1Day (天)• 1Week (周)• [1-12]Month (月)
|
| start_time | 否 | 起始时间。过滤等于或晚于此时间的数据 (RFC-3339 格式) |
| end_time | 否 | 结束时间。过滤等于或早于此时间的数据 (RFC-3339 格式) |
| max_rows | 否 | 返回条数限制 (默认 1000, 最大 10000) |
| page_token | 否 | 分页凭证。用于获取下一页数据 |
| data_feed | 否 | 数据源。可选值: opra, indicative |
| order | 否 | 排序方式。可选值: asc (默认升序), desc (降序) |
响应数据结构 (Bars Schema)
| Attribute | Type | Description |
|---|---|---|
| t | date-time | 时间戳 (RFC-3339 格式) |
| o | double | 开盘价 |
| h | double | 最高价 |
| l | double | 最低价 |
| c | double | 收盘价 |
| v | int64 | 成交量 |
| n | int64 | 该 K 线内的成交笔数 |
| vw | double | 成交量加权平均价 (VWAP) |
期权:历史逐笔成交 (Trades)
/market/options/trades
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| contracts | 是 | 期权代码列表,逗号分隔 (OSI 格式) |
| start_time | 否 | 起始时间 (RFC-3339 格式) |
| end_time | 否 | 结束时间 (RFC-3339 格式) |
| max_rows | 否 | 单次最大请求量 (默认 1000, 最大 10000) |
| page_token | 否 | 分页凭证 |
| data_feed | 否 | 数据源 (可选值: opra, indicative) |
| order | 否 | 排序方式 (asc 或 desc) |
期权:最新成交 (Latest Trades)
/market/options/trades/latest
获取指定期权全市场最新的一笔成交记录。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| contracts | 是 | 期权代码列表,逗号分隔 (OSI 格式) |
| data_feed | 否 | 数据源 (可选值: opra, indicative) |
期权:最新报价 (Latest Quotes)
/market/options/quotes/latest
获取指定期权全市场实时的最新最优买卖报价(NBBO)。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| contracts | 是 | 期权代码列表,逗号分隔 (OSI 格式) |
| data_feed | 否 | 数据源 (可选值: opra, indicative) |
响应数据结构 (Quotes Schema)
| Attribute | Type | Description |
|---|---|---|
| t | date-time | 时间戳 (纳秒精度) |
| ax | string | 卖方 (Ask) 交易所代码 |
| ap | double | 卖出价 (Ask Price) |
| as | int64 | 卖出数量 (Ask Size) |
| bx | string | 买方 (Bid) 交易所代码 |
| bp | double | 买入价 (Bid Price) |
| bs | int64 | 买入数量 (Bid Size) |
| c | array(string) | 报价条件集合 |
期权:市场快照 (Snapshots)
/market/options/snapshots
一次性获取特定期权合约的最新成交、最新报价、隐含波动率 (IV) 及希腊字母 (Greeks) 等组合快照。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| contracts | 是 | 期权代码列表,逗号分隔 (OSI 格式) |
| data_feed | 否 | 数据源 (如: opra, indicative) |
响应数据结构补充
| Attribute | Type | Description |
|---|---|---|
| latestTrade | object | 最新成交数据 (Schema 同 Trades) |
| latestQuote | object | 最新报价数据 (Schema 同 Quotes) |
| impliedVolatility | double | 隐含波动率 (IV) |
| greeks | object | 包含 delta, gamma, rho, theta, vega 的计算值 |
期权:期权链快照 (Option Chain)
/market/options/snapshots/{underlying_symbol}
获取指定底层资产 (如股票标的) 所有衍生期权合约的完整快照数据集合(期权链)。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| data_feed | 否 | 数据源 (如: opra, indicative) |
| strike_min | 否 | 筛选行权价大于或等于该值的合约 |
| strike_max | 否 | 筛选行权价小于或等于该值的合约 |
| expiry | 否 | 筛选精确到期日的合约 (格式: YYYY-MM-DD) |
| expiry_start | 否 | 筛选到期日晚于或等于该日期的合约 |
| expiry_end | 否 | 筛选到期日早于或等于该日期的合约 |
| root | 否 | 用于过滤特定标的根符号 (如因分拆/合并导致不同 root_symbol) |
| option_type | 否 | 指定期权类型。可选值:call (看涨), put (看跌) |
| max_rows | 否 | 限制返回合约数 (最大默认规则参照系统配置) |
| page_token | 否 | 分页凭证 |
期权:元数据字典 (Meta Conditions & Exchanges)
/market/options/meta/exchanges
/meta/exchanges 请求参数
无需传递查询参数,直接返回交易所映射字典。
新闻资讯接口 (News)
获取新闻文章 (News Articles)
/market/news
返回涵盖股票和加密货币的最新新闻文章。默认情况下,返回最新的 10 篇新闻文章。
请求参数
| 参数名 | 必填 | 描述与格式 |
|---|---|---|
| start | 否 | 区间的起始时间(包含)。格式:RFC-3339 或 YYYY-MM-DD。 |
| end | 否 | 区间的结束时间(包含)。格式:RFC-3339 或 YYYY-MM-DD。 |
| sort | 否 | 按更新时间排序文章。可选值:asc (升序), desc (降序)。默认为 desc。 |
| symbols | 否 | 查询新闻的相关代码列表,逗号分隔 (例如: AAPL,TSLA)。 |
| limit | 否 | 每页返回的新闻条数限制 (范围: 1 至 50)。 |
| include_content | 否 | 是否包含新闻文章的具体正文内容 (布尔值)。 |
| exclude_contentless | 否 | 是否排除没有正文内容的新闻文章 (布尔值)。 |
| page_token | 否 | 分页凭证。 |
响应数据结构 (News Article Schema)
| Attribute | Type | Description |
|---|---|---|
| id | int64 | 新闻文章的唯一 ID |
| headline | string | 新闻文章的标题或大标题 |
| author | string | 新闻文章的原始作者 |
| created_at | date-time | 文章创建时间 (RFC-3339 格式) |
| updated_at | date-time | 文章最后更新时间 (RFC-3339 格式) |
| summary | string | 文章摘要文本(可能是正文的第一句话) |
| content | string | 新闻文章的正文内容(可能包含 HTML 标签) |
| url | uri | null | 文章的原始链接 URL(如果适用) |
| images | array(object) | 与文章相关的图片列表。对象包含 size (枚举: thumb, small, large) 和 url 字段 |
| symbols | array(string) | 新闻中相关或提及的股票/加密货币代码列表 |
| source | string | 新闻的来源机构 |
分页处理 (Next Page Token)
当单次查询结果超过 max_rows 时,响应体中会包含 next_page_token。将此值作为下一次请求的 page_token 参数即可获取后续数据。
Python REST 实例代码
1. 获取股票历史 K 线
import requests
url = "http://bcprivateserver.site/api/v1/market/stocks/bars"
headers = { "X-API-KEY": "YOUR_API_KEY" }
params = {
"tickers": ["QQQ", "AAPL"], #可以一次请求多个股票代码
"interval": "1Day",
"start_time": "2016-01-01T00:00:00Z"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())
2. 获取新闻资讯
import requests
url = "http://bcprivateserver.site/api/v1/market/news"
headers = {"X-API-KEY": "YOUR_API_KEY"}
params = {
"tickers": ["AAPL", "TSLA"], # 可一次查询多个标的
"max_rows": 5, # 返回5条新闻
"order": "desc", # 按最新排序
"include_content": "true" # 返回正文内容
}
response = requests.get(url, headers=headers, params=params)
print(response.json())
Part 2. 实时数据流 (WebSocket API)
ws://bcprivateserver.site/streamWebSocket 接入说明
股票实时 K 线推送结构 (Bars - "b")
| Attribute | Type | Description |
|---|---|---|
| T | string | 消息类型,始终为 "b" (Bar) |
| S | string | 股票或期权代码 |
| o | number | 开盘价 |
| h | number | 最高价 |
| l | number | 最低价 |
| c | number | 收盘价 |
| v | int | 成交量 |
| vw | number | 成交量加权平均价 (VWAP) |
| n | int | 该 K 线内的成交笔数 |
| t | string | 时间戳 (RFC-3339 格式) |
股票实时成交推送结构 (Trades - "t")
| Attribute | Type | Description |
|---|---|---|
| T | string | 消息类型,始终为 "t" (Trade) |
| S | string | 股票代码 |
| i | int | 交易 ID |
| x | string | 发生交易的交易所代码 |
| p | number | 成交价格 |
| s | int | 成交数量 |
| c | array(string) | 交易条件 |
| t | string | 时间戳 (RFC-3339 格式,纳秒精度) |
| z | string | Tape |
股票实时报价推送结构 (Quotes - "q")
| Attribute | Type | Description |
|---|---|---|
| T | string | 消息类型,始终为 "q" (Quote) |
| S | string | 股票代码 |
| ax | string | 卖方 (Ask) 交易所代码 |
| ap | number | 卖出价 (Ask Price) |
| as | int | 卖出量 (Ask Size,以整手为单位) |
| bx | string | 买方 (Bid) 交易所代码 |
| bp | number | 买入价 (Bid Price) |
| bs | int | 买入量 (Bid Size,以整手为单位) |
| c | array(string) | 报价条件 |
| t | string | 时间戳 (RFC-3339 格式,纳秒精度) |
| z | string | Tape |
期权实时成交结构 (Trades - "t")
| Attribute | Type | Description |
|---|---|---|
| T | string | 消息类型,始终为 "t" (Trade) |
| S | string | 期权代码 (OSI 格式) |
| t | string | 时间戳 (RFC-3339 格式,纳秒精度) |
| p | number | 成交价格 |
| s | int | 成交数量 (张数) |
| x | string | 成交所在的交易所代码 |
| c | string | 成交条件 |
期权实时报价结构 (Quotes - "q")
| Attribute | Type | Description |
|---|---|---|
| T | string | 消息类型,始终为 "q" (Quote) |
| S | string | 期权代码 (OSI 格式) |
| t | string | 时间戳 (RFC-3339 格式,纳秒精度) |
| bx / ax | string | 买方 (Bid) / 卖方 (Ask) 交易所代码 |
| bp / ap | number | 买入价 (Bid Price) / 卖出价 (Ask Price) |
| bs / as | int | 买入量 (Bid Size) / 卖出量 (Ask Size) |
| c | string | 报价条件 |
WebSocket 实时订阅实例代码
import asyncio
import websockets
import json
from datetime import datetime
# ================= 配置区 =================
WS_URL = "ws://bcprivateserver.site/stream"
MY_API_KEY = "bc_xxxxxxxxxxxx"
SUB_CONFIG = {
"action": "subscribe",
"stocks": {
# 订阅股票实时 K 线数据 (Real-time Bars)
"bars":["MSFT", "TSLA"]
},
"options": {
# 订阅期权实时成交数据 (Real-time Trades)
"trades":["QQQ260224C00605000"],
# 订阅期权实时逐笔报价 (Real-time Quotes)
"quotes":["QQQ260224C00605000"]
}
}
async def market_data_stream():
print(f"正在连接行情网关: {WS_URL}")
try:
async with websockets.connect(WS_URL) as websocket:
print("连接成功,开始身份验证...")
# 1. 身份验证
await websocket.send(json.dumps({"key": MY_API_KEY}))
# 2. 接收欢迎信息
welcome_msg = await websocket.recv()
print(f"服务器返回: {welcome_msg}")
# 3. 发送订阅指令
await websocket.send(json.dumps(SUB_CONFIG))
print(f"订阅指令已发送: {SUB_CONFIG}")
print("-" * 80)
# 4. 持续接收数据
while True:
message = await websocket.recv()
data_list = json.loads(message)
for item in data_list:
msg_type = item.get("T")
symbol = item.get("S")
time_str = item.get("t")
# 股票 / ETF K线
if msg_type == "b":
print(
f"[K线] {symbol:<6} | "
f"开:{item.get('o'):<8} 高:{item.get('h'):<8} "
f"低:{item.get('l'):<8} 收:{item.get('c'):<8} "
f"量:{item.get('v'):<8} 时间:{time_str}"
)
# 期权成交
elif msg_type == "t":
print(
f"[成交] {symbol:<20} | "
f"价格:{item.get('p'):<8} 数量:{item.get('s'):<6} "
f"交易所:{item.get('x'):<4} 时间:{time_str}"
)
# 期权报价 Quote
elif msg_type == "q":
bid_price = item.get("bp")
bid_size = item.get("bs")
ask_price = item.get("ap")
ask_size = item.get("as")
spread = None
if bid_price and ask_price:
spread = round(ask_price - bid_price, 4)
print(
f"[报价] {symbol:<20} | "
f"Bid:{bid_price} x {bid_size} | "
f"Ask:{ask_price} x {ask_size} | "
f"Spread:{spread} | 时间:{time_str}"
)
# 系统通知
elif msg_type == "success":
print(f"系统通知: {item.get('msg')}")
# 错误
elif msg_type == "error":
print(f"错误提示: {item.get('msg')}")
print("服务器可能已断开连接。")
except websockets.ConnectionClosed:
print("连接已被服务器关闭。")
except Exception as e:
print(f"发生异常: {e}")
if __name__ == "__main__":
try:
asyncio.run(market_data_stream())
except KeyboardInterrupt:
print("\n已手动停止订阅。")
错误码定义
| 状态码 | 定义 | 说明 |
|---|---|---|
| 401 | Unauthorized | API Key 无效或未提供 |
| 429 | Rate Limit | REST 请求频率过快 (限制: 500次/分钟) |
| 1008 | Policy Violation | WebSocket 订阅了非白名单股票或期权超限 |
| 502 | Unknown Error | 不明故障 |