En la carga de los recursos... Cargando...

Práctica cuantitativa de los intercambios DEX (2) -- Guía de usuario de hiperlíquidos

El autor:FMZ~Lydia, Creado: 2025-01-16 10:57:22, Actualizado: 2025-01-16 10:59:23

Prefacio

Recientemente, la plataforma FMZ ha añadido soporte para Hyperliquid DEX, un intercambio descentralizado de alto rendimiento, proporcionando a los usuarios más opciones para participar en operaciones descentralizadas.

Visión general de la plataforma hiperlíquida

Hyperliquid es una cadena de bloques L1 de alto rendimiento optimizada desde cero, con la visión de construir un sistema financiero abierto completamente en cadena.

El rendimiento de Hyperliquid L1 es suficiente para soportar un ecosistema de aplicaciones financieras sin permiso. Todas las órdenes, retiros, transacciones y liquidaciones se completan en la cadena de una manera completamente transparente, con una latencia de bloque de menos de 1 segundo.

Hyperliquid L1 utiliza un algoritmo de consenso personalizado llamado HyperBFT, que está inspirado en Hotstuff y sus algoritmos posteriores.

A través de esta guía, esperamos ayudarlo a comenzar con el comercio programático y cuantitativo rápidamente en Hyperliquid DEX en la plataforma FMZ y descubrir más oportunidades comerciales.

Contenido de las prácticas

Protocolo REST

  • Práctica de la interfaz de mercado.
  • Práctica de las interfaces de negociación (posición de órdenes, retirada de órdenes).
  • Práctica de consulta relacionada con las transacciones (posiciones, órdenes).
  • Otras funciones (transferencia al contado, transferencia contractual, retiro de la bóveda, transferencia de activos a la billetera, etc.).

Protocolo de soporte web

  • Práctica de suscripción de información de intercambio (no hay interfaz de operaciones en la interfaz REST, que se complementa con la interfaz Websocket)

Exceso de líquido

  • Variedades de comercio Hyperliquid se divide en contratos al contado y perpetuos basados en las variedades de negociación. Basado en la arquitectura de la plataforma FMZ, también se divide en objetos de intercambio al contado Hyperliquid y objetos de intercambio de futuros Hyperliquid en la plataforma FMZ, que corresponden a diferentes variedades en Hyperliquid DEX respectivamente.

En la página Agregar plataforma de la plataforma FMZ, puede configurar los objetos de intercambio de spot y futuros de Hyperliquid:

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

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

  • División de Medio Ambiente Al igual que la mayoría de los intercambios, Hyperliquid también tiene un entorno de prueba.

Dirección de la APP de la red principal:

https://app.hyperliquid.xyz

En el uso real, la red principal es relativamente estable y tiene una buena velocidad. La dirección del nodo de la interfaz API del protocolo REST correspondiente es:https://api.hyperliquid.xyz- ¿ Por qué? La información relacionada con la firma del mensaje también es diferente:source == "a",chainId = 42161.

Dirección del APP de la red de ensayo:

https://app.hyperliquid-testnet.xyz

La red de prueba a menudo se bloquea, pero solo se utiliza como interfaz de prueba y para familiarizarse con las funciones de negociación en DEX. La dirección del nodo de la interfaz API del protocolo REST correspondiente es:https://api.hyperliquid-testnet.xyz- ¿ Por qué? La información relacionada con la firma del mensaje también es diferente:source == "b",chainId = 421614.

Información de conexión, inicio de sesión y configuración de la billetera

Al igual que el método de conexión de la cartera de la mayoría de los intercambios DEX, puede usar la APP de la cartera para escanear el código QR para conectarse a Hyperliquid (cambia la cartera a Arbitrum y escanea el código para iniciar sesión, la red de prueba y la red principal son las mismas).

  • Cartera conectada a Hyperliquid

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

  • Las entidades deberán tener en cuenta los siguientes elementos: Si desea familiarizarse con la red de pruebas primero, puede encontrar el tablero de clasificación directamente en la página de Hyperliquid después de conectar su billetera a Hyperliquid.

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

Después de recibir el USDC para la prueba, haga clic en el botón Deposito para depositarlo en Hyperliquid (es mejor tener algo de ETH para la red de prueba de Arbitrum).

  • Depósito de activos USDC en la red principal

Haga clic en el botón Deposito para depositar, lo que requiere la verificación de la billetera y consumirá un poco de ETH en Arbitrum.

  • Crear una configuración de cartera proxy

Cuando se realizan transacciones manuales en la página de Hyperliquid APP, la página generará automáticamente una dirección de billetera proxy y una clave privada, que se registran en el navegador y se utilizan para operaciones como la colocación de pedidos en la página del navegador.

Puede crear la dirección de cartera proxy requerida y la clave privada correspondiente en la página de la API de Hyperliquid:

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

  1. Da un nombre a la cartera proxy que se va a crear.
  2. Generar dirección y clave privada.
  3. Autorizar la cartera proxy usando la cartera conectada a Hyperliquid.
  • Configure la dirección de la billetera proxy y la clave privada en FMZ

Luego puede configurar esta información en la plataforma FMZ (la interfaz de configuración se menciona anteriormente).

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

Dirección de la billetera: la dirección de la billetera conectada a Hyperliquid (nota, no la dirección de la billetera proxy). Wallet PrivateKey: La clave privada de la billetera conectada a Hyperliquid (opcional, solo se requiere cuando se llaman API como transferencias, se puede dejar en blanco). Clave secreta: Clave privada de la billetera proxy (generada en el paso anterior, la clave privada que se muestra después de la autorización).


Práctica de hiperlíquido en FMZ

Información requerida para configurar el objeto de intercambio:

  • La dirección de la billetera se utiliza para consultar la información de transacción del usuario
  • La billetera PrivateKey se utiliza para transferencias y otras operaciones
  • La clave secreta se utiliza para operaciones relacionadas con transacciones

Una vez que la configuración está completa, podemos probarla en la plataforma FMZ. Usamos directamente la herramienta de depuración de la plataforma FMZ para la práctica de pruebas.

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

Si está utilizando un objeto de intercambio Hyperliquid configurado con información de testnet, deberá realizar algunas operaciones de conmutación al usarlo, por ejemplo:

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

La configuración de la red principal no requiere la operación de conmutación anterior. Las interfaces API relacionadas con productos al contado y futuros en el intercambio Hyperliquid DEX son casi las mismas, con solo ligeras diferencias en los detalles.Futuros de activos hiperlíquidosObjetos de intercambioInformación de configuración de red principaly elInformación sobre la configuración de la red de pruebaspara pruebas.

Información sobre las variedades

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

Datos del libro de pedidos

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

Activos de las cuentas

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

Resultados de las funciones:

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

Orden y control

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

Cancelar todos los pedidos

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

Se aplicarán las siguientes medidas:

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

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

    return exchange.GetRawJSON()
}

Resultados de las funciones:

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

exchange.GetRawJSON() devuelve la información de respuesta de la solicitud de configuración de apalancamiento:

¿Qué es lo que está pasando?

Otras interfaces

Dado que los parámetros de interfaz del intercambio son relativamente complejos y no pueden ser pasados utilizando el método de codificación de URL, cuando se utilizaexchange.IOfunctionLas siguientes son ejemplos de varias llamadas de interfaz.

Documentación de referencia sobre el hiperlíquido:https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order

Cancelar el horario.

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

{status:err,respuesta:No se puede establecer el tiempo de cancelación programado hasta que se negocie suficiente volumen.¿Qué es lo que está pasando?174.57424.”}

Esta función tiene restricciones: la cuenta debe alcanzar el nivel de negociación para utilizar esta función.

En el orden.

Crear una orden TWAP.

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

twapCancelar

Cancela la orden del TWAP.

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

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

Aprobar Agente

Testnet, autoriza una nueva cartera 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))
}

Autorización exitosa, devuelve:

¿Qué es lo que está pasando?

  • Crear una cartera proxy API. 0xAAAA es la dirección de la cartera generada (sólo un ejemplo). Guarde la clave privada correspondiente al generarla.
  • test02 es el nombre de la billetera proxy API. El par de claves generado se mostrará en la página de APP hiperlíquidohttps://app.hyperliquid-testnet.xyz/API.

- ¿ Qué pasa?

Retira los activos de la bóveda.

function main() {
    var params = {
        "type": "vaultTransfer",
        "vaultAddress": "0xAAA",
        "isDeposit": true,
        "usd": 5000000
    }
    
    return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
  • usd: 5000000 significa 5 USDC.
  • 0xAAA: es la dirección de la bóveda.
  • isDeposit: verdadero, controla el depósito y el depósito.

Retirarse

Testnet, retira los activos a la cartera.

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))
}
  • Retire dinero a su dirección de billetera actual: 0xAAA.

UsdClassTransfer (Transferencia de clase estadounidense)

Transferencia de activos entre contratos al contado y futuros (contratos perpetuos).

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))
}
  • El parámetro toPerp está establecido enfalse, que indica la dirección de rotación: futuros -> spot.
  • El parámetro toPerp está establecido entrue, que indica la dirección de rotación: spot -> futuros.

Uso de la interfaz del Websocket

Dirección de la interfaz WS de la red principal:

En la red principal: wss://api.hyperliquid.xyz/ws

Dado que la interfaz API del protocolo REST no tiene una interfaz para obtener datos de transacciones recientes, la interfaz Websocket tiene este canal que se puede suscribir.

Estructura del mensaje de suscripción

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

Ejemplo de prueba ejecutada en herramientas de depuración:

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

Enlace a la sección

Las pruebas anteriores se basan en el último docker. Necesita descargar el último docker para admitir el intercambio de Hyperliquid DEX.

Gracias por su apoyo y gracias por leer.


Más.