avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Pratique quantitative de l'échange DEX (2) - Guide de l'utilisateur Hyperliquid

Créé le: 2025-01-15 13:43:15, Mis à jour le: 2025-01-16 09:52:43
comments   2
hits   3114

[TOC]

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

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

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

  • 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

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

  • 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.

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

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 :

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

  • 1. Donnez un nom au portefeuille proxy à créer.

  • 2. 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 :

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é

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) +  "`")
}

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

Données du carnet de commandes

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])
}

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

Actifs du compte

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

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

Commander et vérifier

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) +  "`")
}

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

Annuler toutes les commandes

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) +  "`")
}

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

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

function main() {
    // 设置当前为全仓
    exchange.IO("cross", true)

    // 设置杠杆
    exchange.SetMarginLevel("ETH_USD.swap", 10)

    return exchange.GetRawJSON()
}

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

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)

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.

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.

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.

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.

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.

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).

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 :

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("测试结束")
}

Pratique quantitative de l’échange DEX (2) - Guide de l’utilisateur Hyperliquid

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.