Hyperliquid Python 下单指南

admin2025-11-26量化交易317
Hyperliquid 是一个去中心化交易所(DEX),支持永续合约和现货交易。其 API 允许通过 Python 进行下单操作,主要依赖官方 Python SDK(hyperliquid-python-sdk)。以下是详细步骤和示例代码。所有操作需在主网(https://api.hyperliquid.xyz)或测试网(https://api.hyperliquid-testnet.xyz)进行,建议先在测试网验证。1. 安装 SDK使用 pip 安装官方 SDK:
pip install hyperliquid-python-sdk
  • 要求 Python 3.10(部分依赖在 3.11 上有问题)。

  • 额外依赖:如需 WebSocket 支持,SDK 已内置。

2. 配置 API 密钥
  • 在 Hyperliquid App 中生成 API 钱包(专用交易钱包),获取地址(public key)和私钥(private key)。

  • 创建配置文件 config.json(在 examples 目录下复制示例并编辑):

{
  "account_address": "0xYourAccountAddress",
  "secret_key": "0xYourPrivateKey"
}
安全提示:私钥勿泄露,使用环境变量或加密存储。API 钱包需在 App 中授权。

3. 基本下单流程

  • 导入模块:使用 hyperliquid.exchange 进行下单,hyperliquid.info 查询市场数据。

  • 订单参数

    • coin:交易对,如 "BTC"(永续)或 "PURR"(现货)。

    • is_buy:True(买)/ False(卖)。

    • sz:数量(大小),字符串格式如 "0.001"。

    • px:价格,字符串格式如 "50000";市价单设为 "0"。

    • is_market:True(市价单)/ False(限价单)。

    • order_type:如 {"limit": {"tif": "Gtc"}}(Good 'til Canceled)。
      order_type:如 {"limit": {"tif": "Gtc"}}(有效直至撤销)。

    • 资产索引:永续从 meta.universe 获取,现货为 10000 + 索引。

  • 签名:SDK 自动处理 EIP-712 签名(基于 Arbitrum 链 ID 42161)。

4. 代码示例:放置订单以下是基本市价买单和限价卖单示例(基于官方 SDK 和 GitHub 示例)。运行前确保配置 config.json
import json
from hyperliquid.exchange import Exchange
from hyperliquid.info import Info
from hyperliquid.utils import constants
from hyperliquid.utils.types import Order

# 加载配置
with open('config.json', 'r') as f:
    config = json.load(f)

address = config['account_address']
secret_key = config['secret_key']

# 初始化(测试网示例,生产环境用 constants.MAINNET_API_URL)
base_url = constants.TESTNET_API_URL
info = Info(base_url, skip_ws=True)
exchange = Exchange(address, secret_key, base_url=base_url)

# 示例1: 市价买单(BTC 永续,数量 0.001)
order_msg = {
    "type": "order",
    "orders": [{
        "coin": "BTC",
        "is_buy": True,  # 买
        "sz": "0.001",   # 数量
        "px": "0",       # 市价单,价格忽略
        "is_market": True,
        "order_type": {"limit": {"tif": "Ioc"}}  # Immediate or Cancel
    }]
}

result = exchange.order(order_msg)
print("市价买单结果:", result)  # 返回订单状态,如 filled/pending

# 示例2: 限价卖单(ETH 永续,数量 0.5,价格 3000)
order_msg_limit = {
    "type": "order",
    "orders": [{
        "coin": "ETH",
        "is_buy": False,  # 卖
        "sz": "0.5",
        "px": "3000",     # 限价
        "is_market": False,
        "order_type": {"limit": {"tif": "Gtc"}}  # Good 'til Canceled
    }]
}

result_limit = exchange.order(order_msg_limit)
print("限价卖单结果:", result_limit)

# 查询用户状态(可选)
user_state = info.user_state(address)
print("用户持仓:", user_state)
输出示例(成功下单):
{
  "response": {
    "data": {
      "statuses": [{"filled": {"avgPx": "50000", "oid": 1234567890, "totalSz": "0.001"}}]
    },
    "type": "order"
  },
  "status": "ok"
}
取消订单:使用 exchange.cancel(cancel_msg),其中 cancel_msg 包含订单 ID 或 client_order_id。
5. 高级功能
  • 批量下单orders 列表支持多个订单。

  • 止盈/止损:在 order_type 中添加 "trigger": {"triggerPx": "价格", "tpsl": "tp/sl"}

  • WebSocket 实时数据:SDK 支持订阅订单更新和 L2 深度。

from hyperliquid.utils import constants
# 订阅用户事件
subscription = {"type": "userEvents", "user": address}
# 使用 exchange.subscribe() 处理
现货交易:资产 ID = 10000 + spot_meta.universe 中的索引。
6. 常见问题与最佳实践
  • 错误处理:检查 result['status'] == 'ok';常见错误如签名无效(私钥问题)或资金不足。

  • 测试:始终用测试网,资金从测试水龙头获取。

  • 限速:API 速率限制为 100 req/s;使用异步库如 async-hyperliquid(pip install async-hyperliquid)处理高频。

  • 文档与示例:完整示例见 GitHub hyperliquid-python-sdk,包括 basic_order.py

  • CCXT 集成:若需统一 API,可用 CCXT 库(pip install ccxt),支持 Hyperliquid。