欧易API接口文档中文版概述
简介
欧易(OKX)API接口提供了一种程序化访问欧易交易所的实时数据和功能的强大途径。 通过API,开发者可以构建复杂的自动化交易策略,进行深度数据分析,并将欧易平台的功能无缝集成到其他自定义应用程序和系统中。 API允许开发者以编程方式执行各种操作,包括下单、查询账户余额、获取市场数据、管理资金等等。 本文档旨在提供欧易API接口的全面中文概述,重点介绍其关键功能、认证方法和常见用例,旨在帮助开发者快速理解并上手使用。
API 认证
所有访问欧易API的请求都必须经过严格的身份验证。欧易交易所采用API Key、Secret Key以及Passphrase三重机制,确保用户数据的安全和交易的可靠性。
- API Key: API Key是您在欧易交易平台的唯一身份标识符,类似于用户名。它允许服务器识别您的请求来源,但不具备直接授权交易的权限。您可以前往欧易的API管理页面创建和管理您的API Key。请务必妥善保管,避免泄露给未经授权的第三方。
- Secret Key: Secret Key是用于生成数字签名的密钥,类似于密码。它与API Key配对使用,对API请求的内容进行加密,以验证请求的完整性和真实性,防止中间人攻击和数据篡改。请务必将其视为高度敏感信息,切勿以任何形式公开,更不要将其存储在不安全的环境中,如公共代码仓库或客户端应用程序中。
- Passphrase: Passphrase是您在欧易账户设置的密码短语,用于增强账户安全性。部分涉及到账户敏感信息的操作或高权限API接口,例如资金划转或提现等,需要提供正确的Passphrase进行二次验证。请确保您设置了一个足够复杂且难以猜测的Passphrase,并定期更换。
请求签名:
为了保证API请求的安全性以及数据的完整性,需要在HTTP请求头中添加数字签名。 常见的签名算法通常采用HMAC-SHA256(哈希消息认证码 - SHA256),利用Secret Key(密钥)对请求的参数进行加密签名。 这种方式可以有效防止中间人攻击和数据篡改。
签名过程的具体步骤如下:
- 构造待签名字符串: 将所有参与签名的请求参数按照特定规则拼接成一个字符串。 该规则可能包括按照参数名称的字母顺序排序,或者按照API文档中指定的顺序排列。 确保所有参数都包含在内,包括query参数、body参数(如果存在并且是JSON格式,需要先进行序列化)。
- HMAC-SHA256加密: 使用您的Secret Key作为密钥,对待签名字符串进行HMAC-SHA256加密运算。 不同的编程语言都有相应的HMAC-SHA256加密库可以使用。
- Base64编码: 将HMAC-SHA256加密后的二进制结果转换为Base64编码的字符串。 Base64编码是一种将二进制数据转换为ASCII字符串的常用方法,方便在HTTP头部中传输。
-
添加签名到请求头:
将Base64编码后的签名字符串添加到HTTP请求头的
OK-ACCESS-SIGN
字段中。 这是服务器验证请求签名的关键步骤。
除了签名之外,请求头中通常还需要包含以下认证和授权相关的字段:
-
OK-ACCESS-KEY
:API Key,用于标识您的身份。 API Key通常由服务提供商分配,用于唯一标识您的账户或应用程序。 -
OK-ACCESS-SIGN
:签名,使用Secret Key和HMAC-SHA256算法生成的签名字符串,用于验证请求的完整性和真实性。 -
OK-ACCESS-TIMESTAMP
:时间戳(Unix时间戳,以秒为单位)。 时间戳用于防止重放攻击。 服务器通常会验证时间戳的有效性,例如,拒绝超过一定时间窗口的请求。 -
OK-ACCESS-PASSPHRASE
(可选):账户密码短语,某些特定的高权限接口可能需要。 Passphrase可以作为额外的安全层,确保只有授权用户才能访问敏感操作。 并非所有API都需要此字段。
重要提示: 请务必妥善保管您的Secret Key,切勿泄露给他人。 避免将Secret Key硬编码在代码中,推荐使用环境变量或配置文件进行管理。 定期更换Secret Key可以提高安全性。
API接口分类
欧易API接口根据功能和访问权限,大致可以分为以下几类:
- 公共接口(Public Endpoints): 提供无需身份验证即可访问的市场数据,例如实时价格、历史交易记录、K线数据、交易对信息、深度图等。这些接口主要用于数据分析、行情展示以及构建信息聚合平台。
- 交易接口(Trade Endpoints): 用于执行下单、撤单、修改订单等交易操作。访问这些接口需要进行身份认证(通常是API Key和Secret Key)。交易接口支持现货交易、杠杆交易等不同类型的交易。
- 账户接口(Account Endpoints): 用于查询用户的账户余额、交易历史记录、资金划转记录等账户管理操作。访问这些接口同样需要身份认证,并且在使用资金划转功能时,通常需要进行二次验证,例如Google Authenticator或短信验证码。
- 合约接口(Contract Endpoints): 专门用于永续合约和交割合约的交易和数据查询。这些接口允许用户进行合约下单、撤单、查询持仓、查询收益等操作。访问权限受到严格控制,需要API Key进行认证。同时,为了风险控制,通常会对合约交易接口设置更高的访问频率限制。
- 期权接口(Option Endpoints): 用于期权合约的交易和数据查询。期权交易涉及更复杂的风险管理,因此期权接口通常也需要高级别的身份认证,并且提供更丰富的参数配置选项。用户可以通过期权接口查询期权链、进行期权下单、查询期权持仓等操作。
- 挖矿接口(Mining Endpoints): 用于查询与平台挖矿活动相关的数据,例如挖矿收益、挖矿算力、挖矿产品信息等。访问这些接口需要身份验证,并且可能需要满足特定的参与条件。
公共接口
公共接口提供无需身份验证即可访问的市场数据,这对于开发者构建交易机器人、数据分析工具或信息聚合平台至关重要。这些接口的设计目的是为了公开透明地传递市场信息,无需任何形式的授权或密钥管理。
- 获取服务器时间: 获取欧易服务器当前时间,精确到毫秒级。这对于同步本地系统时间,确保交易策略的准确执行至关重要,尤其是在高频交易环境中。时间同步有助于避免因时间偏差导致的交易错误或延迟。
- 获取交易产品信息: 获取所有交易对的详细信息,包括交易对名称(例如BTC/USDT)、交易货币(例如BTC)、计价货币(例如USDT)、最小交易数量、价格精度、交易手续费率等。这些信息是了解每个交易对特性的基础,并可以用于筛选合适的交易标的。
- 获取深度信息: 获取指定交易对的实时深度信息,也称为订单簿。深度信息包括买单(Bid)和卖单(Ask)的价格和数量,按价格排序。通过分析订单簿的深度,可以了解市场买卖力量的对比,评估价格的支撑位和阻力位,从而更好地判断市场趋势。
- 获取全部交易产品行情信息: 获取所有交易对的实时行情数据,包括最新成交价、24小时最高价、24小时最低价、24小时成交量、涨跌幅等。这些数据能够快速了解市场的整体表现,识别热门交易对,并监控风险。
- 获取K线数据: 获取指定交易对的历史K线数据,也称为蜡烛图数据。K线数据包含指定时间周期内的开盘价、最高价、最低价和收盘价(OHLC),以及成交量。时间周期可以灵活选择,例如1分钟、5分钟、1小时、1天等。K线数据是技术分析的基础,可以用于识别趋势、形态和指标,辅助交易决策。
- 获取历史成交数据: 获取指定交易对的历史成交记录,包括成交时间、成交价格、成交数量、买卖方向等。历史成交数据可以用于回测交易策略,验证其有效性,并优化参数。
这些接口可以帮助开发者快速获取实时的、全面的市场数据,赋能各种应用场景,例如:构建自动化交易机器人、实时监控市场风险、开发数据分析和可视化工具、为用户提供专业的交易决策支持。
交易接口
交易接口是连接加密货币交易平台与外部应用程序的关键桥梁,它允许开发者通过编程方式进行下单、撤单、查询订单状态等核心交易操作。为确保安全,使用交易接口必须进行严格的身份认证,通常采用API密钥或OAuth等方式,验证用户的身份和权限。
- 下单(创建订单): 此功能用于创建新的交易订单。开发者需要指定交易对(例如BTC/USDT),明确交易方向(买入或卖出),选择合适的订单类型(包括市价单、限价单、止损单等),并设置交易数量。对于限价单,还需指定期望的成交价格。高级订单类型允许设置更复杂的交易策略,例如冰山订单、时间加权平均价格订单 (TWAP) 等。
- 撤单(取消订单): 用于撤销尚未完全成交的订单。 撤单操作需要提供准确的订单ID,通常由下单接口返回。 部分交易平台可能支持部分撤单,允许用户撤销订单的部分数量。
- 批量下单: 允许开发者一次性提交多个订单请求,提高交易效率,尤其适用于高频交易和量化交易策略。 批量下单通常有数量限制,以防止系统过载。
- 批量撤单: 允许开发者一次性取消多个订单。同样适用于需要快速调整交易策略的场景,可以有效减少延迟。
- 获取订单信息(查询订单详情): 通过订单ID查询指定订单的详细信息,包括订单状态(已提交、部分成交、完全成交、已撤销等)、成交数量、成交价格、手续费等。
- 获取未成交订单列表(查询活动订单): 获取当前所有尚未完全成交的订单列表。此接口对于监控交易状态、调整交易策略至关重要。
- 获取历史订单列表(查询成交历史): 获取历史成交订单的完整列表。开发者可以通过此接口分析交易历史、评估交易策略的有效性。通常可以按照时间范围、交易对等条件进行过滤。
- 获取最近成交记录(查询市场成交): 获取指定交易对最近的成交记录,包括成交价格、成交数量、成交时间等。 可以用于实时监控市场动态、辅助决策。
通过有效利用这些交易接口,开发者可以构建功能强大的自动交易机器人、量化交易系统、交易信号生成器等应用,实现自动化的下单、撤单、风险管理和订单管理。需要注意的是,不同的交易平台提供的接口功能和参数可能存在差异,开发者需要仔细阅读API文档,并进行充分的测试。
账户接口
账户接口允许开发者安全地查询账户余额、发起资金划转等关键的账户管理操作。为了保障用户资产安全,使用账户接口通常需要进行严格的身份认证,例如API密钥、双因素认证(2FA)或其他安全措施。
- 获取账户余额: 查询账户中持有的各种加密货币或法币的余额,包括可用余额、冻结余额等详细信息。 接口通常会返回一个包含各种币种及其对应余额的列表,方便开发者进行统计和展示。
- 资金划转: 在同一平台的不同账户之间进行资金划转,例如从交易账户划转到资金账户,或从资金账户划转到合约账户。 划转接口通常需要指定划转的币种、数量、源账户和目标账户,并可能需要进行额外的安全验证。
- 获取账户流水: 查询账户的资金流水记录,包括充值、提现、交易、划转等所有资金变动记录。 流水记录通常包含时间戳、交易类型、币种、数量、交易ID等详细信息,方便开发者进行账务核对和审计。
这些接口可以帮助开发者全面地管理账户资金,实时监控资金流动,并构建各种自动化交易和资金管理应用。 通过API获取的数据可以用于风险管理、报表生成、以及与其他金融系统的集成。
合约接口
合约接口是专为开发者设计的工具,用于便捷地接入并操作永续合约和交割合约市场。通过合约接口,开发者能够进行交易执行和市场数据查询,极大地提升了量化交易和自动化策略的效率。使用合约接口前,务必完成身份认证,确保交易安全和合规性。核心功能包括仓位管理,订单创建和撤销,以及实时市场数据获取等。
- 获取合约账户信息: 查询您的合约账户余额、可用保证金、已用保证金、冻结资金以及其他关键财务指标,以便全面了解账户的风险承受能力和资金使用情况。
- 获取合约持仓信息: 检索当前持仓的详细信息,包括持仓数量、平均持仓成本、盈亏情况(包括未实现盈亏和已实现盈亏)、杠杆倍数、以及强平价格等,为风险管理提供数据支持。
- 合约下单: 通过接口提交买入或卖出合约的订单,支持多种订单类型,如限价单、市价单、止损单、止盈单等,并可设置订单数量、价格、杠杆倍数等参数,实现灵活的交易策略。
- 合约撤单: 撤销尚未完全成交的合约订单,允许在市场变化时快速调整交易策略,避免不必要的损失。可以指定订单ID进行撤单,也可以批量撤销满足特定条件的订单。
- 获取合约订单详情: 查询指定合约订单的详细信息,包括订单状态(如已提交、已成交、已撤销、部分成交)、成交价格、成交数量、手续费等,用于交易记录的追踪和分析。
- 获取合约K线数据: 获取不同时间周期的合约K线数据,包括开盘价、最高价、最低价、收盘价和成交量等信息,用于技术分析和市场趋势预测,为交易决策提供依据。同时支持自定义K线数据的时间周期。
期权接口
期权接口为开发者提供了与加密货币交易所期权合约进行交互的全面工具集,包括交易执行和数据查询。为了确保安全性和合规性,使用期权接口前,必须进行身份认证,例如通过API密钥或OAuth 2.0协议。
- 获取期权账户信息: 允许开发者查询期权交易账户的各项关键指标,例如可用余额、已用保证金、维持保证金水平、风险敞口以及累计盈亏等,方便进行风险管理和资金状况评估。
- 获取期权持仓信息: 提供当前期权持仓的详细快照,包括合约代码、持仓数量、平均持仓成本、盈亏情况、以及到期日等,帮助开发者监控投资组合的表现。
- 期权下单: 开发者可以使用此接口创建和提交期权交易订单,包括指定买卖方向(买入开仓、卖出开仓、买入平仓、卖出平仓)、合约代码、数量、价格类型(限价单、市价单)以及有效期等参数。
- 期权撤单: 允许开发者取消尚未完全成交的期权订单,以便在市场情况发生变化时灵活调整交易策略。
- 获取期权订单详情: 开发者可以通过订单ID查询特定期权订单的详细执行情况,包括订单状态(已提交、已成交、部分成交、已撤销)、成交价格、成交数量以及时间戳等。
- 获取期权K线数据: 提供历史期权价格数据,以K线图的形式呈现,包含开盘价、最高价、最低价、收盘价和成交量等信息,支持不同时间周期(如1分钟、5分钟、1小时、1天等),用于技术分析和策略回测。
挖矿接口
挖矿接口允许开发者查询挖矿相关数据,例如挖矿收益、算力、矿池状态等。通过这些接口,开发者可以构建监控工具、分析挖矿效率或集成到其他应用中。 使用挖矿接口通常需要进行身份认证,以确保数据的安全性和权限控制。
- 获取挖矿收益: 查询挖矿收益信息,包括已结算收益、未结算收益、每日收益、历史收益记录等。收益数据通常以加密货币单位计价,并可能包含手续费、矿池费用等详细信息。开发者可根据时间范围筛选收益数据,并获取不同矿机的收益情况。
- 获取挖矿算力: 查询挖矿算力信息,包括当前算力、平均算力、历史算力曲线等。算力是衡量挖矿设备计算能力的指标,影响挖矿的效率和收益。通过监控算力,开发者可以评估矿机的运行状态,及时发现并解决算力异常问题。算力数据可能包含矿池算力、个人算力等不同维度。
错误处理
与欧易API交互时,请求并非总是成功。开发者必须预见到并妥善处理各种潜在的错误情况,这是确保应用程序健壮性和用户体验的关键环节。缺乏有效的错误处理机制可能导致程序崩溃、数据丢失,甚至更严重的后果。
常见的错误类型,以及应对策略,大致可以归纳为以下几类:
-
认证错误:
这是最常见的错误之一,通常发生在以下情况:
- API Key或Secret Key无效: 请仔细检查API Key和Secret Key是否正确配置,区分大小写,并确它们与你创建的密钥对完全一致。同时,确保密钥对尚未过期或被禁用。
- 签名错误: API请求的签名不正确。签名是验证请求完整性和真实性的重要手段。检查你的签名算法实现是否正确,包括使用的哈希函数、消息编码方式,以及拼接参数的顺序。仔细阅读欧易API文档中关于签名生成的详细说明。
- IP地址限制: 你的API Key可能配置了IP地址白名单。确保发起请求的IP地址位于允许访问的列表中。
-
参数错误:
这种情况表明你的请求参数存在问题。
- 缺少必要参数: 检查你是否遗漏了API所需的必选参数。
- 参数类型错误: 确保你传递的参数类型与API文档的要求一致,例如,数字类型传递字符串,或者布尔类型传递了其他值。
- 参数值超出范围: 部分参数的取值可能存在限制,例如,价格精度、数量范围等。
- 参数格式错误: 某些参数可能有特定的格式要求,例如,日期时间格式、JSON格式等。
-
频率限制:
为了防止滥用和维护服务器稳定性,欧易API对请求频率进行了限制。
- 超出请求速率限制: 当你的请求频率超过API允许的上限时,服务器会返回错误。你需要采取措施来降低请求频率,例如,实施队列机制、使用批量请求等。仔细阅读API文档,了解不同接口的速率限制,并进行合理规划。
-
服务器错误:
这类错误通常是由于欧易服务器内部出现问题导致的,例如,服务器过载、程序Bug等。
- 5xx错误: 遇到5xx错误时,通常意味着服务器端出现了问题。你可以稍后重试该请求。如果错误持续发生,请联系欧易官方技术支持。
- 维护模式: 欧易可能会定期进行系统维护。在维护期间,部分API可能无法访问。关注欧易的官方公告,了解维护计划。
欧易API返回的错误信息通常包含两个关键字段:错误码(error code)和错误描述(error message)。错误码是一个数字或字符串,用于标识错误的类型。错误描述是对错误的详细解释,帮助开发者理解错误的原因。利用这些信息,开发者可以编写代码来捕获和处理特定类型的错误,例如,使用
try-except
块来捕获异常,并根据错误码进行不同的处理。在生产环境中,记录错误日志对于问题诊断和排查至关重要。将错误码、错误描述以及相关上下文信息记录到日志中,可以帮助你快速定位和解决问题。
频率限制 (Rate Limiting)
为了保障系统的稳定性和公平性,并防止恶意滥用行为,欧易 (OKX) API 对所有接口均实施了频率限制机制。 不同的 API 接口,由于其资源消耗和重要性不同,会采用不同的频率限制策略。 这意味着在单位时间内,允许开发者调用的次数上限不同。 当请求频率超过预设的限制阈值时,API 服务器会返回特定的错误代码 (例如 429 Too Many Requests),明确告知开发者已经触发了频率限制。
作为开发者,务必认真理解并遵守欧易 API 的频率限制规则。 如果您的应用程序频繁触发频率限制,不仅会影响自身服务的正常运行,也可能对整个欧易平台造成不稳定因素。 因此,需要采取有效的措施来控制和优化 API 请求频率。 以下是一些推荐的最佳实践:
- 增加请求间隔: 这是最直接且有效的策略。 在连续发送 API 请求之间引入适当的延迟,确保请求频率低于限制阈值。 可以根据实际情况和 API 的具体限制调整延迟时间。
- 使用缓存机制: 对于那些不经常变化的数据,建议使用缓存技术来存储 API 响应。 这样,当应用程序需要相同的数据时,可以直接从缓存中获取,而无需再次调用 API。 这不仅可以降低请求频率,还能显著提高应用程序的响应速度。 考虑使用内存缓存 (如 Redis 或 Memcached) 或本地文件缓存。
- 优化 API 请求: 仔细检查您的 API 请求,确保只请求必要的数据字段。 避免一次性请求大量数据,尽量将请求分解为更小的、更具体的请求。 某些 API 可能支持批量请求,可以考虑将多个请求合并为一个,以减少总的请求次数。
- 使用 WebSocket API: 对于需要实时数据更新的场景,建议使用欧易提供的 WebSocket API。 WebSocket 允许建立持久性的双向通信连接,服务器可以在数据发生变化时主动推送更新,避免频繁轮询 API。
- 监控 API 使用情况: 密切监控您的应用程序的 API 使用情况,包括请求频率、错误率等指标。 通过监控数据,可以及时发现并解决潜在的频率限制问题。 欧易可能提供 API 使用统计报告,供开发者参考。
- 了解 API 限制的更新: 欧易可能会根据实际情况调整 API 的频率限制规则。 请定期关注欧易官方公告和 API 文档,及时了解最新的限制策略。
通过上述策略的合理运用,您可以有效降低 API 请求频率,避免触发频率限制,确保应用程序的稳定性和可靠性。 同时,也为整个欧易平台的健康运行贡献一份力量。
版本更新
欧易API接口作为连接交易平台与开发者的关键桥梁,会持续进行版本更新与优化。这些更新旨在提升API的性能、安全性以及功能丰富度,从而更好地满足开发者的需求。
作为开发者,您需要密切关注欧易官方发布的API文档更新日志和公告,了解每次更新的具体内容,包括新增接口、废弃接口、参数变更、数据格式调整等。及时更新您的代码,确保其与最新的API版本兼容,避免因版本不兼容导致的功能异常或数据错误。
通常情况下,欧易会提前发布API更新通知,并通过邮件、论坛、官方网站等渠道向开发者推送。这些通知会详细说明更新的时间、内容以及可能产生的影响,以便开发者有充足的时间进行代码调整、测试和部署。建议您订阅欧易的API更新通知,确保第一时间获取最新信息。
在更新代码时,务必进行充分的测试,包括单元测试、集成测试以及回归测试,确保更新后的代码能够正常工作,并不会影响现有功能的稳定性。同时,也要注意API Key的权限设置,避免因权限不足导致API调用失败。如果遇到任何问题,可以及时联系欧易的技术支持团队,获取专业的帮助和指导。