avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

Erstellt in: 2025-01-15 13:43:15, aktualisiert am: 2025-01-16 09:52:43
comments   2
hits   3114

[TOC]

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

Vorwort

Vor Kurzem hat die FMZ-Plattform Unterstützung für Hyperliquid DEX hinzugefügt, eine dezentrale Hochleistungsbörse, die den Benutzern mehr Möglichkeiten zur Teilnahme an dezentralen Transaktionen bietet. Derzeit wurde die Depotbankfunktion der FMZ-Plattform vollständig aktualisiert, um die Spot- und Perpetual-Contract-Transaktionen von Hyperliquid zu unterstützen und alle API-Funktionen des DEX abzudecken.

Übersicht zur Hyperliquid-Plattform

Hyperliquid ist eine von Grund auf optimierte, leistungsstarke L1-Blockchain mit der Vision, ein vollständig offenes On-Chain-Finanzsystem aufzubauen. Benutzer können durch die Interaktion mit effizienten nativen Komponenten eigenständig Anwendungen erstellen und gleichzeitig ein reibungsloses Endbenutzererlebnis gewährleisten.

Die Leistung von Hyperliquid L1 reicht aus, um ein genehmigungsfreies Ökosystem von Finanz-Anwendungen zu unterstützen. Alle Aufträge, Auftragsrücknahmen, Transaktionen und Liquidationen werden in der Blockchain völlig transparent und mit Blockverzögerungen von weniger als 1 Sekunde ausgeführt. Derzeit unterstützt die Kette eine Verarbeitungskapazität von bis zu 100.000 Bestellungen pro Sekunde.

Hyperliquid L1 verwendet einen benutzerdefinierten Konsensalgorithmus namens HyperBFT, der von Hotstuff und seinen Nachfolgern inspiriert ist. Sowohl der Konsensmechanismus als auch die Netzwerkarchitektur sind von Grund auf optimiert, um die Anforderungen einer Hochleistungs-Blockchain zu erfüllen.

Mit diesem Leitfaden möchten wir Ihnen den schnellen Einstieg in den programmatischen und quantitativen Handel von Hyperliquid DEX auf der FMZ-Plattform erleichtern und Ihnen helfen, weitere Handelsmöglichkeiten zu entdecken.

Übungsinhalte

REST-Protokoll

  • Praxis der Marktschnittstellen.
  • Praxis der Handelsschnittstelle (Auftragserteilung, Auftragsstornierung).
  • Transaktionsbezogene Abfragepraktiken (Konten, Bestellungen).
  • Andere Funktionen (Spot, Vertragsübertragung, Tresorabhebung, Übertragung von Vermögenswerten auf die Wallet usw.).

Websocket-Protokoll

  • Praxis des Informationsabonnements zum Austausch (es gibt keine Trades-Schnittstelle in der REST-Schnittstelle, die durch die Websocket-Schnittstelle ergänzt wird)

Hyperliquid

  • Handelsarten Hyperliquid ist je nach Handelsvariante in Spot- und unbefristete Kontrakte unterteilt. Basierend auf der Architektur der FMZ-Plattform ist es auf der FMZ-Plattform auch in Hyperliquid-Spot-Börsenobjekte und Hyperliquid-Futures-Börsenobjekte unterteilt. Sie entsprechen jeweils verschiedenen Varianten in Hyperliquid DEX.

Auf der Seite „Börse hinzufügen“ der FMZ-Plattform können Sie Hyperliquid-Spot- und Futures-Börsenobjekte konfigurieren:

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

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

  • Abteilung Umwelt Wie die meisten Börsen verfügt Hyperliquid über eine Testumgebung.

    • Mainnet-APP-Adresse:

    https://app.hyperliquid.xyz

    Aus der tatsächlichen Nutzungserfahrung ist das Hauptnetzwerk relativ stabil und die Geschwindigkeit ist auch gut. Die entsprechende Knotenadresse der REST-Protokoll-API-Schnittstelle:https://api.hyperliquid.xyz。 Auch die Informationen zur Nachrichtensignierung sind unterschiedlich:source == "a"chainId = 42161

    • Testnetzwerk-APP-Adresse:

    https://app.hyperliquid-testnet.xyz

    Das Testnetzwerk stürzt häufig ab, dient aber nur als Testoberfläche und zum Kennenlernen der Handelsfunktionen auf DEX. Die entsprechende Knotenadresse der REST-Protokoll-API-Schnittstelle:https://api.hyperliquid-testnet.xyz。 Auch die Informationen zur Nachrichtensignierung sind unterschiedlich:source == "b"chainId = 421614

Wallet-Verbindung, Login und Konfigurationsinformationen

Genau wie bei der Wallet-Verbindungsmethode der meisten DEX-Börsen können Sie die Wallet-App verwenden, um den QR-Code zu scannen und eine Verbindung zu Hyperliquid herzustellen (schalten Sie die Wallet auf Arbitrum um und scannen Sie den Code, um sich anzumelden, das Testnetzwerk und das Hauptnetzwerk sind identisch). .

  • Wallet-Anbindung an Hyperliquid

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

  • Testnet Faucet (Einzahlungstest für USDC-Vermögenswerte)

Wenn Sie sich zunächst mit dem Testnet vertraut machen möchten, finden Sie den Faucet direkt auf der Hyperliquid-Seite, nachdem Sie Ihr Wallet mit Hyperliquid verbunden haben.

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

Sie können Testvermögenswerte beanspruchen. Nachdem Sie die USDC zum Testen erhalten haben, klicken Sie auf die Schaltfläche „Einzahlen“, um sie bei Hyperliquid einzuzahlen (am besten haben Sie einige ETH für das Arbitrum-Testnetzwerk).

  • Hinterlegen Sie USDC-Vermögenswerte im Mainnet

Klicken Sie zum Einzahlen auf die Schaltfläche „Einzahlen“. Dies erfordert eine Wallet-Verifizierung und verbraucht ein wenig ETH auf Arbitrum.

  • Erstellen einer Proxy-Wallet-Konfiguration

Bei der Durchführung manueller Transaktionen auf der Hyperliquid APP-Seite generiert die Seite automatisch eine Proxy-Wallet-Adresse und einen privaten Schlüssel, die im Browser aufgezeichnet und für Vorgänge wie das Aufgeben von Bestellungen auf der Browserseite verwendet werden. Wenn wir programmatische und quantitative Wie muss die Transaktion diese Konfigurationsinformationen erhalten?

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

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

  • 1. Geben Sie der zu erstellenden Proxy-Wallet einen Namen.

  • 2. Adresse und privaten Schlüssel generieren.

    1. Autorisieren Sie das Proxy-Wallet mit dem mit Hyperliquid verbundenen Wallet.
  • Konfigurieren Sie die Proxy-Wallet-Adresse und den privaten Schlüssel auf FMZ

Anschließend können Sie diese Angaben 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 (beachten Sie, nicht die Proxy-Wallet-Adresse).
  • Wallet PrivateKey: Der mit Hyperliquid verbundene private Wallet-Schlüssel (optional, nur beim Aufrufen von APIs wie z. B. Überweisungen erforderlich, kann leer gelassen werden).
  • Geheimer Schlüssel: Privater Schlüssel des Proxy-Wallets (im vorherigen Schritt generiert, der private Schlüssel wird nach der Autorisierung angezeigt).

Hyperliquid Practice auf FMZ

Erforderliche Informationen zur Konfiguration des Austauschobjekts:

  • Die Wallet-Adresse wird zum Abfragen von Benutzertransaktionsinformationen verwendet
  • Wallet PrivateKey wird für Überweisungen, Transfers und andere Vorgänge verwendet
  • Der geheime Schlüssel wird für transaktionsbezogene Vorgänge verwendet

Sobald die Konfiguration abgeschlossen ist, können wir sie auf der FMZ-Plattform testen. Für die Testpraxis verwenden wir direkt das „Debugging-Tool“ der FMZ-Plattform.

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

Wenn Sie ein mit Testnet-Informationen konfiguriertes Hyperliquid-Austauschobjekt verwenden, müssen Sie bei der Verwendung einige Umschaltvorgänge durchführen, zum Beispiel:

function main() {
    // REST协议API地址切换到测试网
    exchange.SetBase("https://api.hyperliquid-testnet.xyz")

    // source : a 主网 , b 测试网
    exchange.IO("source", "b")

    return exchange.GetAccount()
}

Die Mainnet-Konfiguration erfordert den oben genannten Umschaltvorgang nicht. Die API-Schnittstellen für Spot- und Futures-Produkte an der Hyperliquid DEX-Börse sind nahezu identisch und unterscheiden sich nur geringfügig in den Details. Als nächstes verwenden wirMainnet-KonfigurationsinformationenUndInformationen zur Testnet-Konfigurationvon Hyperliquide FuturesTauschen Sie Objekte zum Testen aus.

Sorteninformationen

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

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

Orderbuchdaten

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

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

Kontovermögen

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

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

Bestellen und prüfen

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

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

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

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

Hebel wechseln, Cross-Margin/Isolierte Margin wechseln

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

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

    return exchange.GetRawJSON()
}

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

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

{“status”:“ok”,“response”:{“type”:“default”}}

Andere Schnittstellen

Da die Schnittstellenparameter der Börse komplex sind, ist es nicht möglich, zur Übergabe der Parameter die URL-Kodierungsmethode zu verwenden.exchange.IOBeim Aufrufen einer Funktion können nur JSON-Zeichenfolgen als Parameter übergeben werden. Im Folgenden finden Sie Beispiele für den Aufruf der einzelnen Schnittstellen.

Hyperliquid-Referenzdokumentation: 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.”}

Diese Funktion unterliegt Einschränkungen: Um diese Funktion nutzen zu können, muss das Konto die Handelsebene erreichen.

twapOrder

Erstellen Sie eine TWAP-Bestellung.

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

TWAP-Bestellung stornieren.

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

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

approveAgent

Testnetz, autorisieren Sie ein neues 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))
}

Die Autorisierung gibt erfolgreich Folgendes zurück:

{“status”:“ok”,“response”:{“type”:“default”}}

  • Erstellen Sie ein API-Proxy-Wallet. 0xAAAA ist die generierte Wallet-Adresse (nur ein Beispiel). Speichern Sie den entsprechenden privaten Schlüssel beim Generieren.
  • „test02“ ist der Name des API-Proxy-Wallets. Das generierte Schlüsselpaar wird auf der Hyperliquid-App-Seite angezeigt.https://app.hyperliquid-testnet.xyz/APIMitte.

vaultTransfer

Vermögenswerte aus dem Tresor abheben.

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”: true, kontrolliert Einzahlung und Depot.

withdraw3

Testnetz, Vermögenswerte ins Wallet abheben.

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))
}
  • Heben Sie Geld auf Ihre aktuelle Wallet-Adresse ab: „0xAAA“.

usdClassTransfer

Übertragung von Vermögenswerten zwischen Spot/Futures (unbefristete Verträge).

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” wird gesetzt auffalseGibt die Rotationsrichtung an: Futures -> Spot.
  • Der Parameter “toPerp” wird gesetzt auftrueGibt die Übertragungsrichtung an: Spot -> Futures.

Verwendung der WebSocket-Schnittstelle

Hauptnetzwerk-WS-Schnittstellenadresse:

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

Da die API-Schnittstelle des REST-Protokolls über keine Schnittstelle zum Abrufen aktueller Transaktionsdaten verfügt, verfügt die Websocket-Schnittstelle über diesen Kanal, der abonniert werden kann.

Struktur der Abonnementnachricht

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

Beispiel für einen im Debugger ausgeführten Test:

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

DEX Exchange Quantitative Praxis (2) - Hyperliquid Benutzerhandbuch

END

Die obigen Tests basieren auf dem neuesten Custodian. Sie müssen den neuesten Custodian herunterladen, um die Hyperliquid DEX-Börse zu unterstützen.

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