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)

Base URL: http://bcprivateserver.site/api/v1

股票接口系列 (Stocks)

股票:历史 K 线 (Bars)

GET /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)

AttributeTypeDescription
tdate-time时间戳 (RFC-3339 格式,纳秒精度)
odouble开盘价
hdouble最高价
ldouble最低价
cdouble收盘价
vint64成交量
nint64该 K 线内的成交笔数
vwdouble成交量加权平均价 (VWAP)

股票:最新 K 线 (Latest Bars)

GET /market/stocks/bars/latest

获取指定股票当前交易日(或最近一个交易日)的最新一根分钟级 K 线数据。

请求参数

参数名必填描述与格式
tickers股票代码列表,逗号分隔
data_feed数据源 (如: iex, sip)

股票:历史逐笔成交 (Trades)

GET /market/stocks/trades

请求参数

参数名必填描述与格式
tickers股票代码列表,逗号分隔
start_time起始时间 (RFC-3339 格式)
end_time结束时间 (RFC-3339 格式)
max_rows单次最大请求量 (默认 1000, 最大 10000)
page_token分页凭证
data_feed数据源 (如: iex, sip)
order排序方式 (ascdesc)

响应数据结构 (Trades Schema)

AttributeTypeDescription
tdate-time时间戳 (纳秒精度)
xstring交易所代码 (可通过 Meta 接口查询)
pdouble成交价格
sint64成交数量
carray(string)成交条件集合 (可通过 Meta 接口查询)
iint64交易记录的系统唯一标识 ID
zstringTape (如: A, B, C)

股票:最新成交 (Latest Trades)

GET /market/stocks/trades/latest

获取指定股票的全市场最新一笔成交记录。

请求参数

参数名必填描述与格式
tickers股票代码列表,逗号分隔
data_feed数据源 (如: iex, sip)

股票:历史逐笔报价 (Quotes)

GET /market/stocks/quotes

获取历史全市场最优买卖报价(NBBO)的变动记录。

请求参数

参数名必填描述与格式
tickers股票代码列表,逗号分隔
start_time起始时间 (RFC-3339 格式)
end_time结束时间 (RFC-3339 格式)
max_rows单次最大请求量 (默认 1000, 最大 10000)
page_token分页凭证
data_feed数据源 (如: iex, sip)
order排序方式 (ascdesc)

响应数据结构 (Quotes Schema)

AttributeTypeDescription
tdate-time时间戳 (纳秒精度)
axstring卖方 (Ask) 交易所代码
apdouble卖出价 (Ask Price)
asint64卖出数量 (Ask Size)
bxstring买方 (Bid) 交易所代码
bpdouble买入价 (Bid Price)
bsint64买入数量 (Bid Size)
carray(string)报价条件集合
zstringTape

股票:最新报价 (Latest Quotes)

GET /market/stocks/quotes/latest

获取指定股票全市场实时的最新最优买卖报价(NBBO)。

请求参数

参数名必填描述与格式
tickers股票代码列表,逗号分隔
data_feed数据源 (如: iex, sip)

股票:集合竞价 (Auctions)

GET /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排序方式 (ascdesc)

股票:市场快照 (Snapshots)

GET /market/stocks/snapshots

一次性获取包含最新成交、最新报价、分钟线、当日线、前一日线在内的全景快照数据。

请求参数

参数名必填描述与格式
tickers股票代码列表,逗号分隔(若已在 URL 路径中指定 ticker 则可忽略此参数)
data_feed数据源 (如: iex, sip)

股票:元数据字典 (Meta Conditions & Exchanges)

GET /market/stocks/meta/exchanges

期权接口系列 (Options)

期权:历史 K 线 (Bars)

GET /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)

AttributeTypeDescription
tdate-time时间戳 (RFC-3339 格式)
odouble开盘价
hdouble最高价
ldouble最低价
cdouble收盘价
vint64成交量
nint64该 K 线内的成交笔数
vwdouble成交量加权平均价 (VWAP)

期权:历史逐笔成交 (Trades)

GET /market/options/trades

请求参数

参数名必填描述与格式
contracts期权代码列表,逗号分隔 (OSI 格式)
start_time起始时间 (RFC-3339 格式)
end_time结束时间 (RFC-3339 格式)
max_rows单次最大请求量 (默认 1000, 最大 10000)
page_token分页凭证
data_feed数据源 (可选值: opra, indicative)
order排序方式 (ascdesc)

期权:最新成交 (Latest Trades)

GET /market/options/trades/latest

获取指定期权全市场最新的一笔成交记录。

请求参数

参数名必填描述与格式
contracts期权代码列表,逗号分隔 (OSI 格式)
data_feed数据源 (可选值: opra, indicative)

期权:最新报价 (Latest Quotes)

GET /market/options/quotes/latest

获取指定期权全市场实时的最新最优买卖报价(NBBO)。

请求参数

参数名必填描述与格式
contracts期权代码列表,逗号分隔 (OSI 格式)
data_feed数据源 (可选值: opra, indicative)

响应数据结构 (Quotes Schema)

AttributeTypeDescription
tdate-time时间戳 (纳秒精度)
axstring卖方 (Ask) 交易所代码
apdouble卖出价 (Ask Price)
asint64卖出数量 (Ask Size)
bxstring买方 (Bid) 交易所代码
bpdouble买入价 (Bid Price)
bsint64买入数量 (Bid Size)
carray(string)报价条件集合

期权:市场快照 (Snapshots)

GET /market/options/snapshots

一次性获取特定期权合约的最新成交、最新报价、隐含波动率 (IV) 及希腊字母 (Greeks) 等组合快照。

请求参数

参数名必填描述与格式
contracts期权代码列表,逗号分隔 (OSI 格式)
data_feed数据源 (如: opra, indicative)

响应数据结构补充

AttributeTypeDescription
latestTradeobject最新成交数据 (Schema 同 Trades)
latestQuoteobject最新报价数据 (Schema 同 Quotes)
impliedVolatilitydouble隐含波动率 (IV)
greeksobject包含 delta, gamma, rho, theta, vega 的计算值

期权:期权链快照 (Option Chain)

GET /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)

GET /market/options/meta/exchanges

/meta/exchanges 请求参数

无需传递查询参数,直接返回交易所映射字典。

新闻资讯接口 (News)

获取新闻文章 (News Articles)

GET /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)

AttributeTypeDescription
idint64新闻文章的唯一 ID
headlinestring新闻文章的标题或大标题
authorstring新闻文章的原始作者
created_atdate-time文章创建时间 (RFC-3339 格式)
updated_atdate-time文章最后更新时间 (RFC-3339 格式)
summarystring文章摘要文本(可能是正文的第一句话)
contentstring新闻文章的正文内容(可能包含 HTML 标签)
urluri | null文章的原始链接 URL(如果适用)
imagesarray(object)与文章相关的图片列表。对象包含 size (枚举: thumb, small, large) 和 url 字段
symbolsarray(string)新闻中相关或提及的股票/加密货币代码列表
sourcestring新闻的来源机构

分页处理 (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)

Stream URL: ws://bcprivateserver.site/stream

WebSocket 接入说明

股票实时 K 线推送结构 (Bars - "b")

AttributeTypeDescription
Tstring消息类型,始终为 "b" (Bar)
Sstring股票或期权代码
onumber开盘价
hnumber最高价
lnumber最低价
cnumber收盘价
vint成交量
vwnumber成交量加权平均价 (VWAP)
nint该 K 线内的成交笔数
tstring时间戳 (RFC-3339 格式)

股票实时成交推送结构 (Trades - "t")

AttributeTypeDescription
Tstring消息类型,始终为 "t" (Trade)
Sstring股票代码
iint交易 ID
xstring发生交易的交易所代码
pnumber成交价格
sint成交数量
carray(string)交易条件
tstring时间戳 (RFC-3339 格式,纳秒精度)
zstringTape

股票实时报价推送结构 (Quotes - "q")

AttributeTypeDescription
Tstring消息类型,始终为 "q" (Quote)
Sstring股票代码
axstring卖方 (Ask) 交易所代码
apnumber卖出价 (Ask Price)
asint卖出量 (Ask Size,以整手为单位)
bxstring买方 (Bid) 交易所代码
bpnumber买入价 (Bid Price)
bsint买入量 (Bid Size,以整手为单位)
carray(string)报价条件
tstring时间戳 (RFC-3339 格式,纳秒精度)
zstringTape

期权实时成交结构 (Trades - "t")

AttributeTypeDescription
Tstring消息类型,始终为 "t" (Trade)
Sstring期权代码 (OSI 格式)
tstring时间戳 (RFC-3339 格式,纳秒精度)
pnumber成交价格
sint成交数量 (张数)
xstring成交所在的交易所代码
cstring成交条件

期权实时报价结构 (Quotes - "q")

AttributeTypeDescription
Tstring消息类型,始终为 "q" (Quote)
Sstring期权代码 (OSI 格式)
tstring时间戳 (RFC-3339 格式,纳秒精度)
bx / axstring买方 (Bid) / 卖方 (Ask) 交易所代码
bp / apnumber买入价 (Bid Price) / 卖出价 (Ask Price)
bs / asint买入量 (Bid Size) / 卖出量 (Ask Size)
cstring报价条件

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已手动停止订阅。")

错误码定义

状态码定义说明
401UnauthorizedAPI Key 无效或未提供
429Rate LimitREST 请求频率过快 (限制: 500次/分钟)
1008Policy ViolationWebSocket 订阅了非白名单股票或期权超限
502Unknown Error不明故障