Hyperliquid算法交易Python指南

本文将指导你如何使用Python在 Hyperliquid DEX上进行算法交易。

Hyperliquid算法交易Python指南
一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | AVAX | FTM | OK

Hyperliquid 最近通过其大规模空投引起轰动——这是有史以来最大的空投之一——价值超过 10 亿美元!您可能想知道他们是如何以及为什么成功做到这一点的。我们也想知道同样的事情!

在探索该平台后,它成功的原因变得清晰起来。Hyperliquid 设计得非常好,用户友好,并且具有非常适合算法交易的 API。它包括你期望手动交易的所有理想功能。除此之外,DEX 的主要优势是:你可以直接从钱包进行交易,无需任何中介。此外,Hyperliquid 提供非常有吸引力的交易费。简而言之,它是一个“小型动力源”,将吸引许多算法交易者。

话虽如此,让我们开始吧。我将指导你如何使用基于 Python 的 Jupyter 笔记本在 Hyperliquid 上进行算法交易,可以在此处找到开源代码。

开始使用 Hyperliquid:帐户创建和初始设置

1、连接到 Hyperliquid:通过钱包或电子邮件

要开始交易,第一步是将您的账户链接到一些基金。您有两个主要选项:

  • 直接链接钱包
  • 使用电子邮件地址设置你的帐户

让我们快速介绍一下这两种方法。

单击右上角的“连接”(下面屏幕截图中的步骤 1)以打开面板 (2)。

然后,你将看到可用的选项:电子邮件、预配置的钱包(WalletConnect、OKX、Coinbase)以及你可能使用的任何其他钱包的字段。

如果你有基于浏览器的钱包扩展程序(例如 Metamask),它将作为面板 (2) 中的第二个选项出现。单击它。你的钱包扩展程序中会弹出一条通知。转到扩展程序,批准连接,然后按照确认步骤完成链接。

如果你的浏览器中没有连接的钱包扩展程序,面板 (2) 将如下所示,带有“默认钱包”占位符:

如果你选择电子邮件,则需要提供通过电子邮件发送的验证码。之后,将代币存入你的账户非常简单:单击右上角的“存款”按钮(在下面的屏幕截图中标记为 (1))。

在部分 (2) 中,你将看到存款地址。目前,仅支持 Arbitrum One 网络上的 USDC。如果你进行转账,请确保选择了正确的网络;否则,你的代币可能会消失在以太中(双关语!)。存款完成后,你的余额将显示在部分 (3)。

2、浏览 Hyperliquid 加密货币交易界面

有了资金,你就可以开始交易了。如下图所示,界面与 CEX(中心化交易所)非常相似:

(1) 提供各种市场和代币。
(2) 您可以像在中心化交易所一样下订单。

有丰富的订单类型可供选择:

  • 限价或市价订单
  • 带止损和止盈的订单
  • 更复杂的订单:止损限价、止损市价、TWAP、Scale、仅减仓选项、保证金模式选择、期货市场杠杆等等。

关于手动交易,我们就到此为止吧。我们的主要目标是深入研究算法交易。我们将展示如何下达此类订单、检索市场和头寸信息——所有这些都用 Python 完成。

获取 API 密钥并使用 Python 中的 Hyperliquid 进行身份验证

3、在 Hyperliquid 上生成你的 API 钱包密钥

通过代码进行交易的第一步是创建 API 密钥,该密钥授权你的代码代表你下订单。Hyperliquid 的一个巨大优势是 API 密钥本质上是“API 钱包”(或“代理钱包”)。你永远不需要提供外部钱包的访问代码。此外,这些密钥可以下订单但永远不会执行提款,从而增加了额外的安全层。

要在 Hyperliquid 上创建这些密钥:

  • 转到“更多”部分(下面屏幕截图中的 1)。
  • 命名你的密钥,生成其地址(3),然后单击授权(4)。

单击“授权”后,将出现一个窗口。

  • 指定到期前的天数(1),最多 180 天。
  • 复制钱包的私钥(2),这对您的代码至关重要。

4、使用CCXT进行 Hyperliquid DEX 身份验证

另一个好消息:ccxt 库支持 Hyperliquid。ccxt 为数百个交易所提供了统一的界面,处理它们的特性和签名,因此你不必自己实现。

首先,使用你刚刚创建的 API 密钥设置身份验证。这在 Jupyter Notebook 的第一个单元格中完成。使用 ccxt,它看起来像这样:

import ccxt

dex = ccxt.hyperliquid({
    "walletAddress": "", # /!\ Public address of your account/wallet
    "privateKey": "",    # Private key from the API wallet
})

有一个关键细节:在“walletAddress”中,不要提供你刚刚创建的“API 钱包地址*”。而是使用你的帐户/钱包的公共地址。可以通过单击你的帐户/地址在网页的右上角找到它。你可以使用复制按钮 (1) 轻松复制它。

对于“privateKey”,使用你创建的 API 钱包的私钥。填写完这些后,可以运行该单元格。

要验证正确性,请使用 fetch_balance 运行下一个单元格。这确认所有设置都正确,并显示你的可用资金,如下所示:

dex.fetch_balance()

这将显示类似以下内容:

{'info': {'marginSummary': {'accountValue': '19.913163',
   'totalNtlPos': '0.0',
   'totalRawUsd': '19.913163',
   'totalMarginUsed': '0.0'},
  'crossMarginSummary': {'accountValue': '19.913163',
   'totalNtlPos': '0.0',
   'totalRawUsd': '19.913163',
   'totalMarginUsed': '0.0'},
  'crossMaintenanceMarginUsed': '0.0',
  'withdrawable': '19.913163',
  'assetPositions': [],
  'time': '1733403498591'},
 'USDC': {'total': 19.913163, 'free': 19.913163, 'used': 0.0},
 'timestamp': 1733403498591,
 'datetime': '2024-12-05T12:58:18.591Z',
 'free': {'USDC': 19.913163},
 'used': {'USDC': 0.0},
 'total': {'USDC': 19.913163}}

我们为本教程存入了 20 USDC,我们在这里看到它们(减去转账费)。

5、在 Hyperliquid DEX 上执行加密货币交易

我们现在可以下订单了。让我们从市场订单开始。使用 ccxt,它很简单:

symbol = "ETH/USDC:USDC"
market_type = "market"
side = "buy"
amount = 0.01
price = dex.load_markets()["ETH/USDC:USDC"]["info"]["midPx"]

dex.create_order(symbol, market_type, side, amount, price=price)

以下是我们为订单定义的内容:

  • 符号:ETH/USDC:USDC,用于 ETH/USDC 期货市场。
  • 类型:市场(市价单)。
  • 方向:买入(买单)。
  • 数量:0.01 ETH。
  • 价格:从 midPx(最佳买入价和最佳卖出价之间的平均值)检索。

Hyperliquid 特定:即使是市价单,你也必须提供价格。否则,你会收到错误:

“ArgumentsRequired:超流动性市价单需要价格来计算最大滑点价格。默认滑点可以在选项中设置(默认为 5%)。”

此保护措施可防止执行远离预期价格的市价单。

我们在下单时使用 Hyperliquid 估计的“中间价”,通过调用 load_markets 来获取所有市场详细信息。运行 create_order 后,你将收到包含订单信息的 JSON 响应:

{'info': {'filled': {'totalSz': '0.01',
   'avgPx': '3564.6',
   'oid': '52344575851'}},
 'id': '52344575851',
 'clientOrderId': None,
 'timestamp': None,
 'datetime': None,
 'lastTradeTimestamp': None,
 'lastUpdateTimestamp': None,
 'symbol': None,
 'type': None,
 'timeInForce': None,
 'postOnly': None,
 'reduceOnly': None,
 'side': None,
 'price': None,
 'triggerPrice': None,
 'amount': 0.01,
 'cost': None,
 'average': 3564.6,
 'filled': None,
 'remaining': None,
 'status': None,
 'fee': None,
 'trades': [],
 'fees': [],
 'stopPrice': None,
 'takeProfitPrice': None,
 'stopLossPrice': None}

由于我们在期货市场开立了多头仓位,你将在图表下方的网页界面上看到此仓位。

6、使用 Python 检索未平仓头寸的信息

一旦你拥有一个或多个未平仓头寸,访问其详细信息会很有帮助:规模、方向(多头/空头)、清算价格、未实现盈亏、初始保证金等。

使用 ccxt 中的 fetch_positions 方法:

symbols = ["ETH/USDC:USDC"]
dex.fetch_positions(symbols)

对于我们的示例,可能会得到类似以下内容:

[{'info': {'type': 'oneWay',
   'position': {'coin': 'ETH',
    'szi': '0.01',
    'leverage': {'type': 'isolated', 'value': '2', 'rawUsd': '-19.675763'},
    'entryPx': '3932.4',
    'positionValue': '39.21',
    'unrealizedPnl': '-0.114',
    'returnOnEquity': '-0.00579799',
    'liquidationPx': '1987.45080808',
    'marginUsed': '19.534237',
    'maxLeverage': '50',
    'cumFunding': {'allTime': '0.0',
     'sinceOpen': '0.0',
     'sinceChange': '0.0'}}},
  'id': None,
  'symbol': 'ETH/USDC:USDC',
  'timestamp': None,
  'datetime': None,
  'isolated': True,
  'hedged': None,
  'side': 'long',
  'contracts': 0.01,
  'contractSize': 1.0,
  'entryPrice': 3932.4,
  'markPrice': None,
  'notional': 39.21,
  'leverage': 2.0,
  'collateral': 19.534237,
  'initialMargin': 19.534237,
  'maintenanceMargin': None,
  'initialMarginPercentage': None,
  'maintenanceMarginPercentage': None,
  'unrealizedPnl': -0.114,
  'liquidationPrice': 1987.45080808,
  'marginMode': 'isolated',
  'percentage': 0.5835907488989714}]

7、在 Hyperliquid 上使用 Python 平仓

仓位信息对于平仓也很有用。例如,要完全平掉多头仓位,了解 fetch_positions 中的总规模会有所帮助:

symbol = "ETH/USDC:USDC"
market_type = "market"
side = "sell"
amount = dex.fetch_positions([symbol])[0]["contracts"]
price = dex.load_markets()["ETH/USDC:USDC"]["info"]["midPx"]

dex.create_order(symbol, market_type, side, amount, price=price, params={"reduceOnly":True})

由于我们要平掉多头仓位,因此我们发出卖单。包含 "reduceOnly": True 非常重要,以表明这是平仓,而不是开立新交易。金额直接取自 fetch_positions(“合约”)。

8、在 Hyperliquid 上使用 Python 下达限价订单

现在让我们尝试限价订单:

symbol = "ETH/USDC:USDC"
market_type = "limit"
side = "buy"
amount = 0.01
price = 3300

order = dex.create_order(symbol, market_type, side, amount, price=price)
print(order)

我们存储订单以访问其 ID。如果市场未达到 3300 USDT,订单将保持“未结”。可以在界面中的“未结订单”下看到它。

9、在 Hyperliquid 上使用 Python 取消订单

存储订单后,我们可以检索其 ID 来管理它。例如,要取消订单:

symbol = "ETH/USDC:USDC"
order_id = order["id"]

dex.cancel_order(order_id, symbol)

10、在 Hyperliquid上进行高级算法交易

在开仓之前,你可能需要配置杠杆和保证金模式以适合你的风险管理方法。Hyperliquid 提供:

  • 独立保证金:保证金仅限于当前仓位。
  • 交叉保证金:使用你的所有资金来支持未平仓头寸。

你还可以指定杠杆。使用 set_margin_mode:

symbol = "ETH/USDC:USDC"
margin_mode = "isolated"   # Can also be "cross"
leverage = 2               # Example: 2x leverage

dex.set_margin_mode(margin_mode, symbol, params={"leverage": leverage})

此设置适用于在该符号上开立的未来头寸。

11、在 Hyperliquid 上执行止盈和止损订单

开仓后,你可能希望下达止盈 (TP) 和止损 (SL) 订单来管理风险并确保收益。

在这种情况下,我们仍然使用 create_order 方法。 如果我们的头寸是多头,则止盈是退出,因此我们设置 side="sell"。 对于这种类型的订单,价格变得无关紧要,但我们仍需要指定它;否则将发生错误。 关于规模,如果我们想设置部分止盈,我们可以指定小于开仓规模的金额。对于完全止盈,我们可以使用 fetch_positions 方法直接检索仓位大小的技巧。最后,使用条目“takeProfitPrice”,在方法的特殊参数中指定应触发止盈的价格。请注意,如前所述,我们确保设置“reduceOnly”:True 以正确配置仓位平仓。

总之,在 Python 中,它看起来像这样:

symbol = "ETH/USDC:USDC"
market_type = "market"
side = "sell"
price = dex.load_markets()["ETH/USDC:USDC"]["info"]["midPx"]

# amount = dex.fetch_positions([symbol])[0]["contracts"]
amount = 0.05
tp_price = 4500

dex.create_order(symbol, market_type, side, amount, price=price, params={"takeProfitPrice": tp_price, "reduceOnly": True})

12、在 Hyperliquid 上下达止损市价单

“止损市价”订单类型不仅用于设置止损或获利。它还可用于进入仓位,例如“捕捉”突破。例如,仅当价格达到更高价格水平时才进入多头仓位。

要下这样的订单,只需要在 create_order 的特殊参数中指定 stopPrice,如下所示:

symbol = "ETH/USDC:USDC"
market_type = "market"
side = "sell"
price = dex.load_markets()["ETH/USDC:USDC"]["info"]["midPx"]

# amount = dex.fetch_positions([symbol])[0]["contracts"]
amount = 0.05
tp_price = 4500

dex.create_order(symbol, market_type, side, amount, price=price, params={"takeProfitPrice": tp_price, "reduceOnly": True})

13、结束语

就是这样!我们已经介绍了可以在 Hyperliquid DEX 上使用 ccxt 在 Python 中访问的一系列功能。使用这些工具(自动交易、下达各种订单类型、调整杠杆和保证金、设置止损和止盈),你就可以实施和完善自己的算法交易策略。


原文链接:Complete Guide to Algorithmic Trading in Python on the Hyperliquid DEX

DefiPlot翻译整理,转载请标明出处

免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。
通过 NowPayments 打赏