公共行情
本节介绍如何获取公共行情数据,包括Ticker、标记价格、最佳报价、深度信息、合约信息和资金费率等。
行情概览
除了在订阅中获取实时行情数据外,您还可以通过以下同步命令获取公共行情信息:
| 命令 | 说明 |
|---|---|
获取Ticker(Ticker) | 获取24小时交易信息 |
获取标记价格(MarkPrice) | 获取标记价格 |
获取最佳报价(Bbo) | 获取最佳买卖价 |
获取深度信息(Depth) | 获取市场深度 |
获取合约信息(Instrument) | 获取合约信息 |
获取资金费率(FundingRate) | 获取资金费率 |
获取历史资金费率(FundingRateHistory) | 获取历史资金费率 |
获取K线(Kline) | 获取K线数据 |
行情信息
获取Ticker(Ticker)
请求参数
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| Ticker | String/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)
响应参数
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 交易对名称 |
| timestamp | Number | 时间戳 |
| high | Number | 最高价 |
| low | Number | 最低价 |
| open | Number | 开盘价 |
| close | Number | 收盘价 |
| volume | Number | 成交量,基础货币 |
| quote_volume | Number | 成交额, 报价货币 |
| change | Number | 涨跌幅 |
| change_percent | Number | 涨跌幅百分比 |
信息
交易对由两个货币组成,例如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)
请求参数
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| MarkPrice | String/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)
响应参数
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 交易对名称 |
| price | Number | 标记价格 |
响应示例
"Ok": [
{
"symbol": "BTC_USDT",
"price": 50000.0
}
]
获取最佳报价(Bbo)
请求参数
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| Bbo | String/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)
响应参数
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 交易对名称 |
| bid_price | Number | 最佳买单价格 |
| bid_qty | Number | 最佳买单数量 |
| ask_price | Number | 最佳卖单价格 |
| ask_qty | Number | 最佳卖单数量 |
| timestamp | Number | 时间戳 |
响应示例
"Ok": [
{
"symbol": "BTC_USDT",
"bid_price": 50000.0,
"bid_qty": 1000.0,
"ask_price": 51000.0,
"ask_qty": 1000.0,
"timestamp": 1678234567000
}
]
获取深度信息(Depth)
请求参数
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| Depth | String | 是 | 交易对名称 |
| limit | Number/null | 否 | 深度条数,默认5 |
请求示例
def get_depth():
# 查询给定交易对深度
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"Depth": ["BTC_USDT", 10]
}
}
}
depth = self.trader.publish(cmd)
响应参数
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 交易对名称 |
| timestamp | Number | 时间戳 |
| bids | Array(DepthEntry) | 买单深度 |
| asks | Array(DepthEntry) | 卖单深度 |
DepthEntry 数据结构:
| 字段 | 类型 | 描述 |
|---|---|---|
| price | Number | 价格 |
| amount | Number | 数量 |
响应示例
"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)
请求参数
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| Instrument | String/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)
响应参数
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 交易对名称 |
| state | String | 交易状态 |
| price_tick | Number | 价格步长 |
| amount_tick | Number | 数量步长 |
| price_precision | Number | 交易所的价格小数位 |
| amount_precision | Number | 交易所的数量小数位 |
| min_qty | Number | 数量下限, 最小下单数量 |
| min_notional | Number | 最小名义价值,仅币安/bitget有该规则 |
| price_multiplier | Number | 价格乘数 |
| amount_multiplier | Number | 数量乘数 |
交易状态:
- Normal: 正常
- Maintenance: 交易所维护
- LimitOpen: 限制开仓
- CloseOnly: 关闭交易
信息
min_notional仅币安/bitget有该规则,下单价格乘数量必须大于的最小名义价值(USDT)price_multiplier在策略下单价格之前需要将价格乘以1000(价格乘数)再round,避免策略明明算对的浮点数下单价格在trade crate中重新乘1000引入误差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)
请求参数
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| FundingRate | String/null | 是 | 交易对名称,null表示查询所有 |
请求示例
def get_funding_rate():
# 查询BTC_USDT资金费率
cmd = {
"account_id": 0,
"cmd": {
"Sync": {
"FundingRate": "BTC_USDT"
}
}
}
funding_rate = self.trader.publish(cmd)
响应参数
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 交易对名称 |
| funding_rate | Number | 当前资金费率 |
| next_funding_at | Number | 下次资金费时间戳 |
| funding_interval | Number | 资金费结算周期,以小时为单位 |
响应示例
"Ok": [
{
"symbol": "BTC_USDT",
"funding_rate": 0.0001,
"next_funding_at": 1678234567000,
"funding_interval": 8
}
]
获取历史资金费率(FundingRateHistory)
请求参数
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| symbol | String/null | 是 | 交易对名称,null表示查询所有 |
| since_secs | Number/null | 否 | 开始时间,单位秒,不传则返回最近limit条数据 |
| limit | Number/null | 是 | 返回数据条数限制 |
| extra | Dictionary | 否 | 扩展参数,用于特定交易所的额外参数 |
请求示例
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)
响应参数
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 交易对名称 |
| funding_rate | Number | 资金费率 |
| funding_time | Number | 结算时间,毫秒级 |
响应示例
"Ok": [
{
"symbol": "BTC_USDT",
"funding_rate": 0.000013315850519,
"funding_time": 1750118400000
},
{
"symbol": "BTC_USDT",
"funding_rate": 0.0001,
"funding_time": 1750089600000
}
]
获取K线(Kline)
请求参数
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| symbol | String/null | 是 | 交易对名称,null表示查询所有 |
| interval | String | 是 | 时间间隔,可选范围1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M |
| start_time | Number/null | 否 | 开始时间,单位毫秒 |
| end_time | Number/null | 否 | 结束时间,单位毫秒 |
| limit | Number/null | 否 | 返回数据条数限制,默认100,最大1000 |
| extra | Dictionary | 否 | 扩展参数,用于特定交易所的额外参数 |
请求示例
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)
响应参数
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 交易对名称 |
| interval | String | 时间间隔 |
| candles | Array(Candle) | 蜡烛图数据列表 |
Candle 数据结构:
| 字段 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| timestamp | Number | 是 | 时间戳,毫秒 |
| open | Number | 是 | 开盘价 |
| high | Number | 是 | 最高价 |
| low | Number | 是 | 最低价 |
| close | Number | 是 | 收盘价 |
| volume | Number | 是 | 成交量(基础货币) |
| quote_volume | Number | 是 | 成交额(报价货币) |
| trades | Number | 否 | 成交笔数 |
| taker_buy_volume | Number | 否 | taker_buy成交量(基础货币) |
| taker_buy_quote_volume | Number | 否 | taker_buy成交量(报价货币) |
| confirm | Boolean | 是 | K线状态: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 请求到交易所。
请求参数:
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| method | String | 是 | HTTP方法: GET/POST/PUT/DELETE |
| path | String | 是 | API 路径 |
| auth | Boolean | 是 | 是否需要签名认证 |
| params | Object | 否 | 请求参数 |
| url | String | 否 | 完整的 URL (如果提供,则忽略 path 和基础 URL) |
| headers | Object | 否 | 自定义的 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 字符串或对象)。
您需要自行解析交易所返回的原始数据。