Hyperliquid算法交易Python指南
本文将指导你如何使用Python在 Hyperliquid DEX上进行算法交易。
![Hyperliquid算法交易Python指南](/blog/content/images/size/w1200/2025/02/hyperliquid-algorithmic-trading-guide.png)
一键发币: 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) 中的第二个选项出现。单击它。你的钱包扩展程序中会弹出一条通知。转到扩展程序,批准连接,然后按照确认步骤完成链接。
![](http://defiplot.com/blog/content/images/2025/02/image-12.png)
如果你的浏览器中没有连接的钱包扩展程序,面板 (2) 将如下所示,带有“默认钱包”占位符:
![](http://defiplot.com/blog/content/images/2025/02/image-13.png)
如果你选择电子邮件,则需要提供通过电子邮件发送的验证码。之后,将代币存入你的账户非常简单:单击右上角的“存款”按钮(在下面的屏幕截图中标记为 (1))。
![](http://defiplot.com/blog/content/images/2025/02/image-14.png)
在部分 (2) 中,你将看到存款地址。目前,仅支持 Arbitrum One 网络上的 USDC。如果你进行转账,请确保选择了正确的网络;否则,你的代币可能会消失在以太中(双关语!)。存款完成后,你的余额将显示在部分 (3)。
2、浏览 Hyperliquid 加密货币交易界面
有了资金,你就可以开始交易了。如下图所示,界面与 CEX(中心化交易所)非常相似:
(1) 提供各种市场和代币。
(2) 您可以像在中心化交易所一样下订单。
![](http://defiplot.com/blog/content/images/2025/02/image-15.png)
有丰富的订单类型可供选择:
- 限价或市价订单
- 带止损和止盈的订单
- 更复杂的订单:止损限价、止损市价、TWAP、Scale、仅减仓选项、保证金模式选择、期货市场杠杆等等。
关于手动交易,我们就到此为止吧。我们的主要目标是深入研究算法交易。我们将展示如何下达此类订单、检索市场和头寸信息——所有这些都用 Python 完成。
获取 API 密钥并使用 Python 中的 Hyperliquid 进行身份验证
3、在 Hyperliquid 上生成你的 API 钱包密钥
通过代码进行交易的第一步是创建 API 密钥,该密钥授权你的代码代表你下订单。Hyperliquid 的一个巨大优势是 API 密钥本质上是“API 钱包”(或“代理钱包”)。你永远不需要提供外部钱包的访问代码。此外,这些密钥可以下订单但永远不会执行提款,从而增加了额外的安全层。
要在 Hyperliquid 上创建这些密钥:
- 转到“更多”部分(下面屏幕截图中的 1)。
- 命名你的密钥,生成其地址(3),然后单击授权(4)。
![](http://defiplot.com/blog/content/images/2025/02/image-16.png)
单击“授权”后,将出现一个窗口。
- 指定到期前的天数(1),最多 180 天。
- 复制钱包的私钥(2),这对您的代码至关重要。
![](http://defiplot.com/blog/content/images/2025/02/834061db-e328-4503-a55d-7b0e18d2f54b.png)
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) 轻松复制它。
![](http://defiplot.com/blog/content/images/2025/02/image-18.png)
对于“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}
由于我们在期货市场开立了多头仓位,你将在图表下方的网页界面上看到此仓位。
![](http://defiplot.com/blog/content/images/2025/02/image-19.png)
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,订单将保持“未结”。可以在界面中的“未结订单”下看到它。
![](http://defiplot.com/blog/content/images/2025/02/image-20.png)
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翻译整理,转载请标明出处
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。