Hyperliquid-Python-SDK核心组件解析:Info模块与Exchange模块如何协同工作
Hyperliquid-Python-SDK核心组件解析:Info模块与Exchange模块如何协同工作
Hyperliquid-Python-SDK是一个专为Hyperliquid API交易设计的Python开发工具包,通过Info模块与Exchange模块的高效协同,为开发者提供了从市场数据查询到订单执行的完整交易解决方案。本文将深入解析这两个核心模块的功能特点及其协同机制,帮助开发者快速掌握SDK的使用方法。
Info模块:市场数据与用户状态的信息中心
Info模块作为SDK的数据中枢,负责与Hyperliquid API交互获取各类市场数据和用户状态信息。该模块在hyperliquid/info.py中实现,通过继承API基类提供了丰富的数据查询接口。
核心功能与主要接口
Info模块的核心功能包括:
-
市场数据查询:提供实时行情、订单簿、K线数据等市场信息
all_mids():获取所有交易对的中间价l2_snapshot(name):获取指定交易对的L2订单簿快照candles_snapshot(name, interval, startTime, endTime):获取指定交易对的K线数据
-
用户状态查询:提供账户余额、持仓、订单等用户相关信息
user_state(address):获取用户的账户状态和持仓信息open_orders(address):获取用户的当前挂单user_fills(address):获取用户的成交历史
-
系统元数据:提供交易品种、手续费等系统信息
meta():获取合约交易的元数据spot_meta():获取现货交易的元数据
数据处理与缓存机制
Info模块在初始化时会加载并缓存市场元数据,建立交易对与资产ID的映射关系:
# 初始化现货资产映射
for spot_info in spot_meta["universe"]:
asset = spot_info["index"] + 10000
self.coin_to_asset[spot_info["name"]] = asset
self.name_to_coin[spot_info["name"]] = spot_info["name"]
这种设计确保了后续操作中资产ID的快速查找,提高了系统效率。
Exchange模块:订单操作与交易执行的核心引擎
Exchange模块在hyperliquid/exchange.py中实现,负责处理所有交易相关操作,包括订单创建、修改、取消等。该模块通过组合Info模块提供的市场数据,实现了完整的交易生命周期管理。
核心功能与主要接口
Exchange模块的核心功能包括:
-
订单管理:支持各类订单的创建、修改和取消
order(name, is_buy, sz, limit_px, order_type):创建限价订单market_open(name, is_buy, sz):创建市价开仓订单market_close(coin):市价平仓cancel(name, oid):取消指定订单
-
账户管理:提供资金转账、杠杆调整等账户操作
update_leverage(leverage, name):调整杠杆usd_transfer(amount, destination):USD转账spot_transfer(amount, destination, token):现货转账
-
高级功能:支持批量操作、子账户管理等高级特性
bulk_orders(order_requests):批量下单create_sub_account(name):创建子账户convert_to_multi_sig_user(authorized_users, threshold):转换为多签账户
订单签名与安全机制
Exchange模块实现了完整的订单签名机制,确保交易指令的安全性:
signature = sign_l1_action(
self.wallet,
order_action,
self.vault_address,
timestamp,
self.expires_after,
self.base_url == MAINNET_API_URL,
)
所有交易指令都经过加密签名,防止被篡改,保障用户资产安全。
Info与Exchange模块的协同工作机制
Info模块与Exchange模块通过紧密的数据交互实现协同工作,形成完整的交易流程:
数据共享与依赖关系
Exchange模块在初始化时会创建Info模块的实例,建立长期的数据依赖关系:
class Exchange(API):
def __init__(...):
self.info = Info(base_url, True, meta, spot_meta, perp_dexs, timeout)
这种设计确保Exchange模块可以随时获取最新的市场数据和用户状态。
典型交易流程中的模块协作
以市价开仓操作为例,两个模块的协作流程如下:
-
数据准备:Exchange模块通过Info模块获取最新市场价格
# 获取中间价作为参考 px = float(self.info.all_mids(dex)[coin]) -
价格计算:根据市场价格和滑点设置计算实际下单价格
# 计算滑点后的价格 px *= (1 + slippage) if is_buy else (1 - slippage) -
订单创建:使用计算好的价格创建并发送订单
return self.order( name, is_buy, sz, px, order_type={"limit": {"tif": "Ioc"}}, reduce_only=False ) -
订单状态查询:通过Info模块查询订单执行结果
# 查询订单状态 orders = self.info.open_orders(address)
实时数据更新机制
Info模块还提供了WebSocket支持,用于接收实时市场数据更新:
def subscribe(self, subscription: Subscription, callback: Callable[[Any], None]) -> int:
self._remap_coin_subscription(subscription)
if self.ws_manager is None:
raise RuntimeError("Cannot call subscribe since skip_ws was used")
else:
return self.ws_manager.subscribe(subscription, callback)
通过WebSocket接收的实时数据可以及时更新Exchange模块的订单策略,实现更精准的交易决策。
实际应用示例
以下是一个利用Info和Exchange模块协同工作的简单交易示例:
from hyperliquid.info import Info
from hyperliquid.exchange import Exchange
from eth_account import Account
# 初始化Info模块
info = Info()
# 获取市场数据
mids = info.all_mids()
print("当前市场中间价:", mids)
# 初始化Exchange模块
private_key = "你的私钥"
wallet = Account.from_key(private_key)
exchange = Exchange(wallet)
# 下单交易
response = exchange.market_open("BTC", True, 0.001)
print("订单响应:", response)
# 查询订单状态
orders = info.open_orders(wallet.address)
print("当前挂单:", orders)
这个示例展示了如何使用Info模块获取市场数据,然后使用Exchange模块执行交易,最后再通过Info模块查询订单状态,完整演示了两个模块的协同工作流程。
总结
Hyperliquid-Python-SDK的Info模块和Exchange模块通过职责分离与紧密协作,为开发者提供了强大而灵活的交易工具。Info模块作为数据中心提供市场和用户信息,Exchange模块作为执行引擎处理交易操作,二者的协同工作使得复杂的交易策略能够简单高效地实现。
无论是量化交易策略开发,还是简单的API交易集成,理解并合理运用这两个核心模块都是成功的关键。通过本文的解析,希望能帮助开发者更好地掌握Hyperliquid-Python-SDK的使用,构建稳定可靠的交易系统。
更多推荐




所有评论(0)