Trading Algorithmique sur le DEX Hyperliquid en Python : Guide Complet
Découvrez comment configurer et automatiser votre trading algorithmique sur le DEX Hyperliquid à l’aide de Python et ccxt.
Hyperliquid a fait le buzz grâce à son airdrop géant, l’un des plus grands jamais réalisés, d’une valeur de 1,6 million de dollars en HYPE ! Vous vous demandez peut-être pourquoi et comment ont-ils réussi cela ? Nous aussi !
Nous avons exploré cette plateforme et avons compris les raisons de son succès. Hyperliquid est très bien conçue, simple, conviviale et propose une API parfaitement adaptée au trading algorithmique. Toutes les fonctionnalités de trading manuel souhaitables y sont présentes. Ajoutez à cela le principal avantage des DEX : vous tradez directement avec les fonds présents sur votre wallet, sans intermédiaire. De plus, Hyperliquid offre des frais de trading très alléchants. Vous avez là une « petite usine à gaz » qui plaira à de nombreux algotraders.
Ceci étant dit, entrons dans le concret et laissez-nous vous guider sur la manière de trader de façon algorithmique sur Hyperliquid, avec un petit jupyter notebook Python open source à l’appui (vous le trouverez ici). Si vous souhaitez voir notre vidéo expliquant, étape par étape, comment créer votre premier trading bot sur Hyperliquid, la voici ci-dessous.
Démarrage sur Hyperliquid : Création de Compte et Configuration Initiale
Se Connecter à Hyperliquid : Via Wallet ou Email
Vous trouverez le site officiel de “Hyperliquid” et un bonus de rédéuction de frais ici : https://app.hyperliquid.xyz/join/CRYPTOROBOT.
Pour pouvoir trader, la première étape est de lier votre compte à des fonds. Deux choix s’offrent à vous :
- Lier directement un wallet
- Configurer votre compte avec une adresse e-mail
Voyons rapidement la marche à suivre dans les deux cas.
- Cliquez sur “Connect” afin d’ouvrir le panneau (2).
- Vous verrez ensuite les choix qui s’offrent à vous : l’option e-mail, des wallets déjà préconfigurés (WalletConnect, OKX, Coinbase) et un champ libre pour un autre wallet éventuel.
- Si vous avez une extension de wallet dans votre navigateur, comme Metamask, vous aurez ce choix en deuxième position dans le panneau (2). Cliquez dessus. Une notification sera alors envoyée à votre extension de wallet. Rendez-vous sur l’extension, acceptez la connexion et suivez les étapes d’acceptation pour finaliser la liaison.
Si vous n’avez pas d’extension de wallet connectée dans votre navigateur, le panneau (2) ressemblera à ceci, avec un “default wallet” à la place :
Si vous choisissez la voie de l’e-mail, vous devrez renseigner un code de vérification envoyé par mail. Ensuite, pour déposer des coins sur votre compte, c’est très simple : cliquez sur le bouton “Deposit” en haut à droite (1 sur le screenshot ci-dessous).
En (2), vous voyez l’adresse sur laquelle déposer. Notez bien que, pour l’instant, uniquement des USDC sur le réseau Arbitrum One sont pris en charge. Si vous faites un transfert, veillez à sélectionner le bon réseau, sinon vos coins s’évaporeront dans l’ether (jeu de mots voulu !). Une fois le dépôt effectué, vous verrez votre solde apparaître dans vos balances en (3).
Naviguer dans l’Interface de Trading Crypto sur Hyperliquid
Avec vos coins en place, vous pouvez commencer à trader. Comme le montre l’image ci-dessous, l’interface est très similaire à celle d’un CEX :
- (1) Une grande variété de marchés et de coins est disponible.
- (2) Vous pouvez placer vos ordres de la même manière que sur un exchange centralisé.
Vous disposez d’une panoplie riche d’ordres :
- Ordres limite ou marché
- Ordres avec stop loss et take profit
- Ordres plus complexes : stop limit, stop market, TWAP, Scale, option reduce only
- Choix du mode de marge et du levier pour le marché futures, etc.
Mais arrêtons-nous ici pour le trading manuel. Notre objectif est d’explorer le trading algorithmique. Nous verrons donc comment placer ce type d’ordres, obtenir des informations sur les marchés et les positions, le tout en Python.
Obtenir des Clés API et S'Authentifier avec Hyperliquid en Python
Générer vos Clés API Wallet sur Hyperliquid
La première étape pour réaliser du trading via un code est de créer des clés API. Celles-ci autoriseront votre code à placer des ordres pour vous. L’un des grands avantages d’Hyperliquid est que les clés API sont des “API Wallets” (ou “agent wallets”). Vous n’avez donc jamais besoin de renseigner les codes d’accès de votre wallet externe. De plus, ces clés API peuvent placer des ordres, mais jamais effectuer de transferts, offrant une sécurité supplémentaire.
Pour créer cela sur Hyperliquid :
- Rendez-vous dans la rubrique “More” (1 dans le screenshot ci-dessous).
- Donnez un nom à votre clé, générez son adresse (3) puis autorisez-la en cliquant sur (4).
Après avoir cliqué sur “Authorize”, une fenêtre s’ouvrira.
- Indiquez le nombre de jours de validité (1), 180 étant le maximum.
- Copiez la clé privée du wallet (2), indispensable pour votre code.
S’Authentifier avec le DEX Hyperliquid en Python (ccxt)
Une autre bonne nouvelle : Hyperliquid est supporté par la librairie ccxt. Celle-ci regroupe les API de centaines d’exchanges sous une même structure. Plus besoin de gérer chaque particularité d’exchange ou de vous soucier du cryptage de signature, ccxt s’en charge.
La première étape consiste à configurer l’authentification avec la clé API que nous venons de créer, dans la première cellule du Jupyter Notebook. Avec CCXT, cela se fait simplement après son importation :
import ccxt
dex = ccxt.hyperliquid({
"walletAddress": "", # /!\ Adresse publique de votre compte
"privateKey": "", # Clé privée de la clé API
})
Il y a une subtilité importante ici. Dans “walletAddress”, il ne faut pas donner l’“API Wallet Address” de la clé API que nous venons de créer, mais bien l’adresse publique de votre compte/wallet. Vous pouvez la trouver en haut à droite de la page web en cliquant sur votre compte/adresse. Vous pouvez facilement la copier grâce au bouton copie (1).
Pour la "privateKey", vous devez renseigner la clé privée de l’API Wallet que vous venez de créer. Une fois cela fait, vous pouvez exécuter la cellule.
Pour vérifier que les informations saisies sont correctes, exécutez la cellule suivante qui contient la méthode fetch_balance
. Cela permettra de confirmer l'absence d'erreur et d'afficher les fonds disponibles dans votre wallet, comme illustré ci-dessous :
dex.fetch_balance()
Ce qui affichera:
{'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}}d
Nous avions déposé 20 USDC pour ce tutoriel, nous les retrouvons donc (moins les frais de transfert).
Trader des Cryptomonnaies sur le DEX Hyperliquid en Python
Placer des Ordres au Marché en Python sur Hyperliquid DEX
Nous sommes maintenant prêts à placer des ordres. Rien de tel qu’un ordre au marché pour commencer ! Avec ccxt, c’est très simple : on utilise la méthode create_order
, comme ceci :
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)
Nous avons au préalable défini les caractéristiques de notre ordre :
- Symbole : ici
ETH/USDC:USDC
, signifiant la paire ETH/USDC sur le marché futures. - Type :
market
(ordre au marché). - Side :
buy
(achat). - Quantité : 0,01 ETH.
- Prix : obtenu via le “midPx” (moyenne entre le meilleur bid et ask).
Particularité d’Hyperliquid : même pour un ordre au marché, il faut renseigner un prix. Si on ne le fait pas, on obtient une erreur indiquant :
“ArgumentsRequired: hyperliquid market orders require price to calculate the max slippage price. Default slippage can be set in options (default is 5%).”
C’est une sécurité pour éviter qu’un ordre market ne s’exécute trop loin du prix souhaité.
Nous utilisons donc une estimation du prix au moment du placement de l’ordre, en demandant le “mid price” de l’ETH à Hyperliquid. Cela se fait grâce à la méthode load_markets()
de ccxt qui récupère toutes les informations caractérisant chaque marché sur la plateforme. Une fois le create_order
exécuté, nous obtenons une réponse sous forme de JSON, ci-dessous, contenant toutes les informations de l’ordre.
{'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}
Comme c’était une ouverture de position “long” sur un marché futures, on retrouve cette position sur la page web, sous le graphique.
Récupérer les Informations sur les Positions Ouvertes en Python
Une fois une ou plusieurs positions ouvertes, il est très utile de pouvoir obtenir leurs caractéristiques : taille, sens (long/short), prix de liquidation, PnL latent, marge initiale, etc.
Pour cela, utilisez la méthode fetch_positions
de ccxt :
symbols = ["ETH/USDC:USDC"]
dex.fetch_positions(symbols)
Le paramètre de la fonction est une liste contenant les symboles pour lesquels vous souhaitez récupérer les informations des positions. Pour notre exemple, la réponse obtenue est la suivante :
[{'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}]
Clôturer une Position en Python sur Hyperliquid
Une autre raison pour laquelle la récupération des informations de position est utile : clore une position. Si nous souhaitons fermer la totalité d’une position longue, il est judicieux d’obtenir sa taille totale grâce à 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})
Ici, comme nous fermons un long, nous ouvrons un ordre inverse (side = "sell"). Très important : nous ajoutons le paramètre "reduceOnly": True
pour indiquer qu’il s’agit d’une fermeture de position existante, et non de l’ouverture d’une nouvelle. Notez que le montant à clôturer est récupéré grâce à fetch_positions
(via "contracts"
).
Si vous souhaitez bénéficier de réductions sur les frais de trading avec Hyperliquid, vous pouvez créer un compte via ce lien https://app.hyperliquid.xyz/join/CRYPTOROBOT.
Placer un Ordre Limite en Python sur Hyperliquid
Passons maintenant à un ordre limite. Le principe reste le même, il suffit d’adapter le type d’ordre :
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)
Nous stockons l’ordre dans la variable order
pour accéder à ses informations, par exemple son id
. Tant que le prix du marché n’atteint pas le niveau défini (3300 USDC/ETH dans cet exemple), l’ordre reste “open” et vous pouvez le voir dans la rubrique “open orders” sous le graphique.
Tant que le prix de la cryptomonnaie n’atteint pas celui spécifié dans l’ordre limite, l’ordre reste en attente. Vous le trouverez dans la section “Open Orders”, située sous le graphique, comme illustré dans la capture d’écran ci-dessous.
Annuler des Ordres en Python sur Hyperliquid
Une autre raison pour laquelle nous avons stocké les informations de l’ordre dans la variable order
est de pouvoir facilement récupérer l’ID de l’ordre, un élément indispensable pour identifier et gérer cet ordre. Par exemple, si nous souhaitons l’annuler, cela peut être fait simplement avec la méthode cancel_order
de CCXT, comme illustré ci-dessous :
symbol = "ETH/USDC:USDC"
order_id = order["id"]
dex.cancel_order(order_id, symbol)
Techniques Avancées de Trading sur le DEX Hyperliquid en Python
Modifier le Levier et le Mode de Marge sur Hyperliquid via Python
Avant d’ouvrir une position, il est important de définir correctement le levier et le mode de marge pour ajuster l’exposition et le risque. Les configurations par défaut ne correspondent pas nécessairement à vos besoins.
Sur Hyperliquid, vous avez le choix entre deux modes :
- Isolated : limite la marge à la position en cours.
- Cross : utilise la totalité de vos fonds disponibles pour soutenir vos positions ouvertes.
En outre, vous pouvez spécifier la valeur du levier souhaité.
Pour ajuster ces paramètres via CCXT, utilisez la méthode set_margin_mode
, comme montré ci-dessous :
symbol = "ETH/USDC:USDC"
margin_mode = "isolated" # peut être "cross" si vous le souhaitez
leverage = 2 # exemple : levier x2
dex.set_margin_mode(margin_mode, symbol, params={"leverage": leverage})
Une fois défini, ce paramètre s’appliquera aux positions futures ouvertes sur ce symbole.
Placer des Ordres Take Profit et Stop Loss en Python sur Hyperliquid
Après avoir ouvert une position, il est parfois souhaitable, selon la stratégie de trading que vous avez en tête, de placer des ordres de Take Profit (prendre profit) et de Stop Loss (arrêt des pertes) afin de gérer vos risques et sécuriser vos gains.
Dans ce cas, on utilise encore la méthode create_order
. Si notre position était un long, un take profit est une sortie, donc nous configurons side="sell"
. Le price
devient obsolète pour ce type d’ordre, mais nous devons tout de même le renseigner, sinon une erreur sera générée. Concernant la taille, si l’on souhaite faire un take profit partiel, on peut renseigner un "amount"
plus petit que la taille de la position ouverte. Pour un take profit total, nous pouvons utiliser l’astuce de prendre directement la taille de la position grâce à la méthode fetch_positions
.
Enfin, le prix auquel le take profit doit se déclencher est renseigné dans les paramètres spéciaux de la méthode, avec l’entrée "takeProfitPrice"
. Notez que, comme nous l’avons vu précédemment, nous prenons soin de renseigner “reduceOnly”: True
pour bien configurer une fermeture de position.
En résumé, en Python, cela donne :
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})
Pour ce qui est du stop loss, c’est identique, sauf que le prix du stop loss doit être communiqué avec l’entrée "stopLossPrice"
, comme ceci :
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"]
sl_price = 3500
order = dex.create_order(symbol, market_type, side, amount, price=price, params={"stopLossPrice": sl_price, "reduceOnly": True})
Placer des Ordres Stop Market en Python sur Hyperliquid
L’ordre du type “stop market” n’est pas seulement utilisé pour configurer des stop loss ou take profit. Il peut aussi être employé pour entrer en position, par exemple pour « attraper » des breakouts. Par exemple, entrer en long uniquement si le prix a atteint un niveau de prix supérieur.
Pour placer un tel ordre, il suffit de renseigner un stopPrice
dans les paramètres spéciaux de create_order
, comme ceci :
symbol = "ETH/USDC:USDC"
market_type = "market"
side = "buy"
price = dex.load_markets()["ETH/USDC:USDC"]["info"]["midPx"]
amount = 0.05
stop_price = 4200
dex.create_order(symbol, market_type, side, amount, price=price, params={"stopPrice": stop_price})
Voilà, nous avons fait un tour complet de ce qu’il est possible de faire en Python avec ccxt sur Hyperliquid. Vous disposez désormais de suffisamment d’outils pour automatiser facilement votre trading sur cette plateforme, placer différents types d’ordres, ajuster votre levier et votre marge, ou encore sécuriser vos positions avec des stop loss et take profit. N'oubliez pas que si vous souhaitez bénéficier de réductions sur les frais de trading avec Hyperliquid, vous pouvez créer un compte via ce lien https://app.hyperliquid.xyz/join/CRYPTOROBOT.
Bon trading algorithmique !
- Authors
- Name
- Crypto Robot
- @CryptoRobotfr
- Description
- Fondateurs de la chaîne YouTube Crypto Robot, nous sommes spécialisés en trading algorithmique.
Optimisez vos stratégies de trading : analysez le PnL et les métriques de performance avec Python
Créez et automatisez vos stratégies de trading grâce à ChatGPT o1, Trading View et les Signal Bots
Le Guide sur le Copy Trading : Réalités, Pièges et Outils d’Analyse pour Trouver des Traders Fiables
Stratégie de Trading Automatisée TRIX (Suivi de Tendance)
Optimiser Votre Portefeuille Financier en 2024 : ETF, Actions, Cryptomonnaies, Obligations et Métaux Précieux