OKX API使用指南:快速上手交易,提升交易效率!
欧易交易所 OKX 接口使用
简介
OKX 提供了一套功能强大的应用程序编程接口(API),允许开发者以编程方式访问和管理其交易账户,获取实时和历史市场数据,执行交易操作,并自动化交易策略。这套API覆盖了从现货交易到衍生品交易的各种功能,为量化交易者、算法交易开发者和第三方应用程序集成商提供了广泛的可能性。本文将深入探讨如何安全有效地使用 OKX API,包括详细的身份验证流程、常用接口的具体使用方法,例如获取账户余额、下单、查询订单状态,以及在使用API时应注意的关键安全性和限制。
身份验证
在使用 OKX API 之前,必须先创建并妥善管理 API 密钥。在您的 OKX 账户中,导航至 API 管理页面,您可以在此生成 API 密钥(API Key)、密钥(Secret Key)和密码短语(Passphrase)。请务必采取严格的安全措施来存储这些凭证,因为任何未经授权的访问都可能导致资金损失或其他安全风险。请将它们视为高度敏感的信息,避免泄露给任何第三方。
OKX API 提供了两种主要的身份验证方法:
- HMAC SHA256 签名: 这是最常见的身份验证方式,广泛应用于大多数 API 请求。为了使用此方法,您需要使用您的 API 密钥(API Key)和密钥(Secret Key)结合请求的内容生成一个 HMAC SHA256 签名。然后,将此签名、API 密钥(API Key)和时间戳(timestamp)作为请求头的一部分发送给 OKX API 服务器。时间戳的作用是防止重放攻击,确保请求的时效性。正确的签名验证是API安全性的关键保障。
- 密码短语: 密码短语主要用于执行一些需要更高安全级别的特定操作,例如从您的 OKX 账户提币(Withdrawal)。在提币请求中,您需要提供正确的密码短语,以验证您的身份并授权该操作。请记住,密码短语与API 密钥和密钥同等重要,必须妥善保管。
HMAC SHA256 签名示例 (Python)
在加密货币交易和API交互中,HMAC SHA256 签名是一种常用的安全认证机制,用于验证请求的完整性和真实性。以下 Python 代码展示了如何生成一个符合OKX API规范的 HMAC SHA256 签名。
import hashlib
import hmac
import time
import base64
这些语句导入了必要的 Python 库:
hashlib
提供哈希算法,
hmac
用于生成 HMAC 签名,
time
用于获取时间戳,
base64
用于对签名进行 Base64 编码。
def generate_signature(timestamp, method, request_path, body, secret_key):
定义了一个名为
generate_signature
的函数,该函数接收五个参数:
timestamp
: Unix 时间戳,表示请求发送的时间,单位为秒。确保时间戳与服务器时间同步,否则可能导致签名验证失败。
method
: HTTP 请求方法,如 "GET"、"POST"、"PUT" 或 "DELETE",必须大写。
request_path
: API 请求的相对路径,例如 "/api/v5/market/tickers"。确保路径以斜杠开头,并且与API文档中定义的路径完全一致。
body
: 请求体,对于 GET 请求,通常为空字符串;对于 POST/PUT 请求,包含 JSON 格式的请求数据。注意请求体需要是字符串格式。
secret_key
: 你的 API 密钥,用于生成 HMAC 签名。务必妥善保管密钥,避免泄露。
函数文档字符串提供了对函数功能的详细说明以及参数的解释。
message = str(timestamp) + method + request_path + body
将时间戳、HTTP 方法、请求路径和请求体拼接成一个字符串,作为 HMAC 算法的输入。拼接顺序必须严格按照API文档的要求。
hmac_obj = hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), digestmod=hashlib.sha256)
创建一个 HMAC 对象,使用 SHA256 哈希算法。
secret_key
和
message
都需要进行 UTF-8 编码。
signature = base64.b64encode(hmac_obj.digest())
计算 HMAC 签名,并将结果进行 Base64 编码。Base64 编码后的签名更易于在 HTTP 请求头中传递。
return signature.decode('utf-8')
将 Base64 编码后的签名转换为 UTF-8 字符串,并返回。
示例
在进行与加密货币交易所的API交互时,身份验证至关重要。 以下代码段展示了如何构建一个请求,其中包含API密钥、密钥和签名,用于安全地访问受保护的资源。
api_key = "YOUR_API_KEY"
将
YOUR_API_KEY
替换为你从交易所获得的实际API密钥。 此密钥用于标识你的帐户并授权对API的访问。
secret_key = "YOUR_SECRET_KEY"
YOUR_SECRET_KEY
应该替换为你对应的密钥。密钥应被严格保密,绝不能泄露给他人,因为它允许对你的账户进行访问。
timestamp = str(int(time.time()))
时间戳是当前时间的整数表示,通常以自Unix纪元(1970年1月1日00:00:00 UTC)以来的秒数为单位。 时间戳用于防止重放攻击,确保请求的时效性。使用
time.time()
获取当前时间,将其转换为整数,然后转换为字符串。
method = "GET"
HTTP方法指定了对服务器执行的动作类型。 在此示例中,
GET
方法用于从服务器检索信息。 其他常见方法包括
POST
(用于创建新资源)、
PUT
(用于更新现有资源)和
DELETE
(用于删除资源)。
request_path = "/api/v5/market/tickers?instId=BTC-USDT"
request_path
是API端点的路径,指定要访问的特定资源。 在此示例中,它请求BTC-USDT交易对的市场行情数据。 查询字符串
?instId=BTC-USDT
用于传递参数给API,以进一步指定请求的数据。
instId
代表交易对的ID。
body = ""
对于GET请求,请求体通常为空。对于POST或PUT请求,请求体将包含要发送到服务器的数据,通常以JSON格式表示。如果使用POST方式,则需要将相关数据以JSON格式放在Body里。
signature = generate_signature(timestamp, method, request_path, body, secret_key)
签名是通过使用密钥、时间戳、HTTP方法、请求路径和请求体对消息进行加密哈希处理来创建的。 签名用于验证请求的真实性和完整性,确保请求未被篡改。
generate_signature
函数 (未在此处定义) 负责执行签名生成过程。具体的签名算法取决于不同的交易所,常见的包括HMAC-SHA256算法。在实际应用中,需要根据交易所提供的文档来实现此函数。
构造请求头
在与OKX API交互时,构建正确的请求头至关重要,它包含了认证信息,用于验证请求的合法性。以下展示了如何使用Python字典构造必要的头部信息:
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": "YOUR_PASSPHRASE" # 如果账户启用了密码短语,则需要添加此项
}
其中,各个字段的含义如下:
-
OK-ACCESS-KEY
: 你的API密钥,用于标识你的账户。务必妥善保管,避免泄露。 -
OK-ACCESS-SIGN
: 使用密钥和请求参数生成的签名,用于验证请求的完整性和来源。生成签名时,需要使用特定的算法(例如HMAC-SHA256)对请求方法、请求路径、时间戳和请求体进行签名。详细签名生成方法请参考OKX官方API文档。 -
OK-ACCESS-TIMESTAMP
: 请求发送时的时间戳,以秒为单位的Unix时间戳。时间戳的有效期通常很短,以防止重放攻击。 -
OK-ACCESS-PASSPHRASE
: 你的账户密码短语,如果你的账户启用了密码短语,则必须包含此项。密码短语可以增强账户的安全性。
使用Python的
requests
库发送带有请求头的GET请求的示例代码如下:
import requests
import #建议import ,方便处理返回数据
url = "https://www.okx.com" + request_path
response = requests.get(url, headers=headers)
# 检查HTTP状态码,确保请求成功
if response.status_code == 200:
# 使用()方法解析JSON响应
try:
response_ = response.()
print(.dumps(response_, indent=4)) # 使用.dumps格式化输出,更易阅读
except .JSONDecodeError:
print("Error decoding JSON response:", response.text)
else:
print(f"Request failed with status code: {response.status_code}")
print(response.text) # 打印响应内容,有助于调试
上述代码首先构建完整的URL,然后调用
requests.get()
方法发送GET请求,并将构造好的请求头传递给
headers
参数。
response
对象包含了服务器返回的响应,可以通过
response.status_code
属性获取HTTP状态码,通过
response.text
属性获取响应内容。
特别注意:在实际应用中,请替换
api_key
,
signature
,
timestamp
和
YOUR_PASSPHRASE
为你的实际值。签名生成的过程比较复杂,请务必参考OKX官方API文档中关于签名的详细说明。
常用 API 接口
OKX API 提供了丰富的接口集,旨在满足不同用户的交易和数据需求。这些接口覆盖了从现货交易到衍生品交易,以及账户管理和市场数据获取等多个方面。了解并熟练运用这些接口,对于进行自动化交易、量化分析以及构建个性化交易策略至关重要。以下是一些常用接口及其详细使用方法:
1. 获取市场数据
-
/api/v5/market/tickers:
获取所有交易对的实时行情数据,这是了解市场整体动态的关键入口。通过该接口,您可以快速掌握不同交易对的价格波动情况。
-
参数:
-
instId
: 交易对 ID,它是识别特定交易市场的基础。例如,BTC-USDT
代表比特币与 USDT 的交易对,ETH-BTC
代表以太坊与比特币的交易对。准确指定instId
是获取正确数据的首要步骤。
-
- 返回值:包含交易对最新价格、24 小时成交量、最高价、最低价、开盘价等详细信息的列表。利用这些信息,您可以计算出价格变化幅度、评估市场活跃度,并制定相应的交易策略。 这些实时数据是进行技术分析和基本面分析的重要依据。
-
参数:
-
/api/v5/market/candles:
获取指定交易对的历史 K 线数据,用于分析价格趋势和波动规律。K 线图是技术分析中常用的工具,它可以直观地展示一段时间内的开盘价、收盘价、最高价和最低价。
-
参数:
-
instId
: 交易对 ID,用于指定要查询的交易对,与/api/v5/market/tickers
接口中的instId
含义相同。 -
bar
: K 线周期,定义了每根 K 线代表的时间跨度。常用的周期包括1m
(1 分钟)、5m
(5 分钟)、1h
(1 小时)、1d
(1 天) 等。选择合适的 K 线周期取决于您的交易策略和时间框架。 更短的周期适合短线交易,更长的周期适合长线投资。 -
limit
: 返回 K 线数量,控制每次请求返回的数据量。默认值为 100,最大值为 500。通过调整limit
参数,您可以获取更长时间的历史数据,从而更全面地分析价格走势。 请注意,每次请求返回的数据量有限制,如果需要更多数据,可能需要多次请求并进行数据合并。
-
- 返回值:包含一系列 K 线数据点的列表,每个数据点通常包含开盘价、收盘价、最高价、最低价、成交量和时间戳等信息。 通过分析 K 线图,可以识别各种技术形态,例如头肩顶、双底、三角形等,从而预测价格未来的走势。
-
参数:
-
/api/v5/market/depth:
获取指定交易对的实时深度数据,也称为订单簿数据。订单簿反映了市场上买单和卖单的分布情况,是了解市场供需关系的重要途径。
-
参数:
-
instId
: 交易对 ID,指定要查询的交易对。与前述接口中的instId
含义相同。 -
limit
: 返回的买单和卖单的数量,控制订单簿的深度。默认值为 20,最大值为 400。更大的limit
值可以提供更全面的订单簿信息,但也会增加数据传输量。分析订单簿的深度可以帮助您判断市场的支撑位和阻力位,并预测价格的短期波动。
-
- 返回值:包含买单和卖单数据的列表。每个订单通常包含价格和数量信息。买单数据按照价格从高到低排列,卖单数据按照价格从低到高排列。通过分析订单簿数据,您可以观察到市场上买卖力量的对比情况,判断价格未来的走势。例如,如果买单数量远大于卖单数量,则可能预示着价格上涨;反之,则可能预示着价格下跌。
-
参数:
2. 交易相关接口
-
/api/v5/trade/order:
下单。允许用户创建新的交易订单。
-
参数:
-
instId
: 交易对 ID。指定要交易的加密货币交易对,例如 BTC-USDT。 -
tdMode
: 交易模式。定义交易的类型 (cash: 现货交易,直接买卖加密货币; cross: 全仓杠杆交易,使用账户所有可用资金作为保证金; isolated: 逐仓杠杆交易,为特定交易对分配特定金额的保证金; sim: 模拟交易盘,用于测试和学习)。 -
side
: 买卖方向。指示订单是买入还是卖出 (buy: 买入,增加持仓; sell: 卖出,减少持仓)。 -
ordType
: 订单类型。定义订单执行方式 (market: 市价单,立即以当前市场最佳价格执行; limit: 限价单,以指定价格或更优价格执行; post_only: 只挂单,如果订单会立即成交,则会被取消,用于确保Maker手续费; fok: Fill or Kill,立即全部成交,否则取消; ioc: Immediate or Cancel,立即成交部分订单,剩余未成交部分取消)。 -
sz
: 数量。指定要买入或卖出的加密货币数量。 -
px
: 价格。指定限价单的价格,只有当市场价格达到或超过此价格时,订单才会被执行(仅限限价单使用)。 -
clOrdId
: 客户端订单ID。用户自定义的订单ID,方便用户追踪订单状态。(可选) -
tag
: 订单标签。用户自定义的订单标签,方便用户进行订单管理和统计。(可选)
-
-
返回值: 包含订单 ID 等信息的对象。例如订单ID(
ordId
),客户端订单ID(clOrdId
),订单状态(state
)等等。用于跟踪订单执行状态。
-
参数:
-
/api/v5/trade/cancel-order:
撤销订单。允许用户取消尚未完全成交的订单。
-
参数:
-
instId
: 交易对 ID。指定要撤销订单的交易对。 -
ordId
: 订单 ID。指定要撤销的订单的唯一标识符。 -
clOrdId
: 客户端订单ID。指定要撤销订单的客户端订单ID。(可选)
-
-
返回值: 包含撤销订单结果信息的对象。例如订单ID(
ordId
), 客户端订单ID(clOrdId
), 撤销结果(sCode
,sMsg
)等等,指示订单是否成功撤销。
-
参数:
-
/api/v5/trade/orders-pending:
获取未成交订单列表。允许用户查询当前所有未完全成交的挂单。
-
参数:
-
instId
: 交易对 ID。指定要查询的交易对。如果为空,则返回所有交易对的未成交订单。 -
limit
: 返回订单数量。指定每次请求返回的订单数量(默认 100,最大 100)。 -
after
: 分页参数。返回在此订单ID之后的订单列表。(可选) -
before
: 分页参数。返回在此订单ID之前的订单列表。(可选)
-
-
返回值: 包含未成交订单信息的列表。列表中包含每个订单的详细信息,例如订单ID(
ordId
),交易对(instId
),价格(px
),数量(sz
),订单状态(state
)等等。
-
参数:
3. 账户相关接口
-
/api/v5/account/balance:
获取账户余额。此接口允许用户查询指定币种在账户中的余额信息。
-
参数:
-
ccy
: 币种。指定要查询余额的币种,例如:USDT、BTC、ETH。该参数区分大小写,请务必提供正确的币种代码。
-
- 返回值: 返回一个列表,其中包含账户余额信息。列表中通常会包含可用余额(可用于交易的部分)、冻结余额(暂时不能用于交易的部分)以及总余额等详细数据。具体字段名称和含义请参考API文档。返回值的结构通常是JSON格式,方便解析和使用。
-
参数:
-
/api/v5/asset/transfer:
资金划转。该接口用于在不同账户之间转移资金,例如从交易账户划转到资金账户,或者从资金账户划转到挖矿账户等。
-
参数:
-
ccy
: 币种。指定要划转的币种,例如 USDT。 -
amt
: 数量。指定要划转的数量。注意精度问题,应与交易所要求的最小交易单位保持一致。 -
from
: 从哪个账户。指定资金划出的账户类型。可能的账户类型包括:交易账户、资金账户、挖矿账户等。具体数值和代码请参考API文档。 -
to
: 到哪个账户。指定资金划入的账户类型。与from
参数一样,需要提供正确的账户类型代码。 -
type
: 划转类型。用于进一步区分划转的类型,例如内部划转、提现等。具体数值和代码请参考API文档。
-
- 返回值: 返回一个对象,其中包含划转结果信息。该对象通常会包含一个交易ID,用于追踪划转的状态。如果划转成功,会返回成功的标识;如果划转失败,会返回错误代码和错误信息,方便用户进行调试。同样,返回值通常是JSON格式。
-
参数:
注意事项
- 频率限制: OKX API 为了保障系统稳定性和公平性,对请求频率进行了严格限制。超出频率限制会导致请求被服务器拒绝,返回错误代码。因此,在编写API调用程序时,务必仔细研读 OKX API 官方文档,特别是关于不同接口的频率限制说明。务必实现合理的频率控制机制,例如使用令牌桶算法或漏桶算法来平滑请求发送速率,避免触发频率限制。同时,也要注意区分不同类型的API接口,例如公共接口和私有接口,它们的频率限制可能有所不同。
- 错误处理: 在使用 OKX API 的过程中,API 请求并非总是成功,可能会由于各种原因(例如网络问题、参数错误、服务器维护等)返回错误。因此,必须对 API 响应进行全面的错误检查。通过检查 API 响应中的 HTTP 状态码、错误代码和错误信息,可以判断请求是否成功以及失败的原因。针对不同的错误类型,需要采取不同的处理策略,例如重试机制、参数调整、日志记录等。完善的错误处理机制能够提高程序的健壮性和稳定性,避免因 API 错误而导致程序崩溃或数据丢失。
- 安全: API 密钥和密码短语是访问 OKX API 的重要凭证,必须妥善保管,防止泄露。一旦泄露,攻击者可能会利用这些凭证进行非法操作,例如盗取资产、篡改数据等。强烈建议不要将 API 密钥和密码短语硬编码到代码中,这是一种非常不安全的做法。应该使用环境变量或其他安全的方式存储这些敏感信息,例如使用密钥管理服务(KMS)或硬件安全模块(HSM)。还可以考虑使用 IP 白名单来限制 API 密钥的使用范围,进一步提高安全性。定期更换 API 密钥也是一个有效的安全措施。
- API 版本: OKX API 会不断更新迭代,推出新的功能和改进,同时也会修复一些潜在的 Bug。因此,请务必关注 OKX API 的最新版本,并及时更新你的代码。使用过时的 API 版本可能会导致程序无法正常工作,或者无法使用最新的功能。仔细阅读 API 文档的更新日志,了解新版本的特性和变更,并根据需要调整你的代码。同时,也要注意 API 版本的兼容性,确保升级后的代码能够与现有的系统兼容。
- 模拟交易: 在将你的 API 交易程序部署到真实环境中之前,强烈建议先在 OKX 的模拟交易环境中进行充分的测试。模拟交易环境提供了一个与真实环境类似的交易平台,但使用的是虚拟资金。你可以在模拟交易环境中测试你的交易策略、风控机制和错误处理逻辑,而无需承担真实资金的风险。通过模拟交易,可以发现并修复潜在的问题,确保你的程序在真实环境中能够稳定可靠地运行。
- IP 限制: 为了增强账户安全性,OKX 允许用户将 API 密钥与特定的 IP 地址绑定。这意味着只有来自这些指定 IP 地址的请求才会被允许。 如果你的应用部署在具有固定公网 IP 地址的服务器上,强烈建议配置 IP 限制。你可以在 OKX API 管理界面中添加或删除允许的 IP 地址。如果需要频繁更改IP, 则不建议开启IP限制。
- WebSocket API: 除了 REST API 之外,OKX 还提供了 WebSocket API,用于实时推送市场数据、订单簿更新、交易信息等。WebSocket API 与 REST API 的使用方式有所不同。REST API 是基于请求-响应模式,而 WebSocket API 则需要建立持久的 WebSocket 连接,并订阅感兴趣的频道。通过 WebSocket API,你可以实时获取最新的市场数据,从而更快地响应市场变化。务必阅读OKX的WebSocket API文档,了解连接建立、消息订阅和数据格式等方面的细节。同时,请注意维护WebSocket连接的稳定性,例如使用心跳机制来检测连接是否断开,并自动重连。
错误码及处理
OKX API 响应包含一个
code
字段,用于指示请求的处理状态。通过分析这个
code
,开发者可以快速定位问题并采取相应的措施。常见的错误码及其详细说明如下:
-
50001
: 请求参数错误。表示API请求中提供的参数不符合API的规范或要求。 开发者应仔细检查请求参数的类型、格式、取值范围以及必填字段是否完整。例如,时间戳格式不正确,交易数量超出限制,或缺少必要的身份验证参数等。 -
50002
: 签名验证失败。通常由于以下原因导致:API密钥(API Key)或密钥(Secret Key)配置错误、签名算法实现不正确、时间戳过期或请求参数被篡改。需要检查API密钥和密钥配置是否正确,签名算法是否与OKX官方文档一致,并确保时间戳的准确性和请求参数的完整性,防止在传输过程中被篡改。为了进一步调试,可以打印签名字符串进行对比,确保与预期一致。 -
50003
: 频率限制。为了保护API的稳定性和公平性,OKX对API请求的频率进行了限制。当请求频率超过限制时,会返回此错误码。开发者应实施频率控制策略,例如使用队列或令牌桶算法来平滑请求,避免突发的高并发请求。可以参考OKX官方文档了解不同API的频率限制,并根据实际情况进行调整。 -
60011
: 账户余额不足。当进行交易或提币操作时,账户余额不足以支付交易费用或提币金额时,会返回此错误码。需要检查账户余额,并确保有足够的资金来完成操作。如果需要,可以充值或减少交易/提币的数量。 -
60012
: 订单不存在。表示尝试操作的订单在OKX系统中不存在。可能的原因包括订单ID错误、订单已被取消或已完全成交。需要验证订单ID的正确性,并确保订单状态是可操作的状态。可以通过查询订单接口确认订单是否存在及其当前状态。
针对不同的错误码,你需要采取相应的处理策略。例如,对于参数错误,应仔细检查并修正参数;对于签名验证失败,应重新生成签名并确保其有效性;对于频率限制,应增加请求间隔或使用更合理的请求策略;对于余额不足,应充值或调整交易/提币金额;对于订单不存在,应检查订单ID或订单状态。 实施完善的错误处理机制是确保API集成稳定性和可靠性的关键。
示例:获取 BTC-USDT 最新价格 (Python)
本示例演示如何通过 Python 脚本与 OKX API 交互,实时获取 BTC-USDT 交易对的最新成交价格。为了安全地访问 API,脚本中使用了 API 密钥、密钥以及时间戳签名进行身份验证。
import requests
import time
import hmac
import hashlib
import base64
这段代码引入了必要的 Python 库。
requests
库用于发送 HTTP 请求,
time
库用于获取当前时间戳,
hmac
和
hashlib
用于生成 API 请求签名,
base64
用于编码签名。
def get_btc_price():
"""
获取 BTC-USDT 最新价格。
此函数定义了获取 BTC-USDT 最新价格的逻辑。该函数构造并发送一个 API 请求,然后解析响应以提取最新的价格数据。
Returns:
BTC-USDT 最新价格 (浮点数),如果请求失败,返回 None。
"""
api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
timestamp = str(int(time.time()))
method = "GET"
request_path = "/api/v5/market/tickers?instId=BTC-USDT"
body = ""
这里定义了 API 密钥 (
api_key
)、密钥 (
secret_key
)、时间戳 (
timestamp
)、HTTP 方法 (
method
)、API 请求路径 (
request_path
) 以及请求体 (
body
)。 请务必用您自己的 API 密钥和密钥替换
YOUR_API_KEY
和
YOUR_SECRET_KEY
。 请求路径指定了要查询的交易对 (BTC-USDT)。
signature = generate_signature(timestamp, method, request_path, body, secret_key)
该行调用
generate_signature
函数生成请求签名。签名用于验证请求的真实性和完整性,防止恶意篡改。
def generate_signature(timestamp, method, request_path, body, secret_key):
message = timestamp + method + request_path + body
mac = hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)
d = mac.digest()
return base64.b64encode(d).decode()
generate_signature
函数使用 HMAC-SHA256 算法生成签名。它将时间戳、HTTP 方法、请求路径和请求体连接成一个字符串,然后使用密钥对其进行哈希处理。最终,将哈希值进行 Base64 编码。
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": "YOUR_PASSPHRASE" # 如果需要,添加密码短语
}
这段代码定义了 HTTP 请求头。请求头包含了 API 密钥 (
OK-ACCESS-KEY
)、签名 (
OK-ACCESS-SIGN
)、时间戳 (
OK-ACCESS-TIMESTAMP
) 以及密码短语 (
OK-ACCESS-PASSPHRASE
)。 并非所有 API 都需要密码短语,根据您账户的安全设置决定是否需要提供。请将
YOUR_PASSPHRASE
替换为您自己的密码短语,如果适用。
url = "https://www.okx.com" + request_path
response = requests.get(url, headers=headers)
这里构造了完整的 API 请求 URL,并使用
requests.get
函数发送 GET 请求。请求头被添加到请求中,以便 API 可以验证客户端的身份。
if response.status_code == 200:
data = response.()
if data["code"] == "0":
return float(data["data"][0]["last"])
else:
print(f"API 错误: {data['code']} - {data['msg']}")
return None
else:
print(f"HTTP 错误: {response.status_code}")
return None
此部分代码处理 API 响应。检查 HTTP 状态码是否为 200 (成功)。如果请求成功,则解析 JSON 响应并检查 API 返回的错误代码。如果
code
为 "0",则提取
last
字段的值 (最新价格) 并将其转换为浮点数。如果 API 返回错误代码,则打印错误信息。如果 HTTP 状态码不是 200,则打印 HTTP 错误信息。
if __name__ == "__main__":
price = get_btc_price()
if price:
print(f"BTC-USDT 最新价格: {price}")
else:
print("获取 BTC-USDT 价格失败。")
这段代码确保只有在直接运行脚本时才执行
get_btc_price
函数。如果成功获取到价格,则打印价格。否则,打印错误信息。
这个例子展示了如何使用 Python 和 OKX API 获取 BTC-USDT 的最新价格。 你需要替换
YOUR_API_KEY
和
YOUR_SECRET_KEY
为你自己的 API 密钥和密钥。 请确保安装了
requests
库
pip install requests
. 这个例子也包含了错误处理,以便你可以更好地理解 API 的响应。 记住,安全地保存你的 API 密钥至关重要。