Skip to content

Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

A股全市场行情获取

个人量化开发必备,快速获取 A股 全市场5000+股票和场内 ETF 基金的实时行情数据,基于 MQTT 协议提供实时、稳定、高效的行情数据推送服务,免费获取常见 A股 指数的实时行情数据。

准备工作

  1. 注册 tendQuant 账户
  2. 在管理应用中创建应用

行情接口

MQTT 连接配置

本文档提供了 MQTT Broker 的连接配置信息,支持两种协议连接:WSS (Secure WebSocket)MQTT (TCP)

根据您的网络环境或客户端类型,请选择以下任意一种地址进行连接。

如果需要通过 OpenClaw 接入行情服务,推荐让其使用 Node.js 进行连接,并把下方的连接信息,以及你应用的用户名,密码,还有需要订阅的主题 topic 发送给你的 OpenClaw,它会自动连接行情服务,并订阅你需要的主题。

协议连接地址端口适用场景
WSSquant.top2189.cn/mqtt443适用于 Web 浏览器、微信小程序、Python接入。
MQTTquant.top2189.cn1883适用于服务端、IoT 设备或原生应用,基于标准 TCP 连接。

接口概览

订阅目标数据类型主题格式说明
股票成交明细lv1/tradeList/{code}单只股票成交明细
lv1/tradeList/#所有股票成交明细
股票行情快照lv1/snapshots/{code}单只股票行情快照
lv1/snapshots/#所有股票行情快照
股票五档盘口lv1/orderBook/{code}单只股票五档盘口
lv1/orderBook/#所有股票五档盘口
ETF 基金成交明细lv1/tradeList_etf/{code}单个 ETF 成交明细
lv1/tradeList_etf/#所有 ETF 成交明细
ETF 基金行情快照lv1/snapshots_etf/{code}单个 ETF 行情快照
lv1/snapshots_etf/#所有 ETF 行情快照
ETF 基金五档盘口lv1/orderBook_etf/{code}单个 ETF 五档盘口
lv1/orderBook_etf/#所有 ETF 五档盘口
指数指数行情lv1/index/{code}单个指数行情快照
lv1/index/#常见指数行情快照

以下是支持的 ETF 基金和指数列表,请根据需要选择订阅。

ETF列表

指数列表

注意 对于需要订阅大量股票的场景,推荐使用"批量行情"接口,一次请求即可订阅全市场股票,大幅降低连接数和成本。

认证方式

根据用户名和密码进行身份验证。

测试账号:a2dZMmrflhY4MwRN

测试密码:6WUc6unvD4G3VVPx4K6t2Nl5mVq4fjtu

注意:此账号为应用账号,用于 API 调用,非平台账号,正式使用时请先注册平台账号再创建应用,测试账号最大连接数为20,超过20将会断开连接。

允许权限:

服务类型订阅类型最大订阅
lv1 成交明细单股票50
全市场5
lv1 行情快照单股票50
全市场5
lv1 五档盘口单股票50
全市场5
lv1 指数行情单股票50
全市场5

订阅行情

通过 MQTT 订阅主题来接收实时行情数据,以下使用Python SDK演示:

初始化客户端

client=Client(username="a2dZMmrflhY4MwRN", password="6WUc6unvD4G3VVPx4K6t2Nl5mVq4fjtu") 

定义消息处理回调函数

defon_message(client, userdata, msg):
print(f">>> 收到主题数据 {msg.topic}: {msg.payload.decode()}")

连接客户端

client.connect(on_message) # 传递消息处理回调函数

单只股票订阅

client.subscribe("lv1/tradeList/000001")

批量订阅

client.subscribe("lv1/tradeList/#")

取消订阅

client.unsubscribe('lv1/tradeList/000001')

注意事项

  • 应用最大支持的订阅数取决于您选择的订阅套餐
  • 取消订阅可以释放资源,不再占用订阅数
  • 如果需要获取大量股票数据,建议使用批量订阅接口

成交明细

主题:lv1/tradeList/000001

{
"price": 10.88,
"volume": 284,
"count": 22,
"timestamp": 1773903360
}
字段名类型说明
priceFloat成交价格
volumeFloat成交数量
countInt成交笔数
timestampLong成交时间戳

行情快照

主题:lv1/snapshots/000001

{
"currentPrice": 10.96,
"stockCode": "000001",
"stockName": "平安银行",
"yesterdayPrice": 11.03,
"changePercent": -0.63,
"change": -0.07,
"peTtm": 4.93,
"pb": 0.47,
"turnoverRate": 0.41,
"highPrice": 11.04,
"lowPrice": 10.91,
"openPrice": 11.04,
"totalMarketValue": 212690000000,
"circulationMarketValue": 212690000000,
"circulationShares": 19410000000,
"turnover": 868000000,
"totalVolume": 791100,
"averagePrice": 10.97,
"amplitude": 1.18,
"volumeRatio": 0.96,
"peDynamic": 4.16,
"turnoverRealRate": 0.92,
"limitUp": 12.13,
"limitDown": 9.93
}
字段名类型说明
currentPriceFloat当前股价
stockCodeString股票代码
stockNameString股票名称
yesterdayPriceFloat昨日收盘价
changePercentFloat涨跌幅(单位:%)
changeFloat涨跌额,当前价-昨日收盘价
peTtmFloat滚动市盈率(单位:%,亏损显示 0)
pbFloat市净率(PB),股价与每股净资产的比值
turnoverRateFloat换手率(单位:%)
highPriceFloat最高价
lowPriceFloat最低价
openPriceFloat开盘价
totalMarketValueLong总市值
circulationMarketValueLong流通市值
circulationSharesLong流通股本(单位:股)
turnoverLong成交金额,核心交易规模指标
totalVolumeLong总成交量(单位:手)
averagePriceFloat成交均价
amplitudeFloat振幅(单位:%)
volumeRatioFloat量比,成交量相对过去5日的变化
peDynamicFloat动态市盈率(单位:%,亏损显示 0)
turnoverRealRateFloat实际换手率(单位:%)
limitUpFloat涨停价
limitDownFloat跌停价

五档盘口

主题:lv1/orderBook/000001

{
"bid": {
"bid5": {"volume": 4373, "price": 10.92},
"bid4": {"volume": 3407, "price": 10.93},
"bid3": {"volume": 1527, "price": 10.94},
"bid2": {"volume": 4743, "price": 10.95},
"bid1": {"volume": 128.03, "price": 10.96}
},
"ask": {
"ask5": {"volume": 4254.2, "price": 11.01},
"ask4": {"volume": 5635, "price": 11},
"ask3": {"volume": 6435, "price": 10.99},
"ask2": {"volume": 5178, "price": 10.98},
"ask1": {"volume": 37, "price": 10.97}
}
}
字段名类型说明
bidObject买盘(包含5个档位)
bid1-bid5Object买盘1-5档位
askObject卖盘(包含5个档位)
ask1-ask5Object卖盘1-5档位
volumeFloat委托量(手)
priceFloat委托价格

指数行情

主题:lv1/index/SZZS

{
"indexName": "上证指数",
"amplitude": 1.05,
"highPrice": 4065.37,
"yesterdayPrice": 4049.91,
"changePercent": 0.32,
"currentPrice": 4062.98,
"openPrice": 4053.31,
"change": 13.07,
"lowPrice": 4023.03,
"volumeRatio": 0.84
}
字段名类型说明
indexNameString指数名称
amplitudeFloat振幅
highPriceFloat最高价
yesterdayPriceFloat昨日收盘价
changePercentFloat涨跌幅
currentPriceFloat当前价
openPriceFloat开盘价
changeFloat涨跌额
lowPriceFloat最低价
volumeRatioFloat量比

注:ETF 数据和股票格式一致,这里不具体给出。

示例代码

我们提供多种语言的官方 SDK,帮助您快速集成 tendQuant 服务。

Python SDK

Python SDK 简化了数据分析和量化交易的开发。

安装

pip install tendquant

CLI 使用

# 打开 cmd 命令行,输入以下命令
tendquant -u a2dZMmrflhY4MwRN -p 6WUc6unvD4G3VVPx4K6t2Nl5mVq4fjtu -s lv1/orderBook/000001

使用示例

importtimefromtendquantimportClientusername="a2dZMmrflhY4MwRN"password="6WUc6unvD4G3VVPx4K6t2Nl5mVq4fjtu"# 创建MQTT客户端client=Client(
username=username,
password=password
)
# 自定义消息处理回调函数defon_message(client, userdata, msg):
print(f">>> 收到主题数据 {msg.topic}: {msg.payload.decode()}")
# 连接到MQTT brokerclient.connect(on_message)
# 订阅主题client.subscribe("lv1/tradeList/000001")
try:
whileTrue:
# 保持连接time.sleep(1)
exceptKeyboardInterrupt:
client.disconnect() # 断开连接

JavaScript SDK

JavaScript SDK 支持浏览器环境,可以在浏览器中直接使用。

引入 SDK

<scriptsrc="https://tendquant.cn/sdk/tendquant.js"></script>

使用示例

(async()=>{console.log("开始初始化");// 初始化客户端配置constclient=newTendQuant({username: 'a2dZMmrflhY4MwRN',password: '6WUc6unvD4G3VVPx4K6t2Nl5mVq4fjtu',});// 设置事件监听client.onConnected(()=>{console.log('[System] 连接成功');});client.onConnectionLost((responseObject)=>{console.error('[System] 连接丢失:',responseObject.errorMessage);});client.onFailure((err)=>{console.error('[System] 连接失败:',err.errorMessage);});// 连接服务器try{awaitclient.connect();console.log('[System] 正在订阅主题...');consttopic='lv1/tradeList/#';awaitclient.subscribe(topic);console.log('[System] 已订阅: '+topic);client.onMessage(topic,(message)=>{// 这里会收到所有股票的推送,直接打印console.log(message.destinationName,message.payloadString);});}catch(error){console.error("[System] 初始化错误:",error);}})();

Java SDK

Java SDK 提供完整的行情数据接入功能。

依赖

<repositories>
<repository>
<id>Eclipse Paho Repository</id>
<url>https://repo.eclipse.org/content/repositories/paho-releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.mqttv5.client</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>

使用示例

importorg.eclipse.paho.mqttv5.client.IMqttToken;
importorg.eclipse.paho.mqttv5.client.MqttCallback;
importorg.eclipse.paho.mqttv5.client.MqttClient;
importorg.eclipse.paho.mqttv5.client.MqttConnectionOptions;
importorg.eclipse.paho.mqttv5.client.MqttDisconnectResponse;
importorg.eclipse.paho.mqttv5.common.MqttException;
importorg.eclipse.paho.mqttv5.common.MqttMessage;
importorg.eclipse.paho.mqttv5.common.packet.MqttProperties;
importjava.util.UUID;
publicclassJavaDemoMQTTV5 {
publicstaticStringgetClientId() {
return"java-" + UUID.randomUUID().toString().replace("-", "").substring(20);
}
publicstaticvoidmain(String[] args) {
Stringusername = "a2dZMmrflhY4MwRN";
Stringpassword = "6WUc6unvD4G3VVPx4K6t2Nl5mVq4fjtu";
// 订阅等级,建议为2,消息仅送达一次,通过四次握手确保不丢不重intsubQos = 2;
try {
MqttClientclient = newMqttClient("wss://quant.top2189.cn/mqtt", getClientId());
MqttConnectionOptionsoptions = newMqttConnectionOptions();
options.setUserName(username);
options.setPassword(password.getBytes());
client.setCallback(newMqttCallback() {
publicvoidconnectComplete(booleanreconnect, StringserverURI) {
System.out.println("connected to: " + serverURI);
}
publicvoiddisconnected(MqttDisconnectResponsedisconnectResponse) {
System.out.println("disconnected: " + disconnectResponse.getReasonString());
}
publicvoiddeliveryComplete(IMqttTokentoken) {
System.out.println("deliveryComplete: " + token.isComplete());
}
publicvoidmessageArrived(Stringtopic, MqttMessagemessage) throwsException {
// 在这里处理业务逻辑System.out.println("topic: " + topic);
System.out.println("message content: " + newString(message.getPayload()));
}
publicvoidmqttErrorOccurred(MqttExceptionexception) {
System.out.println("mqttErrorOccurred: " + exception.getMessage());
}
publicvoidauthPacketArrived(intreasonCode, MqttPropertiesproperties) {
System.out.println("authPacketArrived");
}
});
client.connect(options);
// 订阅的主题client.subscribe("lv1/tradeList/#", subQos);
} catch (MqttExceptione) {
e.printStackTrace();
}
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedExceptione) {
e.printStackTrace();
}
}
}
}

收费定价

采用灵活的积分计费模式,按需订阅计费。

价格表

股票订阅

服务类型订阅类型积分消耗说明
lv1 成交明细单股票5 积分/月单只股票3s合单成交数据
全市场10000 积分/月全市场所有股票3s合单成交数据
lv1 行情快照单股票8 积分/月单只股票的行情快照
全市场15000 积分/月全市场所有股票的行情快照
lv1 五档盘口单股票8 积分/月单只股票的五档盘口数据
全市场15000 积分/月全市场所有股票的五档盘口数据

ETF 订阅

服务类型订阅类型积分消耗说明
lv1 成交明细单个 ETF5 积分/月单只 ETF 3s合单成交数据
全部 ETF3000 积分/月全市场所有 ETF 3s合单成交数据
lv1 行情快照单个 ETF8 积分/月单只 ETF 的行情快照
全部 ETF5000 积分/月全市场所有 ETF 的行情快照
lv1 五档盘口单个 ETF5 积分/月单只 ETF 的五档盘口数据
全部 ETF3000 积分/月全市场所有 ETF 的五档盘口数据

指数订阅

服务类型订阅类型积分消耗说明
lv1 指数行情单个指数免费单个指数的行情数据
常用指数免费常用指数的行情数据

注:对于免费的指数行情订阅,也需要去控制台单独创建应用并开通权限。

新用户优惠

注册即送 100 积分,体验完整服务功能。

计费模式

  • 积分制度:购买积分,使用积分创建订阅服务
  • 按需付费:按实际业务需求订阅主题,灵活计费
  • 批量优惠:批量订阅享受折扣优惠

充值套餐

套餐积分数量价格每元优惠积分
基础套餐100 积分¥1-
入门套餐1000 积分¥10-
标准套餐2000 积分¥20-
进阶套餐4000 积分¥40-
高级套餐7350 积分¥705
超值套餐11000 积分¥10010
至尊套餐24000 积分¥20020

温馨提示

积分用于创建应用,应用一旦创建,不支持修改,积分也无法退还。

常见问题

Q: 如何获取认证用户和认证密码? A: 登录后,进入"应用管理"页面,创建新应用即可获取认证用户和认证密码。

Q: 积分如何使用? A: 积分用于订阅行情、查询数据等操作。每次操作会自动扣除相应积分。

Q: 批量订阅有什么优势? A: 批量订阅可以一次订阅全市场股票,大幅降低连接数和开发复杂度,成本更低。

Q: 数据延迟是多少? A: 平均推送延迟为 10ms,确保您获取最新的市场行情。

Q: 支持哪些股票? A: 支持A股全市场,包括主板、创业板、科创板等所有上市股票。

Q: 如何联系技术支持? A: 您可以通过发送邮件至 support@tendquant.cn 联系我们。

About

快速获取A股全市场5000+股票实时行情,场内ETF基金行情,以及免费获取多个指数行情。免费A股行情,股票行情数据,量化,量化交易,全市场行情,level1行情,股票行情快照,python量化交易,股票行情快照,免费指数行情,成交明细,五档盘口数据

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages