avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

Creado el: 2025-01-15 13:43:15, Actualizado el: 2025-01-16 09:52:43
comments   2
hits   3114

[TOC]

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

Prefacio

Recientemente, la plataforma FMZ ha agregado soporte para Hyperliquid DEX, un intercambio descentralizado de alto rendimiento, que brinda a los usuarios más opciones para participar en transacciones descentralizadas. Actualmente, la función de custodia de la plataforma FMZ se ha actualizado completamente para admitir las transacciones de contratos al contado y perpetuos de Hyperliquid y cubrir todas las funciones API del DEX.

Descripción general de la plataforma HyperLiquid

Hyperliquid es una cadena de bloques L1 de alto rendimiento optimizada desde cero con la visión de construir un sistema financiero completamente abierto en cadena. Los usuarios pueden crear aplicaciones de forma independiente interactuando con componentes nativos eficientes y garantizando al mismo tiempo una experiencia fluida para el usuario final.

El rendimiento de Hyperliquid L1 es suficiente para soportar un ecosistema de aplicaciones financieras sin permisos. Todos los pedidos, retiros de pedidos, transacciones y liquidaciones se completan en cadena de manera completamente transparente, con retrasos de bloque de menos de 1 segundo. Actualmente, la cadena admite una capacidad de procesamiento de hasta 100.000 pedidos por segundo.

Hyperliquid L1 utiliza un algoritmo de consenso personalizado llamado HyperBFT, que está inspirado en Hotstuff y sus sucesores. Tanto el mecanismo de consenso como la arquitectura de la red están optimizados de abajo hacia arriba para satisfacer las necesidades de la cadena de bloques de alto rendimiento.

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

Contenido de práctica

Protocolo REST

  • Práctica de interfaz de mercado.
  • Práctica de interfaz comercial (colocación de órdenes, cancelación de órdenes).
  • Prácticas de consulta relacionadas con transacciones (cuentas, pedidos).
  • Otras funciones (spot, transferencia de contrato, retiro de bóveda, transferencia de activos a billetera, etc.).

Protocolo WebSocket

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

Hyperliquid

  • Tipos de comercio Hyperliquid se divide en contratos al contado y perpetuos según las variedades de negociación. Según la arquitectura de la plataforma FMZ, también se divide en objetos de intercambio al contado de Hyperliquid y objetos de intercambio de futuros de Hyperliquid en la plataforma FMZ. Corresponden a diferentes variedades en Hyperliquid DEX respectivamente.

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

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

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

  • División ambiental Como la mayoría de los intercambios, Hyperliquid tiene un entorno de prueba.

    • Dirección de la aplicación de red principal:

    https://app.hyperliquid.xyz

    Según la experiencia de uso real, la red principal es relativamente estable y la velocidad también es buena. La dirección del nodo de interfaz API del protocolo REST correspondiente:https://api.hyperliquid.xyz。 La información relacionada con la firma de mensajes también es diferente:source == "a"chainId = 42161

    • Dirección de la aplicación de red de prueba:

    https://app.hyperliquid-testnet.xyz

    La red de prueba a menudo falla, pero solo se utiliza como interfaz de prueba y para familiarizarse con las funciones comerciales en DEX. La dirección del nodo de interfaz API del protocolo REST correspondiente:https://api.hyperliquid-testnet.xyz。 La información relacionada con la firma de mensajes 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 billetera de la mayoría de los intercambios DEX, puede usar la aplicación de billetera para escanear el código QR para conectarse a Hyperliquid (cambie la billetera a Arbitrum y escanee el código para iniciar sesión, la red de prueba y la red principal son las mismas) .

  • Conexión de la billetera a Hyperliquid

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

  • Grifo de red de prueba (depósito de activos de USDC de prueba)

Si primero desea familiarizarse con la red de prueba, puede encontrar la faucet directamente en la página de Hyperliquid después de conectar su billetera a Hyperliquid.

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

Puedes reclamar activos de prueba. Después de recibir los USDC para la prueba, haz clic en el botón “Depositar” para depositarlos en Hyperliquid (es mejor tener algo de ETH para la red de prueba de Arbitrum).

  • Deposite activos de USDC en la red principal

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

  • Crear una configuración de billetera proxy

Al realizar transacciones manuales en la página de la aplicación Hyperliquid, 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 realizar pedidos en la página del navegador. Si queremos realizar transacciones programáticas y cuantitativas ¿Cómo necesita la transacción obtener esta información de configuración?

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

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

  • 1. Dale un nombre a la billetera proxy que se creará.

  • 2. Generar dirección y clave privada.

    1. Autorice la billetera proxy utilizando la billetera conectada a Hyperliquid.
  • Configurar la dirección de la billetera proxy y la clave privada en FMZ

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

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

  • Dirección de billetera: la dirección de billetera conectada a Hyperliquid (nota: no es la dirección de billetera proxy).
  • Clave privada de la billetera: la clave privada de la billetera conectada a Hyperliquid (opcional, solo se requiere cuando se invocan 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íquidos en FMZ

Información necesaria para configurar el objeto de intercambio:

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

Una vez completada la configuración, podemos probarla en la plataforma FMZ. Para la práctica de pruebas, utilizamos directamente la “herramienta de depuración” de la plataforma FMZ.

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

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

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

    // source : a 主网 , b 测试网
    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 los productos spot y futuros en el intercambio Hyperliquid DEX son casi las mismas, con solo ligeras diferencias en los detalles. A continuación, utilizamosInformación de configuración de la red principalyInformación de configuración de la red de pruebade Futuros hiperlíquidosIntercambiar objetos para probar.

Información sobre la variedad

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

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

Datos de la cartera de pedidos

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

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

Activos de la cuenta

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

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

Ordenar y comprobar

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

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

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

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

Cambiar apalancamiento, cambiar margen cruzado/margen aislado

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

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

    return exchange.GetRawJSON()
}

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

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

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

Otras interfaces

Dado que los parámetros de la interfaz del intercambio son complejos, no es posible utilizar el método de codificación de URL para pasar los parámetros.exchange.IOAl llamar a una función, solo se pueden pasar cadenas JSON como parámetros. A continuación, se muestran ejemplos de llamadas a cada interfaz.

Documentación de referencia de 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.”}

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

twapOrder

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 , 订单量 : 1  , twapOrder 订单有头寸要求,最少100美元价值
    // a : 0 , 即 SOL_USDT.swap 这个品种
    return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}

twapCancel

Cancelar pedido TWAP.

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

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

approveAgent

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

La autorización se devuelve correctamente:

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

  • Crea una billetera proxy de API. 0xAAAA es la dirección de la billetera generada (solo un ejemplo). Guarda la clave privada correspondiente al generarla.
  • “test02” es el nombre de la billetera del proxy de API. El par de claves generado se mostrará en la página de la aplicación HyperLiquid.https://app.hyperliquid-testnet.xyz/APImedio.

vaultTransfer

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

withdraw3

Testnet, retira activos a la billetera.

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

usdClassTransfer

Transferencia de activos entre spot/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 enfalseIndica la dirección de rotación: futuros -> spot.
  • El parámetro “toPerp” está establecido entrueIndica la dirección de transferencia: spot -> futuros.

Uso de la interfaz WebSocket

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

Mainnet: 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 al que se puede suscribir.

Estructura del mensaje de suscripción

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

Ejemplo de prueba ejecutada en el depurador:

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

Práctica cuantitativa de DEX Exchange (2) - Guía del usuario de Hyperliquid

END

Las pruebas anteriores se basan en el último custodio. Debe descargar el último custodio para admitir el intercambio DEX Hyperliquid.

Gracias por su apoyo y gracias por leer.