跳到主要内容

公共行情

本节介绍如何获取公共行情数据,包括Ticker、标记价格、最佳报价、深度信息、合约信息和资金费率等。

行情概览

除了在订阅中获取实时行情数据外,您还可以通过以下同步命令获取公共行情信息:

命令说明
获取Ticker(Ticker)获取24小时交易信息
获取标记价格(MarkPrice)获取标记价格
获取最佳报价(Bbo)获取最佳买卖价
获取深度信息(Depth)获取市场深度
获取合约信息(Instrument)获取合约信息
获取资金费率(FundingRate)获取资金费率
获取历史资金费率(FundingRateHistory)获取历史资金费率
获取K线(Kline)获取K线数据

行情信息

获取Ticker(Ticker)

请求参数

参数类型是否必须描述
TickerString/null交易对名称,null表示查询所有

请求示例

def get_ticker():
# 查询给定交易对行情
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"Ticker": "BTC_USDT"
}
}
}
ticker = self.trader.publish(cmd)

# 查询所有交易对行情
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"Ticker": None
}
}
}
all_tickers = self.trader.publish(cmd)

响应参数

字段类型描述
symbolString交易对名称
timestampNumber时间戳
highNumber最高价
lowNumber最低价
openNumber开盘价
closeNumber收盘价
volumeNumber成交量,基础货币
quote_volumeNumber成交额, 报价货币
changeNumber涨跌幅
change_percentNumber涨跌幅百分比
信息

交易对由两个货币组成,例如BTC_USDT,其中BTC是基础货币,USDT是报价货币,中间用下划线连接。

响应示例

"Ok": [
{
"symbol": "BTC_USDT",
"timestamp": 1678234567000,
"high": 50000.0,
"low": 49000.0,
"open": 49500.0,
"close": 50000.0,
"volume": 1000.0,
"quote_volume": 5000000.0,
"change": 500.0,
"change_percent": 0.01
}
]

获取标记价格(MarkPrice)

请求参数

参数类型是否必须描述
MarkPriceString/null交易对名称,null表示查询所有

请求示例

def get_mark_price():
# 查询给定交易对标记价格
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"MarkPrice": "BTC_USDT"
}
}
}
mark_price = self.trader.publish(cmd)

# 查询所有交易对标记价格
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"MarkPrice": None
}
}
}
all_mark_prices = self.trader.publish(cmd)

响应参数

字段类型描述
symbolString交易对名称
priceNumber标记价格

响应示例

"Ok": [
{
"symbol": "BTC_USDT",
"price": 50000.0
}
]

获取最佳报价(Bbo)

请求参数

参数类型是否必须描述
BboString/null交易对名称,null表示查询所有

请求示例

def get_bbo():
# 查询给定交易对最佳报价
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"Bbo": "BTC_USDT"
}
}
}
bbo = self.trader.publish(cmd)

# 查询所有交易对最佳报价
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"Bbo": None
}
}
}
all_bbos = self.trader.publish(cmd)

响应参数

字段类型描述
symbolString交易对名称
bid_priceNumber最佳买单价格
bid_qtyNumber最佳买单数量
ask_priceNumber最佳卖单价格
ask_qtyNumber最佳卖单数量
timestampNumber时间戳

响应示例

"Ok": [
{
"symbol": "BTC_USDT",
"bid_price": 50000.0,
"bid_qty": 1000.0,
"ask_price": 51000.0,
"ask_qty": 1000.0,
"timestamp": 1678234567000
}
]

获取深度信息(Depth)

请求参数

参数类型是否必须描述
DepthString交易对名称
limitNumber/null深度条数,默认5

请求示例

def get_depth():
# 查询给定交易对深度
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"Depth": ["BTC_USDT", 10]
}
}
}
depth = self.trader.publish(cmd)

响应参数

字段类型描述
symbolString交易对名称
timestampNumber时间戳
bidsArray(DepthEntry)买单深度
asksArray(DepthEntry)卖单深度

DepthEntry 数据结构:

字段类型描述
priceNumber价格
amountNumber数量

响应示例

"Ok": {
"symbol": "BTC_USDT",
"timestamp": 1678234567000,
"bids": [
[50000.0, 1000.0],
[49990.0, 1000.0]
],
"asks": [
[51000.0, 1000.0],
[51010.0, 1000.0]
]
}

获取合约信息(Instrument)

请求参数

参数类型是否必须描述
InstrumentString/null交易对名称,null表示查询所有

请求示例

def get_instrument():
# 查询BTC_USDT合约信息
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"Instrument": "BTC_USDT"
}
}
}
instrument = self.trader.publish(cmd)

# 查询所有合约信息
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"Instrument": None
}
}
}
all_instruments = self.trader.publish(cmd)

响应参数

字段类型描述
symbolString交易对名称
stateString交易状态
price_tickNumber价格步长
amount_tickNumber数量步长
price_precisionNumber交易所的价格小数位
amount_precisionNumber交易所的数量小数位
min_qtyNumber数量下限, 最小下单数量
min_notionalNumber最小名义价值,仅币安/bitget有该规则
price_multiplierNumber价格乘数
amount_multiplierNumber数量乘数

交易状态:

  • Normal: 正常
  • Maintenance: 交易所维护
  • LimitOpen: 限制开仓
  • CloseOnly: 关闭交易
信息
  1. min_notional仅币安/bitget有该规则,下单价格乘数量必须大于的最小名义价值(USDT)
  2. price_multiplier在策略下单价格之前需要将价格乘以1000(价格乘数)再round,避免策略明明算对的浮点数下单价格在trade crate中重新乘1000引入误差
  3. amount_multiplier在策略下单数量之前需要将数量乘上,例如gate的BTC合约1张0.001个BTC,因此价格乘数1 数量乘数是1/0.

响应示例

"Ok": {
"symbol": "BTC_USDT",
"state": "Normal",
"price_tick": 0.1,
"amount_tick": 0.001,
"price_precision": 1,
"amount_precision": 3,
"min_qty": 0.001,
"min_notional": 5.0,
"price_multiplier": 1.0,
"amount_multiplier": 1.0
}

获取资金费率(FundingRate)

请求参数

参数类型是否必须描述
FundingRateString/null交易对名称,null表示查询所有

请求示例

def get_funding_rate():
# 查询BTC_USDT资金费率
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"FundingRate": "BTC_USDT"
}
}
}
funding_rate = self.trader.publish(cmd)

响应参数

字段类型描述
symbolString交易对名称
funding_rateNumber当前资金费率
next_funding_atNumber下次资金费时间戳
funding_intervalNumber资金费结算周期,以小时为单位

响应示例

"Ok": [
{
"symbol": "BTC_USDT",
"funding_rate": 0.0001,
"next_funding_at": 1678234567000,
"funding_interval": 8
}
]

获取历史资金费率(FundingRateHistory)

请求参数

参数类型是否必须描述
symbolString/null交易对名称,null表示查询所有
since_secsNumber/null开始时间,单位秒,不传则返回最近limit条数据
limitNumber/null返回数据条数限制
extraDictionary扩展参数,用于特定交易所的额外参数

请求示例

def get_funding_rate():
# 查询BTC_USDT资金费率
cmd = {
"account_id": 1,
"limit": 100,
"method": "FundingRateHistory",
"since_secs": 1672531200,
"symbol": "BTC_USDT",
"sync": true
}
funding_rate = self.trader.publish(cmd)

响应参数

字段类型描述
symbolString交易对名称
funding_rateNumber资金费率
funding_timeNumber结算时间,毫秒级

响应示例

"Ok": [
{
"symbol": "BTC_USDT",
"funding_rate": 0.000013315850519,
"funding_time": 1750118400000
},
{
"symbol": "BTC_USDT",
"funding_rate": 0.0001,
"funding_time": 1750089600000
}
]

获取K线(Kline)

请求参数

参数类型是否必须描述
symbolString/null交易对名称,null表示查询所有
intervalString时间间隔,可选范围1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M
start_timeNumber/null开始时间,单位毫秒
end_timeNumber/null结束时间,单位毫秒
limitNumber/null返回数据条数限制,默认100,最大1000
extraDictionary扩展参数,用于特定交易所的额外参数

请求示例

def get_kline():
cmd = {
"account_id": 1,
"end_time": 1672617600000,
"interval": "1m",
"limit": 100,
"method": "Kline",
"start_time": 1672531200000,
"symbol": "BTC_USDT",
"sync": true
}
kline = self.trader.publish(cmd)

响应参数

字段类型描述
symbolString交易对名称
intervalString时间间隔
candlesArray(Candle)蜡烛图数据列表

Candle 数据结构:

字段类型是否必须描述
timestampNumber时间戳,毫秒
openNumber开盘价
highNumber最高价
lowNumber最低价
closeNumber收盘价
volumeNumber成交量(基础货币)
quote_volumeNumber成交额(报价货币)
tradesNumber成交笔数
taker_buy_volumeNumbertaker_buy成交量(基础货币)
taker_buy_quote_volumeNumbertaker_buy成交量(报价货币)
confirmBooleanK线状态:false 代表 K 线未完结,true 代表 K 线已完结

响应示例

"Ok": [
{
"symbol": "BTC_USDT",
"interval": "1m",
"candles": [
{
"timestamp": 1672531200000,
"open": 10000.0,
"high": 10000.0,
"low": 10000.0,
"close": 10000.0,
"volume": 1000.0,
"quote_volume": 10000000.0,
"trades": 100,
"taker_buy_volume": 1000.0,
"taker_buy_quote_volume": 10000000.0,
"confirm": true
},
{
"timestamp": 1672531200000,
"open": 10000.0,
"high": 10000.0,
"low": 10000.0,
"close": 10000.0,
"volume": 1000.0,
"quote_volume": 10000000.0,
"trades": 100,
"taker_buy_volume": 1000.0,
"taker_buy_quote_volume": 10000000.0,
"confirm": true
}]
}
]

自定义请求

如果需要调用交易所标准 API 文档中存在但 OpenQuant 未直接封装的接口,可以使用自定义请求。

Request

发送自定义的 HTTP 请求到交易所。

请求参数:

参数类型是否必须描述
methodStringHTTP方法: GET/POST/PUT/DELETE
pathStringAPI 路径
authBoolean是否需要签名认证
paramsObject请求参数
urlString完整的 URL (如果提供,则忽略 path 和基础 URL)
headersObject自定义的 HTTP 请求头

请求示例:

def get_ticker():
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"Request": {
"method": "GET",
"path": "/api/v1/ticker",
"auth": false,
"params": {
"symbol": "BTC_USDT"
}
}
}
}
}
response = self.trader.publish(cmd)

响应

"Ok": 交易所原始响应数据 (通常是 JSON 字符串或对象)。

您需要自行解析交易所返回的原始数据。