Die Ressourcen sind geladen. Beförderung...

Quantitative Praxis der DEX-Börsen (2) -- Benutzerhandbuch für Hyperflüssigkeiten

Schriftsteller:FMZ~Lydia, Erstellt: 2025-01-16 10:57:22, Aktualisiert: 2025-01-16 10:59:23

Vorwort

Vor kurzem hat die FMZ-Plattform die Unterstützung für Hyperliquid DEX, eine leistungsstarke dezentrale Börse, hinzugefügt, die den Benutzern mehr Optionen für die Teilnahme an dezentralen Handelsgeschäften bietet.

Übersicht über die Hyperflüssigkeitsplattform

Hyperliquid ist eine leistungsstarke L1-Blockchain, die von Grund auf optimiert wurde, mit der Vision, ein vollständig auf der Kette befindliches offenes Finanzsystem aufzubauen. Benutzer können Anwendungen unabhängig erstellen, indem sie mit effizienten native Komponenten interagieren und gleichzeitig eine reibungslose Endbenutzererfahrung gewährleisten.

Die Leistung von Hyperliquid L1 ist ausreichend, um ein erlaubnisloses Finanz-Anwendungs-Ökosystem zu unterstützen. Alle Aufträge, Auszahlungen, Transaktionen und Liquidationen werden in der Kette vollständig transparent abgeschlossen, mit einer Block-Latenz von weniger als 1 Sekunde. Derzeit unterstützt die Kette eine Verarbeitungskapazität von bis zu 100.000 Aufträgen pro Sekunde.

Hyperliquid L1 verwendet einen benutzerdefinierten Konsensalgorithmus namens HyperBFT, der von Hotstuff und seinen nachfolgenden Algorithmen inspiriert ist.

Durch diesen Leitfaden hoffen wir, Ihnen zu helfen, schnell mit programmatischem und quantitativen Handel auf Hyperliquid DEX auf der FMZ-Plattform zu beginnen und weitere Handelsmöglichkeiten zu entdecken.

Inhalte der Übung

REST-Protokoll

  • Marktinterface-Praxis.
  • Handelsinterface-Praxis (Auftragsvergabe, Auftragsausschluss).
  • Transaktionsbezogene Abfragepraktiken (Positionen, Aufträge).
  • Sonstige Funktionen (Spot-, Vertragstransfer, Tresorauszahlung, Übertragung von Vermögenswerten auf eine Brieftasche usw.).

Websocket-Protokoll

  • Abonnementpraxis für den Austausch von Informationen (es gibt keine Trades-Schnittstelle in der REST-Schnittstelle, die durch die Websocket-Schnittstelle ergänzt wird)

Hyperflüssig

  • Handelssorten Hyperliquid ist in Spot- und Perpetual-Kontrakte aufgeteilt, basierend auf den Handelsvarianten. Basierend auf der Architektur der FMZ-Plattform ist es auch in Hyperliquid-Spot-Börseobjekte und Hyperliquid-Futures-Börseobjekte auf der FMZ-Plattform unterteilt, die verschiedenen Varianten in Hyperliquid DEX entsprechen.

Auf der Seite Plattform hinzufügen der FMZ-Plattform können Sie Hyperliquid Spot- und Futures-Austauschobjekte konfigurieren:

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

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

  • Abteilung Umwelt Wie die meisten Börsen hat Hyperliquid auch eine Testumgebung.

Hauptnetz-APP-Adresse:

https://app.hyperliquid.xyz

Im tatsächlichen Einsatz ist das Hauptnetz relativ stabil und hat eine gute Geschwindigkeit. Die entsprechende REST-Protokoll-API-Schnittstellenknotenadresse lautet:https://api.hyperliquid.xyz- Ich weiß. Die Informationen zur Nachrichtensignatur unterscheiden sich ebenfalls:source == "a",chainId = 42161.

Testnetzwerk-APP-Adresse:

https://app.hyperliquid-testnet.xyz

Das Testnetzwerk stürzt häufig ab, wird aber nur als Testschnittstelle verwendet und um sich mit den Handelsfunktionen auf DEX vertraut zu machen. Die entsprechende REST-Protokoll-API-Schnittstellenknotenadresse lautet:https://api.hyperliquid-testnet.xyz- Ich weiß. Die Informationen zur Nachrichtensignatur unterscheiden sich ebenfalls:source == "b",chainId = 421614.

Anschluss, Anmelde- und Konfigurationsinformationen zur Brieftasche

Genau wie die Wallet-Verbindungsmethode der meisten DEX-Börsen können Sie die Wallet APP verwenden, um den QR-Code zu scannen, um sich mit Hyperliquid zu verbinden (schalten Sie die Wallet auf Arbitrum um und scannen Sie den Code, um sich anzumelden, das Testnetzwerk und das Hauptnetzwerk sind dasselbe).

  • Wallet mit Hyperliquid verbunden

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

  • Testnet Leaderboard (Einlagen-Test USDC-Vermögenswerte) Wenn Sie sich zuerst mit dem Testnet vertraut machen möchten, können Sie das Leaderboard direkt auf der Hyperliquid-Seite finden, nachdem Sie Ihre Brieftasche mit Hyperliquid verbunden haben.

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

Nach Erhalt des USDC zum Testen klicken Sie auf die Schaltfläche Deposit, um es in Hyperliquid einzuzahlen (es ist am besten, etwas ETH für das Testnetzwerk von Arbitrum zu haben).

  • USDC-Vermögenswerte im Hauptnetz einzahlen

Klicken Sie auf die Schaltfläche Deposit, um eine Einzahlung zu tätigen, die eine Geldbörsenverifizierung erfordert und ein wenig ETH auf Arbitrum verbraucht.

  • Erstellen einer Proxy-Wallet-Konfiguration

Bei manuellen Transaktionen auf der Hyperliquid APP Seite erzeugt die Seite automatisch eine Proxy-Wallet-Adresse und einen privaten Schlüssel, die im Browser aufgezeichnet und für Operationen wie das Platzieren von Bestellungen auf der Browserseite verwendet werden.

Sie können die erforderliche Proxy-Wallet-Adresse und den entsprechenden privaten Schlüssel auf der Hyperliquid API-Seite erstellen:

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

  1. Geben Sie dem zu erstellenden Proxy-Wallet einen Namen an.
  2. Erstellen Sie eine Adresse und einen privaten Schlüssel.
  3. Autorisieren Sie die Proxy-Wallet mit der Wallet, die mit Hyperliquid verbunden ist.
  • Konfiguration der Proxy-Wallet-Adresse und des privaten Schlüssels auf FMZ

Dann können Sie diese Informationen auf der FMZ-Plattform konfigurieren (die Konfigurationsoberfläche ist oben erwähnt).

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

Wallet-Adresse: Die mit Hyperliquid verbundene Wallet-Adresse (Anmerkung, nicht die Proxy-Wallet-Adresse). Wallet PrivateKey: Der mit Hyperliquid verbundene private Schlüssel der Brieftasche (optional, nur erforderlich, wenn APIs wie Überweisungen aufgerufen werden, er kann leer gelassen werden). Geheimer Schlüssel: Proxy-Wallets privater Schlüssel (im vorherigen Schritt generiert, der private Schlüssel nach der Autorisierung angezeigt).


Hyperflüssigkeitsübung auf FMZ

Informationen, die für die Konfiguration des Austauschobjekts erforderlich sind:

  • Wallet-Adresse wird zur Abfrage von Benutzertransaktionsinformationen verwendet
  • Wallet PrivateKey wird für Überweisungen und andere Operationen verwendet
  • Geheimer Schlüssel wird für Transaktionen verwendet

Sobald die Konfiguration abgeschlossen ist, können wir sie auf der FMZ-Plattform testen.

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

Wenn Sie ein Hyperliquid-Austauschobjekt verwenden, das mit Testnet-Informationen konfiguriert ist, müssen Sie einige Schaltvorgänge durchführen, wenn Sie es verwenden, zum Beispiel:

function main() {
    // REST protocol API address switched to testnet
    exchange.SetBase("https://api.hyperliquid-testnet.xyz")

    // source : a Mainnet, b Testnet
    exchange.IO("source", "b")

    return exchange.GetAccount()
}

Die Mainnet-Konfiguration erfordert nicht den oben genannten Schaltvorgang. Die API-Schnittstellen für Spot- und Futures-Produkte in der Hyperliquid DEX-Börse sind nahezu identisch, mit nur geringen Unterschieden in den Details. Als nächstes verwenden wir dieFutures mit hoher LiquiditätAustausch vonInformationen zur Mainnet-Konfigurationund derInformationen zur Testnetzkonfigurationzur Prüfung.

Informationen zur Sorte

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

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

Daten des Auftragsbuchs

function main() {
    var depth = exchange.GetDepth("ETH_USD.swap")
    var asks = depth.Asks
    var bids = depth.Bids

    Log("asks 3", bids[2])
    Log("asks 2", bids[1])
    Log("asks 1", bids[0])

    Log("bids 1", asks[0])
    Log("bids 2", asks[1])
    Log("bids 3", asks[2])
}

Vermögenswerte des Kontos

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

Funktionsergebnisse:

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

Ordnung und Kontrolle

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

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

Alle Bestellungen stornieren

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

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

Schalthebel, Schaltkreuz-/Ausschaltposition

function main() {
    // Set the current position to cross position
    exchange.IO("cross", true)

    // Set leverage
    exchange.SetMarginLevel("ETH_USD.swap", 10)

    return exchange.GetRawJSON()
}

Funktionsergebnisse:

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

exchange.GetRawJSON() gibt die Antwortinformationen der Leverage-Einstellungsanfrage zurück:

Ich bin nicht derjenige, der das Problem hat.

Andere Schnittstellen

Da die Schnittstellenparameter des Austauschs relativ komplex sind und nicht mit der URL-Codierungsmethode übermittelt werden können, werdenexchange.IOfunctionBei Anrufen können nur JSON-Strings als Parameter eingegeben werden.

Referenzdokumentation für Hyperflüssigkeit:https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order

Zeitplan abbrechen.

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

{status:err,response:Kann die geplante Stornierungszeit nicht festlegen, bis genügend Volumen gehandelt wurde.Ich bin nicht derjenige, der das Problem hat, aber ich bin derjenige, der es hat.174.57424.”}

Diese Funktion hat Einschränkungen: Das Konto muss das Handelsniveau erreichen, um diese Funktion nutzen zu können.

Aufforderung

Erstellen Sie einen TWAP-Befehl.

function main() {
    var params = {
        "type": "twapOrder",
        "twap": {
            "a": 0,
            "b": true,
            "s": "1",
            "r": false,
            "m": 10,
            "t": false
        }
    }

    // SOL_USDT.swap , Order Quantity: 1 , twapOrder order has position requirement, minimum value of 100 USD
    // a: 0, i.e. SOL_USDT.swap
    return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}

twapWiderrufen

Stornieren Sie den TWAP-Befehl.

function main() {
    var params = {
        "type": "twapCancel",
        "a": 0,
        "t": 3805
    }

    return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}

Genehmigen

Testnet, autorisieren Sie eine neue Proxy-Wallet.

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

Autorisierung erfolgreich, ergibt:

Ich bin nicht derjenige, der das Problem hat.

  • Erstellen Sie eine API-Proxy-Wallet. 0xAAAA ist die generierte Wallet-Adresse (nur ein Beispiel). Speichern Sie den entsprechenden privaten Schlüssel bei der Generierung.
  • test02 ist der Name der API-Proxy-Wallet. Das generierte Schlüsselpaar wird auf der Hyperliquid APP-Seite angezeigthttps://app.hyperliquid-testnet.xyz/API.

Geheime Transfer

Nehmen Sie Vermögenswerte aus dem Tresor.

function main() {
    var params = {
        "type": "vaultTransfer",
        "vaultAddress": "0xAAA",
        "isDeposit": true,
        "usd": 5000000
    }
    
    return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
  • usd: 5000000 bedeutet 5 USDC.
  • 0xAAA: ist die Tresoradresse.
  • isDeposit: wahr, kontrolliert Einlagen und Einlagen.

Rücktritt

Testnet, ziehen Sie das Vermögen in die Brieftasche.

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))
}
  • Nehmen Sie Geld auf Ihre aktuelle Geldbörsenadresse ab: 0xAAA.

usdKlasseübertragung

Übertragung von Vermögenswerten zwischen Spot- und Futures-Verträgen (perpetual contracts).

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))
}
  • Der Parameter toPerp ist auffalse, die Rotationsrichtung anzeigt: Futures -> Spot.
  • Der Parameter toPerp ist auftrue, die Rotationsrichtung anzeigt: Spot -> Futures.

Nutzung der Websocket-Schnittstelle

Hauptnetzwerk-WS-Schnittstellenadresse:

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

Da die REST-Protokoll-API-Schnittstelle keine Schnittstelle für die Erfassung aktueller Transaktionsdaten hat, hat die Websocket-Schnittstelle diesen Kanal, der abonniert werden kann.

Abonnementnachrichtenstruktur

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

Beispiel für eine Prüfung in Debuggern:

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("End of test")
}

Quantitative Practice of DEX Exchanges (2) – Hyperliquid User Guide

Ende

Sie müssen den neuesten Docker herunterladen, um den Hyperliquid DEX Exchange zu unterstützen.

Vielen Dank für Ihre Unterstützung und für das Lesen.


Mehr