HTX REST API 文档解读教程: 从入门到实战
前言
本文旨在解读 HTX (原火币) REST API 文档,深入剖析其核心功能,从而帮助读者透彻理解 API 的基本概念、常用接口、请求与响应格式,以及如何有效利用 API 进行自动化交易、量化策略开发和深度数据获取。读者可以通过HTX API获取市场数据、账户信息、执行交易指令等。本文假定读者已具备一定的编程基础,例如熟悉HTTP请求、JSON数据格式,以及对加密货币交易的基本了解,包括现货交易、合约交易等基本概念。我们将从 API 认证与权限管理、各类常用接口的功能与使用方法(如行情数据接口、交易接口、账户信息接口)、详细的数据结构解析(包括请求参数和响应数据的含义与格式)、以及常见问题排查与解决方案等方面进行详细分析。本文旨在为开发者提供一份详尽的 HTX API 使用指南,助力其高效构建基于 HTX 平台的应用程序。
API 认证
在使用 HTX REST API 之前,必须进行身份认证以确保安全访问和数据完整性。 认证流程的核心在于利用您的 API 密钥(
Access Key
)生成一个安全签名(
Signature
)。 该签名将与您的请求一起发送,HTX 服务器将使用您的 API 密钥验证签名,从而确认您的身份和请求的有效性。 密钥分为
Access Key
和
Secret Key
,
Access Key
用于标识您的身份,
Secret Key
用于生成签名,请务必妥善保管
Secret Key
,切勿泄露。
Access Key
和 Secret Key
。 Access Key
用于标识用户身份,Secret Key
用于生成签名。
-
构建请求字符串: 请求字符串的构成取决于请求方法(GET 或 POST)和请求参数。
- GET 请求: 将请求参数按照字母顺序排序,然后使用
&
连接,最后加上Access Key
、请求方法、请求路径和时间戳。 - POST 请求: POST 请求体需要进行 JSON 序列化,并将序列化后的字符串作为签名的一部分。
- GET 请求: 将请求参数按照字母顺序排序,然后使用
-
计算 HMAC-SHA256 签名: 使用
Secret Key
作为密钥,对请求字符串进行 HMAC-SHA256 运算。 - 对签名进行 Base64 编码: 将 HMAC-SHA256 运算的结果进行 Base64 编码,得到最终的签名。
Access Key
、签名和时间戳添加到 HTTP 请求头中。 例如:
Signature:
Secret Key
,不要将其泄露给任何人。 签名生成过程应该在服务器端完成,避免在客户端暴露 Secret Key
。常用接口
HTX(火币)REST API 提供了广泛且细致的接口服务,覆盖了加密货币交易生态系统的各个重要组成部分。这些接口允许开发者访问实时和历史市场数据、执行交易操作、管理账户信息,并监控市场动向。 通过调用这些API,用户可以构建各种应用程序,例如自动交易机器人、市场分析工具和投资组合管理系统。
获取市场行情数据:
-
/market/tickers
: 获取所有交易对的最新行情快照,包括但不限于最新成交价、24小时最高价、24小时最低价、24小时成交量、涨跌幅等。此接口提供市场整体的概览信息,是了解市场动态的入口。 -
/market/detail/merged
: 获取指定交易对的聚合行情数据,提供更丰富的市场信息。除了最新成交价、最高价、最低价、成交量,还可能包含加权平均价、买一价、卖一价、以及一定时间窗口内的成交量加权平均价等。该接口适用于需要对特定交易对进行深入分析的场景。 -
/market/depth
: 获取指定交易对的深度数据(买单和卖单)。可以指定深度数据的聚合等级,例如,精确到价格最小单位或者按照一定价格步长进行聚合。深度数据反映了市场的买卖力量对比,有助于评估市场的流动性和潜在的价格支撑/阻力位。 不同的聚合等级可以满足不同粒度的分析需求,例如,高精度深度数据适用于高频交易策略,而较低精度的聚合数据适用于趋势分析。 -
/market/history/kline
: 获取指定交易对的历史 K 线数据。可以指定 K 线的时间周期(例如,1 分钟、5 分钟、1 小时、1 天等)和数量,从而获取不同时间跨度的历史价格走势。K 线数据是技术分析的基础,可以用于识别趋势、形态和潜在的交易机会。时间周期和数量的选择取决于具体的分析目标,例如,短线交易者可能关注 1 分钟或 5 分钟 K 线,而长期投资者可能关注日线或周线。
交易相关接口:
-
/order/orders/place
: 创建订单接口,用于提交新的交易请求。该接口允许用户通过指定交易对(例如:BTC/USDT)、交易类型(买入或卖出,分别代表希望购买或出售该交易对中的某种资产)、订单类型(限价单或市价单)以及相应的数量和价格等参数来创建订单。- 交易对 (symbol): 指定进行交易的两种资产,例如 BTC/USDT。
- 交易类型 (side): 指定买入 (buy) 或卖出 (sell)。
-
订单类型 (type):
- 限价单 (limit): 用户指定期望的成交价格,只有当市场价格达到或优于该价格时,订单才会成交。
- 市价单 (market): 以当前市场最优价格立即成交。
- 数量 (amount): 要交易的资产数量。
- 价格 (price): 仅限价单需要,指定期望的成交价格。
-
/order/orders/{order-id}
: 查询订单详情接口,允许用户根据提供的订单 ID 查询特定订单的详细信息。该接口返回的信息通常包括订单的状态(例如:已提交、已成交、已取消等)、订单类型、交易对、数量、价格、下单时间等。用户可以通过此接口了解订单的执行情况。 需要提供订单 ID 作为路径参数。 -
/order/orders/{order-id}/submitcancel
: 撤销订单接口,允许用户根据提供的订单 ID 撤销尚未完全成交的订单。 调用此接口后,系统会尝试取消该订单。 请注意,已成交或正在成交中的订单可能无法成功撤销。 需要提供订单 ID 作为路径参数。 -
/order/openOrders
: 查询当前未成交的订单接口,用于获取用户当前所有尚未完全成交的订单列表。 通过指定交易对和账户 ID 等参数,可以筛选出特定交易对或账户的未成交订单。 该接口返回的信息通常包括订单 ID、交易对、交易类型、订单类型、数量、价格、下单时间等。- 交易对 (symbol, 可选): 指定交易对,仅返回该交易对的未成交订单。
- 账户 ID (account-id, 可选): 指定账户 ID,仅返回该账户的未成交订单。
-
/order/history
: 查询历史订单接口,用于获取用户的历史订单记录。 通过指定交易对、账户 ID、订单状态和时间范围等参数,可以筛选出符合条件的订单记录。 该接口返回的信息通常包括订单 ID、交易对、交易类型、订单类型、数量、价格、下单时间、成交时间、订单状态等。- 交易对 (symbol, 可选): 指定交易对,仅返回该交易对的历史订单。
- 账户 ID (account-id, 可选): 指定账户 ID,仅返回该账户的历史订单。
- 订单状态 (status, 可选): 指定订单状态,例如已成交 (filled)、已取消 (canceled) 等。
- 时间范围 (start-time, end-time, 可选): 指定时间范围,仅返回该时间范围内的历史订单。
账户信息相关接口:
-
/account/accounts
: 获取所有账户信息。此接口提供对用户所有账户的全面视图,包括账户ID、账户类型(例如:现货账户、合约账户、杠杆账户等)、账户创建时间以及账户状态(例如:正常、冻结等)。通过此接口,用户可以快速了解其资产分布情况。 -
/account/accounts/{account-id}/balance
: 获取指定账户的余额信息。此接口允许用户查询特定账户的详细余额信息,其中`{account-id}`需要替换为实际的账户ID。返回的信息通常包括可用余额、冻结余额以及账户中的所有资产及其对应的数量。它支持查询不同币种的余额,例如:BTC、ETH、USDT等,并提供每个币种的可用余额和冻结余额。
数据结构
HTX REST API (Application Programming Interface) 返回的数据主要采用 JSON (JavaScript Object Notation) 格式。JSON 是一种轻量级的数据交换格式,易于阅读和编写,同时也方便机器解析和生成。准确理解 API 返回数据的结构对于成功编写与之交互的代码至关重要。在处理 API 响应时,需要考虑数据类型、嵌套关系以及错误处理。
-
理解 JSON 结构:JSON 数据以键值对的形式组织,可以包含对象(Objects)和数组(Arrays)。对象由花括号
{}
包围,键是字符串,值可以是字符串、数字、布尔值、null、另一个 JSON 对象或 JSON 数组。数组由方括号[]
包围,包含一系列的 JSON 值。
市场行情数据:
/market/tickers
接口返回一个包含多个交易对实时行情数据的JSON数组,方便用户快速了解市场整体概况。每个数组元素代表一个交易对的行情信息,包含了关键的价格和交易量指标。
-
symbol
: 交易对名称,以字符串形式表示,例如btcusdt
,通常由基础货币和计价货币组成,清晰地表明交易的币种组合。 -
open
: 当日或当周期(取决于API的具体配置)的开盘价,是衡量价格趋势的起始点。 -
close
: 最新成交价,也称为收盘价,反映了该交易对当前的最新市场价格。 -
low
: 当日或当周期内的最低成交价,是评估价格波动下限的重要参考。 -
high
: 当日或当周期内的最高成交价,是评估价格波动上限的重要参考。 -
amount
: 成交量,以基础货币计价,例如在btcusdt
交易对中,成交量以 BTC 为单位。表示该时间段内交易的基础货币总量。 -
vol
: 成交额,以计价货币计价,例如在btcusdt
交易对中,成交额以 USDT 为单位。表示该时间段内交易的总价值,是衡量市场活跃度的关键指标。 -
count
: 成交笔数,指在指定时间段内完成的交易次数,也是反映市场活跃度的指标之一。高成交笔数可能意味着更强的市场流动性。
深度数据:
/market/depth
接口返回实时的买单(Bid)和卖单(Ask)的深度数据,这是反映市场供需关系以及流动性的关键信息。深度数据对于高频交易、算法交易以及市场微观结构分析至关重要。通过分析深度数据,交易者可以评估特定价格水平的买卖压力,预测价格的短期波动,并优化交易策略。
-
bids
: 买单数组,代表市场上所有尚未成交的买入订单。每个买单元素通常包含两个关键信息:价格和数量。价格 (Price) 表示买家愿意购买该资产的最高价格,而数量 (Quantity) 则表示买家愿意以该价格购买的资产数量。买单按照价格从高到低的顺序排列,价格最高的买单位于数组的最前面,这代表了当前市场上最佳的买入机会。 -
asks
: 卖单数组,代表市场上所有尚未成交的卖出订单。与买单类似,每个卖单元素也包含价格和数量信息。价格 (Price) 表示卖家愿意出售该资产的最低价格,而数量 (Quantity) 则表示卖家愿意以该价格出售的资产数量。卖单按照价格从低到高的顺序排列,价格最低的卖单位于数组的最前面,这代表了当前市场上最佳的卖出机会。
K 线数据:
/market/history/kline
接口用于检索指定交易对的历史 K 线数据,为技术分析提供关键信息。每个 K 线元素代表一个时间周期内的价格波动和交易活动,包含以下字段:
-
id
: 时间戳,代表 K 线开始的时间,通常以 Unix 时间戳形式呈现,精确到秒。 -
open
: 开盘价,指该时间周期内第一笔交易的价格。 -
close
: 收盘价,指该时间周期内最后一笔交易的价格,是 K 线最重要的组成部分之一。 -
low
: 最低价,指该时间周期内达到的最低价格。 -
high
: 最高价,指该时间周期内达到的最高价格。 -
amount
: 成交量,指该时间周期内交易的加密货币数量,例如 BTC 或 ETH。 -
vol
: 成交额,指该时间周期内交易的总价值,通常以计价货币表示,例如 USDT 或 USD。 -
count
: 成交笔数,指该时间周期内发生的交易次数。
订单数据:
/order/orders/place
接口用于创建订单,成功后会返回唯一的订单 ID,作为后续查询和管理订单的关键标识。要获取更详细的订单信息,可以使用
/order/orders/{order-id}
接口,该接口返回的订单详情包含以下核心字段,这些字段提供了关于订单的全面信息:
-
order-id
: 这是系统为每个订单生成的唯一标识符,用于区分不同的交易请求。通过订单 ID,可以追踪订单的整个生命周期。 -
symbol
: 交易对,指定了进行交易的两种资产。例如,"BTC/USDT" 表示使用 USDT 购买或出售 BTC。 准确了解交易对是理解订单标的的基础。 -
account-id
: 账户 ID,标识了发起订单的特定交易账户。一个用户可能拥有多个交易账户,用于不同的交易策略或目的。 -
amount
: 订单数量,指用户希望购买或出售的加密货币的数量。 这是订单的核心要素,直接关系到交易规模。 -
price
: 订单价格(仅适用于限价单)。在限价单中,用户指定希望成交的价格。只有当市场价格达到或优于此价格时,订单才会成交。 市价单则没有此字段。 -
type
: 订单类型,定义了订单的性质和执行方式。常见的订单类型包括:- 买入/卖出: 指明订单的方向,是购买指定加密货币(买入)还是出售已持有的加密货币(卖出)。
-
限价/市价:
- 限价单(Limit Order): 用户指定成交价格,订单只有在该价格或更好价格时才会成交。
- 市价单(Market Order): 用户不指定价格,订单会立即以当前市场最佳价格成交。
-
state
: 订单状态,反映了订单当前的处理阶段。常见的订单状态包括:- 已提交(Submitted): 订单已成功提交到交易系统,等待撮合。
- 已成交(Filled): 订单已完全成交,所有指定数量的加密货币都已完成交易。
- 部分成交(Partially Filled): 订单部分成交,仍有剩余数量等待成交。
- 已撤销(Canceled): 订单已被用户或系统撤销,不再参与交易。
- 待成交(Pending):订单正在排队等待成交。
-
created-at
: 订单创建时间,记录了订单提交到交易系统的确切时间。 这对于审计和追踪订单历史非常重要。 -
filled-amount
: 已成交数量,指订单已经成功成交的加密货币数量。如果订单尚未完全成交,则此值小于订单数量。 -
filled-cash-amount
: 已成交金额,指订单已经成交的总金额,通常以法币或稳定币计价。 -
filled-fees
: 已支付手续费,指因订单成交而产生的交易手续费。手续费通常以成交金额的一定比例收取。
常见问题
签名错误: 最常见的问题是签名错误。 请仔细检查签名生成过程,确保请求字符串的构建和 HMAC-SHA256 运算正确无误。 尤其注意参数排序和时间戳的格式。实战示例
假设我们计划利用交易平台的 API 获取 BTC/USDT 交易对的实时成交价格,并在此基础上执行一个限价买入的交易策略。该策略的核心在于,只有当市场价格达到或低于预设的限价时,买单才会成交,从而帮助我们以理想的价格买入比特币。
获取最新成交价: 调用/market/detail/merged?symbol=btcusdt
接口,解析返回的 JSON 数据,获取 close
字段的值。
{ "account-id": "<你的账户 ID>", "amount": "0.01", "price": "<最新成交价 * 0.999>", "symbol": "btcusdt", "type": "buy-limit" }
/order/orders/place
接口,将订单参数和签名添加到请求头中,发送 POST 请求。