Type/to search
8
Follow
1364
Followers
Pratique quantitative de l'échange DEX (2) - Guide de l'utilisateur Hyperliquid
Discussions
Created 2025-01-15 13:43:15  Updated 2025-01-16 09:52:43
 2
 4152

img

Préface

Récemment, la plateforme FMZ a ajouté la prise en charge d'Hyperliquid DEX, un échange décentralisé haute performance, offrant aux utilisateurs davantage d'options pour participer à des transactions décentralisées. Actuellement, la fonction de dépositaire de la plateforme FMZ a été entièrement mise à jour pour prendre en charge les transactions au comptant et à contrat perpétuel d'Hyperliquid et couvrir toutes les fonctions API du DEX.

Présentation de la plateforme Hyperliquid

Hyperliquid est une blockchain L1 haute performance optimisée à partir de zéro avec la vision de construire un système financier ouvert entièrement en chaîne. Les utilisateurs peuvent créer des applications de manière indépendante en interagissant avec des composants natifs efficaces tout en garantissant une expérience utilisateur fluide.

Les performances d’Hyperliquid L1 sont suffisantes pour prendre en charge un écosystème d’applications financières sans autorisation. Toutes les commandes, retraits d'ordres, transactions et liquidations sont effectués sur la chaîne de manière totalement transparente, avec des délais de bloc inférieurs à 1 seconde. Actuellement, la chaîne prend en charge une capacité de traitement allant jusqu’à 100 000 commandes par seconde.

Hyperliquid L1 utilise un algorithme de consensus personnalisé appelé HyperBFT, inspiré de Hotstuff et de ses successeurs. Le mécanisme de consensus et l’architecture du réseau sont optimisés de bas en haut pour répondre aux besoins d’une blockchain haute performance.

Grâce à ce guide, nous espérons vous aider à démarrer rapidement avec le trading programmatique et quantitatif d'Hyperliquid DEX sur la plateforme FMZ et à découvrir davantage d'opportunités de trading.

Contenu de la pratique

Protocole REST

  • Pratique de l'interface de marché.
  • Pratique de l'interface de trading (passation d'ordres, annulation d'ordres).
  • Pratiques de requêtes liées aux transactions (comptes, commandes).
  • Autres fonctions (spot, transfert de contrat, retrait de coffre-fort, transfert d'actifs vers un portefeuille, etc.).

Protocole Websocket

  • Pratique d'abonnement aux informations d'échange (il n'y a pas d'interface Trades dans l'interface REST, qui est complétée par l'interface Websocket)

Hyperliquid

  • Classification des types de transactions
    Hyperliquid est divisé en contrats spot et perpétuels en fonction des variétés de négociation. Sur la base de l'architecture de la plateforme FMZ, il est également divisé en objets d'échange spot Hyperliquid et en objets d'échange à terme Hyperliquid sur la plateforme FMZ. Ils correspondent respectivement à différentes variétés d'Hyperliquid DEX.

    Sur la page Ajouter un échange de la plateforme FMZ, vous pouvez configurer des objets d'échange au comptant et à terme Hyperliquid :

    https://www.fmz.com/m/platforms/add

    img

  • Division Environnement
    Comme la plupart des échanges, Hyperliquid dispose d'un environnement de test.

    • Adresse de l'application Mainnet :

      https://app.hyperliquid.xyz

      D'après l'expérience d'utilisation réelle, le réseau principal est relativement stable et la vitesse est également bonne.
      Adresse du nœud d'interface API du protocole REST correspondant :https://api.hyperliquid.xyz
      Les informations relatives à la signature des messages sont également différentes :source == "a"chainId = 42161

    • Adresse de l'application réseau de test :

      https://app.hyperliquid-testnet.xyz

      Le réseau de test plante souvent, mais il n'est utilisé que comme interface de test et pour se familiariser avec les fonctions de trading sur DEX.
      Adresse du nœud d'interface API du protocole REST correspondant :https://api.hyperliquid-testnet.xyz
      Les informations relatives à la signature des messages sont également différentes :source == "b"chainId = 421614

Connexion au portefeuille, informations de connexion et de configuration

Tout comme la méthode de connexion au portefeuille de la plupart des échanges DEX, vous pouvez utiliser l'application du portefeuille pour scanner le code QR pour vous connecter à Hyperliquid (basculez le portefeuille sur Arbitrum et scannez le code pour vous connecter, le réseau de test et le réseau principal sont les mêmes) .

  • Connexion du portefeuille à Hyperliquid

    img

  • Testnet Faucet (test de dépôt d'actifs USDC)

    Si vous souhaitez d'abord vous familiariser avec le testnet, vous pouvez trouver le faucet directement sur la page Hyperliquid après avoir connecté votre portefeuille à Hyperliquid.

    img

    Vous pouvez réclamer des actifs de test. Après avoir reçu l'USDC pour les tests, cliquez sur le bouton « Dépôt » pour le déposer dans Hyperliquid (il est préférable d'avoir de l'ETH pour le réseau de test Arbitrum).

  • Déposez des actifs USDC sur le réseau principal

    Cliquez sur le bouton « Dépôt » pour effectuer un dépôt, ce qui nécessite une vérification du portefeuille et consommera un peu d'ETH sur Arbitrum.

  • Créer une configuration de portefeuille proxy

    Lors de l'exécution de transactions manuelles sur la page de l'application Hyperliquid, la page génère automatiquement une adresse de portefeuille proxy et une clé privée, qui sont enregistrées dans le navigateur et utilisées pour des opérations telles que la passation de commandes sur la page du navigateur. Si nous voulons faire du programmatique et du quantitatif Comment la transaction doit-elle obtenir ces informations de configuration ?

    Vous pouvez créer l'adresse de portefeuille proxy requise et la clé privée correspondante sur la page API Hyperliquid :

    img

    img

      1. Donnez un nom au portefeuille proxy à créer.
      1. Générer l'adresse et la clé privée.
      1. Autorisez le portefeuille proxy à l'aide du portefeuille connecté à Hyperliquid.
  • Configurer l'adresse du portefeuille proxy et la clé privée sur FMZ

    Vous pouvez ensuite configurer ces informations sur la plateforme FMZ (l'interface de configuration est mentionnée ci-dessus).

    https://www.fmz.com/m/platforms/add

    • Adresse du portefeuille : l'adresse du portefeuille connecté à Hyperliquid (attention, pas l'adresse du portefeuille proxy).
    • Wallet PrivateKey : la clé privée du portefeuille connectée à Hyperliquid (facultatif, requis uniquement lors de l'appel d'API telles que les transferts, peut être laissé vide).
    • Clé secrète : Clé privée du portefeuille proxy (générée à l'étape précédente, la clé privée affichée après autorisation).

Pratique Hyperliquid sur FMZ

Informations nécessaires à la configuration de l'objet d'échange :

  • L'adresse du portefeuille est utilisée pour interroger les informations sur les transactions des utilisateurs
  • Wallet PrivateKey est utilisé pour le transfert, le transfert et d'autres opérations
  • La clé secrète est utilisée pour les opérations liées aux transactions

Une fois la configuration terminée, nous pouvons la tester sur la plateforme FMZ. Nous utilisons directement l'outil de débogage de la plateforme FMZ pour les tests pratiques.

https://www.fmz.com/m/debug

Si vous utilisez un objet d'échange Hyperliquid configuré avec des informations de testnet, vous devrez effectuer certaines opérations de commutation lors de son utilisation, par exemple :

javascript
function main() { // REST协议API地址切换到测试网 exchange.SetBase("https://api.hyperliquid-testnet.xyz") // source : a 主网 , b 测试网 exchange.IO("source", "b") return exchange.GetAccount() }

La configuration du réseau principal ne nécessite pas l'opération de commutation ci-dessus. Les interfaces API liées aux produits spot et à terme sur la bourse Hyperliquid DEX sont presque les mêmes, avec seulement de légères différences dans les détails. Ensuite, nous utilisonsInformations sur la configuration du réseau principaletInformations sur la configuration du réseau de testde Futures hyperliquidesÉchanger des objets à tester.

Informations sur la variété

javascript
function main() { var markets = exchange.GetMarkets() if (!markets) { throw "get markets error" } var tbl = { type: "table", title: "test markets", cols: [ "key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal", "CtValCcy" ], rows: [] } for (var symbol in markets) { var market = markets[symbol] tbl.rows.push([ symbol, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal, market.CtValCcy ]) } LogStatus("`" + JSON.stringify(tbl) + "`") }

img

Données du carnet de commandes

javascript
function main() { var depth = exchange.GetDepth("ETH_USD.swap") var asks = depth.Asks var bids = depth.Bids Log("买3", bids[2]) Log("买2", bids[1]) Log("买1", bids[0]) Log("卖1", asks[0]) Log("卖2", asks[1]) Log("卖3", asks[2]) }

img

Actifs du compte

javascript
function main() { var account = exchange.GetAccount() return account }

img

Commander et vérifier

javascript
function main() { var symbols = ["ETH_USD.swap", "XRP_USD.swap", "HYPE_USD.swap"] var arrDir = ["market_buy", "sell", "buy"] var markets = exchange.GetMarkets() var ids = [] for (var i in symbols) { var symbol = symbols[i] var side = arrDir[i] var ticker = exchange.GetTicker(symbol) var info = markets[symbol] exchange.SetPrecision(info.PricePrecision, info.AmountPrecision) // USDC var qty = 15 var price = null var amount = null if (side == "market_buy") { price = -1 side = "buy" amount = qty / ticker.Last } else { price = side == "buy" ? ticker.Last * 0.9 : ticker.Last * 1.1 amount = qty / price } var id = exchange.CreateOrder(symbol, side, price, amount) ids.push(id) } var tbl = {type: "table", title: "test", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []} for (var id of ids) { var order = exchange.GetOrder(id) tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType]) Sleep(500) } LogStatus("`" + JSON.stringify(tbl) + "`") }

img

Annuler toutes les commandes

javascript
function main() { var orders = exchange.GetOrders("USD.swap") for (var order of orders) { exchange.CancelOrder(order.Id, order) Sleep(1000) } var tbl = {type: "table", title: "test", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []} for (var order of orders) { tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType]) } LogStatus("`" + JSON.stringify(tbl) + "`") }

img

Changer d'effet de levier, changer de marge croisée/marge isolée

javascript
function main() { // 设置当前为全仓 exchange.IO("cross", true) // 设置杠杆 exchange.SetMarginLevel("ETH_USD.swap", 10) return exchange.GetRawJSON() }

img

exchange.GetRawJSON() renvoie les informations de réponse de la demande de configuration de l'effet de levier :

{"status":"ok","response":{"type":"default"}}

Autres interfaces

Les paramètres de l'interface de l'échange étant complexes, il n'est pas possible d'utiliser la méthode de codage URL pour transmettre les paramètres.exchange.IOLors de l'appel d'une fonction, seules des chaînes JSON peuvent être transmises en tant que paramètres. Voici des exemples d'appel de chaque interface.

Documentation de référence Hyperliquid : https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order

Schedule Cancel (dead man's switch)

javascript
var params = {"type": "scheduleCancel", "time": new Date().getTime()} return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))

{"status":"err","response":"Cannot set scheduled cancel time until enough volume traded. Required: $1000000. Traded: $174.57424."}

Cette fonction a des restrictions : le compte doit atteindre le niveau de trading pour utiliser cette fonction.

twapOrder

Créer une commande TWAP.

javascript
function main() { var params = { "type": "twapOrder", "twap": { "a": 0, "b": true, "s": "1", "r": false, "m": 10, "t": false } } // SOL_USDT.swap , 订单量 : 1 , twapOrder 订单有头寸要求,最少100美元价值 // a : 0 , 即 SOL_USDT.swap 这个品种 return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }

twapCancel

Annuler la commande TWAP.

javascript
function main() { var params = { "type": "twapCancel", "a": 0, "t": 3805 } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }

approveAgent

Testnet, autorisez un nouveau portefeuille proxy.

javascript
function main() { var params = { "type": "approveAgent", "hyperliquidChain": "Testnet", "signatureChainId": "0x66eee", "agentAddress": "0xAAAA", "agentName": "test02", "nonce": new Date().getTime() } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }

L'autorisation renvoie avec succès :

{"status":"ok","response":{"type":"default"}}

  • Créez un portefeuille proxy API. 0xAAAA est l'adresse du portefeuille généré (juste un exemple). Enregistrez la clé privée correspondante lors de sa génération.
  • "test02" est le nom du portefeuille proxy API. La paire de clés générée sera affichée sur la page de l'application hyperliquid.https://app.hyperliquid-testnet.xyz/APImilieu.

vaultTransfer

Retirer des actifs du coffre-fort.

javascript
function main() { var params = { "type": "vaultTransfer", "vaultAddress": "0xAAA", "isDeposit": true, "usd": 5000000 } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }
  • « usd » : 5 000 000 signifie 5 USDC.
  • « 0xAAA » : est l'adresse du coffre-fort.
  • "isDeposit" : true, contrôle le dépôt et le dépôt.

withdraw3

Testnet, retirez les actifs vers le portefeuille.

javascript
function main() { var params = { "type": "withdraw3", "hyperliquidChain": "Testnet", "signatureChainId": "0x66eee", "amount": "5", "time": new Date().getTime(), "destination": "0xAAA" } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }
  • Retirez de l'argent vers votre adresse de portefeuille actuelle : « 0xAAA ».

usdClassTransfer

Transfert d'actifs entre spot/futures (contrats perpétuels).

javascript
function main() { var params = { "type": "usdClassTransfer", "hyperliquidChain": "Testnet", "signatureChainId": "0x66eee", "amount": "5", "toPerp": false, "nonce": new Date().getTime() } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }
  • Le paramètre « toPerp » est défini surfalseIndique le sens de rotation : futures -> spot.
  • Le paramètre « toPerp » est défini surtrueIndique le sens du transfert : spot -> futures.

Utilisation de l'interface Websocket

Adresse de l'interface WS du réseau principal :

Mainnet: wss://api.hyperliquid.xyz/ws

Étant donné que l'interface API du protocole REST ne dispose pas d'interface permettant d'obtenir des données de transaction récentes, l'interface Websocket dispose de ce canal auquel il est possible de s'abonner.

Structure du message d'abonnement

{ "method": "subscribe", "subscription": { "type": "trades", "coin": "SOL" } }

Exemple de test exécuté dans le débogueur :

javascript
function main() { var loopCount = 20 var subMsg = { "method": "subscribe", "subscription": { "type": "trades", "coin": "SOL" } } var conn = Dial("wss://api.hyperliquid.xyz/ws") conn.write(JSON.stringify(subMsg)) if (conn) { for (var i = 0; i < loopCount; i++) { var msg = conn.read(1000) if (msg) { Log(msg) } } } conn.close() Log("测试结束") }

img

END

Les tests ci-dessus sont basés sur le dernier dépositaire. Vous devez télécharger le dernier dépositaire pour prendre en charge l'échange Hyperliquid DEX.

Merci pour votre soutien et merci de votre lecture.

Comment
All comments (2)

    服务器租个地区的

    8 months ago

    日本、新加坡、香港,都可以,具体看使用需求。

    8 months ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)