API 教程(三) 获取公共数据
想通过API获取实时行情数据?OKX V5 API提供丰富的公共数据接口,无需认证即可访问。
本文是API教程系列第三篇,详解如何获取行情、K线、交易深度、资金费率等公共数据,并提供Python代码示例,让你快速上手。
公共数据 vs 私有数据
OKX API分为两类接口:
公共数据接口(本文重点):
- 无需API密钥,直接调用
- 获取市场行情、K线、深度、成交记录等
- 适合行情监控、数据分析、策略回测
私有数据接口:
- 需要API密钥认证
- 获取账户余额、持仓、订单等个人数据
- 详见API教程四:获取个人数据
核心公共数据接口
1. 获取交易产品列表
查询所有可交易的产品信息(币对、合约等)。
接口:
GET /api/v5/public/instruments
参数:
instType:产品类型(SPOT现货/SWAP永续/FUTURES交割/OPTION期权)
Python示例:
import requests
url = "https://www.okx.com/api/v5/public/instruments"
params = {"instType": "SPOT"}
response = requests.get(url, params=params)
data = response.json()
# 打印前3个现货交易对
for inst in data['data'][:3]:
print(f"{inst['instId']}: {inst['baseCcy']}/{inst['quoteCcy']}")
返回数据:
instId:产品ID(如BTC-USDT)baseCcy:基础货币(如BTC)quoteCcy:计价货币(如USDT)minSz:最小下单量tickSz:价格精度
应用场景:获取所有可交易币对、查询产品交易规则、构建交易对选择器。
2. 获取实时行情
获取单个或多个产品的最新行情数据。
接口:
GET /api/v5/market/ticker
参数:
instId:产品ID(如BTC-USDT)
Python示例:
url = "https://www.okx.com/api/v5/market/ticker"
params = {"instId": "BTC-USDT"}
response = requests.get(url, params=params)
data = response.json()
ticker = data['data'][0]
print(f"最新价: {ticker['last']}")
print(f"24h涨跌幅: {ticker['sodUtc8']}%")
print(f"24h成交量: {ticker['vol24h']}")
返回数据:
last:最新成交价bidPx:买一价askPx:卖一价high24h:24小时最高价low24h:24小时最低价vol24h:24小时成交量
应用场景:实时价格监控、价格预警系统、交易信号生成。
3. 获取K线数据
获取历史K线数据,支持多种时间周期。
接口:
GET /api/v5/market/candles
参数:
instId:产品IDbar:K线周期(1m/5m/15m/1H/4H/1D等)limit:返回数量(最多300条)
Python示例:
url = "https://www.okx.com/api/v5/market/candles"
params = {
"instId": "BTC-USDT",
"bar": "1H",
"limit": "100"
}
response = requests.get(url, params=params)
data = response.json()
# 打印最近3根K线
for candle in data['data'][:3]:
ts, o, h, l, c, vol = candle[:6]
print(f"时间: {ts}, 开: {o}, 高: {h}, 低: {l}, 收: {c}, 量: {vol}")
返回数据(数组格式):
- [0] 时间戳
- [1] 开盘价
- [2] 最高价
- [3] 最低价
- [4] 收盘价
- [5] 成交量
应用场景:技术分析(均线、MACD、RSI等)、策略回测、图表绘制。
4. 获取交易深度
获取订单簿数据(买卖盘口)。
接口:
GET /api/v5/market/books
参数:
instId:产品IDsz:深度档位(5/10/20/50/100/400)
Python示例:
url = "https://www.okx.com/api/v5/market/books"
params = {"instId": "BTC-USDT", "sz": "5"}
response = requests.get(url, params=params)
data = response.json()
book = data['data'][0]
print("买盘(Bids):")
for bid in book['bids'][:3]:
print(f" 价格: {bid[0]}, 数量: {bid[1]}")
print("卖盘(Asks):")
for ask in book['asks'][:3]:
print(f" 价格: {ask[0]}, 数量: {ask[1]}")
返回数据:
bids:买盘 [[价格, 数量, 订单数], ...]asks:卖盘 [[价格, 数量, 订单数], ...]ts:时间戳
应用场景:流动性分析、大单监控、滑点计算。
5. 获取资金费率
获取永续合约的资金费率(仅适用于永续合约)。
接口:
GET /api/v5/public/funding-rate
参数:
instId:永续合约ID(如BTC-USDT-SWAP)
Python示例:
url = "https://www.okx.com/api/v5/public/funding-rate"
params = {"instId": "BTC-USDT-SWAP"}
response = requests.get(url, params=params)
data = response.json()
funding = data['data'][0]
print(f"当前资金费率: {funding['fundingRate']}")
print(f"下次结算时间: {funding['nextFundingTime']}")
返回数据:
fundingRate:当前资金费率nextFundingTime:下次结算时间fundingTime:上次结算时间
应用场景:资金费率套利、持仓成本计算、市场情绪分析。
速率限制
公共数据接口有速率限制,避免滥用:
| 用户等级 | 限制 | |---------|------| | 普通用户 | 20次/2秒 | | VIP1-3 | 40次/2秒 | | VIP4+ | 60次/2秒 |
超限处理:
- 返回429错误码
- IP可能被临时封禁(1-60分钟)
优化建议:
- 使用WebSocket订阅实时数据(无速率限制)
- 批量查询多个产品(如ticker接口支持批量)
- 缓存不常变化的数据(如产品列表)
- 添加请求间隔(如每次请求间隔100ms)
完整示例:构建行情监控器
import requests
import time
class MarketMonitor:
def __init__(self, inst_id):
self.inst_id = inst_id
self.base_url = "https://www.okx.com"
def get_ticker(self):
"""获取实时行情"""
url = f"{self.base_url}/api/v5/market/ticker"
params = {"instId": self.inst_id}
response = requests.get(url, params=params)
return response.json()['data'][0]
def get_depth(self):
"""获取交易深度"""
url = f"{self.base_url}/api/v5/market/books"
params = {"instId": self.inst_id, "sz": "5"}
response = requests.get(url, params=params)
return response.json()['data'][0]
def monitor(self, interval=5):
"""持续监控"""
while True:
ticker = self.get_ticker()
depth = self.get_depth()
print(f"\n{self.inst_id} 行情:")
print(f" 最新价: {ticker['last']}")
print(f" 24h涨跌: {ticker['sodUtc8']}%")
print(f" 买一: {depth['bids'][0][0]}")
print(f" 卖一: {depth['asks'][0][0]}")
time.sleep(interval)
# 使用示例
monitor = MarketMonitor("BTC-USDT")
monitor.monitor(interval=10) # 每10秒更新一次
常见问题
Q: 公共数据需要API密钥吗? A: 不需要。公共数据接口可直接调用,无需认证。
Q: 如何避免速率限制? A: 使用WebSocket订阅实时数据,或增加请求间隔。详见WebSocket API教程。
Q: K线数据最多能获取多少条?
A: 单次请求最多300条。需要更多历史数据时,使用分页查询(通过after参数)。
Q: 如何获取多个币对的行情?
A: ticker接口支持批量查询,省略instId参数即可获取所有产品行情。
相关阅读:
- OKX API完全指南
- WebSocket API实战教程
- API安全最佳实践
- 量化交易入门
- Python量化交易框架
- API速率限制优化
免责声明
本文章可能包含不适用于您所在地区的产品相关内容。本文仅致力于提供一般性信息,不对其中的任何事实错误或遗漏负责任。本文仅代表作者个人观点,不代表欧易的观点。 本文无意提供以下任何建议,包括但不限于:(i) 投资建议或投资推荐;(ii) 购买、出售或持有数字资产的要约或招揽;或 (iii) 财务、会计、法律或税务建议。 持有的数字资产 (包括稳定币) 涉及高风险,可能会大幅波动,甚至变得毫无价值。您应根据自己的财务状况仔细考虑交易或持有数字资产是否适合您。有关您具体情况的问题,请咨询您的法律/税务/投资专业人士。本文中出现的信息 (包括市场数据和统计信息,如果有) 仅供一般参考之用。尽管我们在准备这些数据和图表时已采取了所有合理的谨慎措施,但对于此处表达的任何事实错误或遗漏,我们不承担任何责任。 © 2025 OKX。本文可以全文复制或分发,也可以使用本文 100 字或更少的摘录,前提是此类使用是非商业性的。整篇文章的任何复制或分发亦必须突出说明:“本文版权所有 © 2025 OKX,经许可使用。”允许的摘录必须引用文章名称并包含出处,例如“文章名称,[作者姓名 (如适用)],© 2025 OKX”。部分内容可能由人工智能(AI)工具生成或辅助生成。不允许对本文进行衍生作品或其他用途。
展开
相关推荐

比特币下跌也能盈利?如何进行合约交易
随着以比特币为代表的数字货币市场规模的不断扩大,在现货交易之外逐步催生出形式多样的衍生品交易,来作为一种对冲风险的工具,其中最受关注的莫过于合约交易。 合约交易是什么? 合约是数字货币衍生品市场中最常见的交易合约形式。数字资产合约交易是指买卖双方约定在未来某个时间,按指定价格,对某种资产进行交易。
2026年1月16日

比复制策略更简单?在OKX一键跟单最强策略交易员,让交易员帮你赚钱
不管是在传统金融领域,还是在加密货币市场,策略交易都是交易体系中非常重要且关键的一种方式,当面临复杂的交易环境和极端的交易行情时,即使拥有扎实的理论技术知识和丰富的交易经历经验,也很容易错失交易时机,或者受到情绪影响做出错误判断和操作。而策略交易正是能够解决这些问题的有效工具。 交易工具有了,怎么使
2025年11月21日

五、策略交易系列课程——屯币宝
前言: 我们经常会有这样的猜想: 牛市中有很多大涨的数字资产,如果能够连续捕捉涨幅较大的币种,比如每月捕捉一个翻倍的数字资产,一年后你的资产就会变成2的12次方,即4096倍,这是非常惊人的,当然这也是几乎不可能完成的事情,因为我们很难连续抓住大涨的币种。 这也是很多用户会遇到的问题: 牛市中,虽然
2025年11月3日

哪些国家/地区不支持注册使用欧易
欧易目前不支持对下列地区的客户提供服务:部分美国领土,如 纽约、德克萨斯州、 波多黎各、美属萨摩亚、关岛、北马里亚纳群岛邦、美属维尔京群岛 (圣克罗伊岛,圣约翰岛和圣托马斯岛),古巴、伊朗、朝鲜、克里米亚、马来西亚、叙利亚、孟加拉国和玻利维亚。 有关详情,请参阅 欧易服务条款 。
2024年4月25日

快速了解欧易常用产品及功能
欧易(www.okx.com)是全球著名的数字资产服务平台之一,主要面向全球用户提供 比特币 、以太坊等数字资产的币币和衍生品交易服务,同时也和用户一同探索DeFi,DApp, NFT和GameFi的世界。 在欧易,您可以享受 币币 、合约等流畅的交易体验,第一时间关注热门领域/概念的代币信息,还有
2024年4月25日

零基础学K线 | 5 K线组合应用的重要性
涨跌有趋势,读懂价格语言; 买卖有信号,告别感觉交易。 一、看涨K线组合发关键位置 在本章的前两期我们讲解了K线看涨组合和看跌组合的应用,但这些组合不是在任何位置出现都有效。本节我们就来讲解组合出现位置的重要性。 看涨组合在哪些位置可以更好的发挥作用呢? 第一种情况:在一段明显的上涨走势中,临近的前
2024年4月25日



