O recurso está a ser carregado... Carregamento...

Prática quantitativa das bolsas DEX (2) -- Guia do utilizador do hiperlíquido

Autora:FMZ~Lydia, Criado: 2025-01-16 10:57:22, Atualizado: 2025-01-16 10:59:23

Prefácio

Recentemente, a plataforma FMZ adicionou suporte para Hyperliquid DEX, uma exchange descentralizada de alto desempenho, fornecendo aos usuários mais opções para participar de negociações descentralizadas.

Visão geral da plataforma hiperlíquida

O Hyperliquid é um blockchain L1 de alto desempenho otimizado a partir do zero, com a visão de construir um sistema financeiro aberto totalmente on-chain.

O desempenho do Hyperliquid L1 é suficiente para suportar um ecossistema de aplicativos financeiros sem permissão. Todas as ordens, retiradas, transações e liquidações são concluídas na cadeia de forma completamente transparente, com uma latência de bloco de menos de 1 segundo.

O Hyperliquid L1 usa um algoritmo de consenso personalizado chamado HyperBFT, que é inspirado no Hotstuff e seus algoritmos subsequentes.

Através deste guia, esperamos ajudá-lo a começar rapidamente com negociação programática e quantitativa no Hyperliquid DEX na plataforma FMZ e descobrir mais oportunidades de negociação.

Conteúdo da prática

Protocolo REST

  • Prática de interface de mercado.
  • Prática de interfaces de negociação (colocação de ordens, retirada de ordens).
  • Prática de consulta relacionada com transacções (posições, ordens).
  • Outras funções (transferência instantânea, transferência contratual, levantamento do cofre, transferência de activos para carteira, etc.).

Protocolo de Websocket

  • Prática de subscrição de informações de intercâmbio (não há interface Trades na interface REST, que é complementada pela interface Websocket)

Hiperlíquido

  • Variedades comercializáveis O Hyperliquid é dividido em contratos spot e perpétuos com base nas variedades de negociação. Com base na arquitetura da plataforma FMZ, ele também é dividido em objetos de troca spot Hyperliquid e objetos de troca de futuros Hyperliquid na plataforma FMZ, correspondendo a diferentes variedades no Hyperliquid DEX, respectivamente.

Na página Adicionar plataforma da plataforma FMZ, você pode configurar os objetos de câmbio spot e futuros Hyperliquid:

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

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

  • Divisão do Ambiente Como a maioria das bolsas, a Hyperliquid também tem um ambiente de teste.

Endereço da APP da rede principal:

https://app.hyperliquid.xyz

Na utilização real, a rede principal é relativamente estável e tem uma boa velocidade. O endereço do nó da interface API do protocolo REST correspondente é:https://api.hyperliquid.xyz- Não. As informações relacionadas com a assinatura da mensagem também são diferentes:source == "a",chainId = 42161.

Endereço APP da rede de ensaio:

https://app.hyperliquid-testnet.xyz

A rede de teste frequentemente falha, mas é usada apenas como uma interface de teste e para familiarizar-se com as funções de negociação no DEX. O endereço do nó da interface API do protocolo REST correspondente é:https://api.hyperliquid-testnet.xyz- Não. As informações relacionadas com a assinatura da mensagem também são diferentes:source == "b",chainId = 421614.

Informações de ligação, login e configuração da carteira

Assim como o método de conexão da carteira da maioria das exchanges DEX, você pode usar o APP da carteira para digitalizar o código QR para se conectar ao Hyperliquid (mute a carteira para o Arbitrum e digitalize o código para entrar, a rede de teste e a rede principal são as mesmas).

  • Carteira ligada ao Hyperliquid

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

  • Tabela de classificação da rede de testes (ativos USDC de teste de depósito) Se você quiser se familiarizar com a testnet primeiro, você pode encontrar o Leaderboard diretamente na página Hyperliquid depois de conectar sua carteira ao Hyperliquid.

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

Depois de receber o USDC para teste, clique no botão Deposit para depositá-lo no Hyperliquid (é melhor ter algum ETH para a rede de teste do Arbitrum).

  • Depósito de activos em USDC na rede principal

Clique no botão Deposit para depositar, o que requer verificação da carteira e consumirá um pouco de ETH no Arbitrum.

  • Crie uma configuração de carteira proxy

Ao realizar transações manuais na página do Hyperliquid APP, a página gerará automaticamente um endereço de carteira proxy e uma chave privada, que são gravados no navegador e usados para operações como a colocação de pedidos na página do navegador.

Você pode criar o endereço de carteira proxy necessário e a chave privada correspondente na página da API Hyperliquid:

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

  1. Dê um nome à carteira proxy a ser criada.
  2. Gerar endereço e chave privada.
  3. Autorize a carteira proxy usando a carteira conectada ao Hyperliquid.
  • Configure o endereço da carteira proxy e chave privada no FMZ

Em seguida, pode configurar esta informação na plataforma FMZ (a interface de configuração é mencionada acima).

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

Endereço da carteira: o endereço da carteira conectado ao Hyperliquid (nota, não o endereço da carteira proxy). Wallet PrivateKey: A chave privada da carteira conectada ao Hyperliquid (opcional, só é necessária ao chamar APIs como transferências, pode ser deixada em branco). Chave secreta: chave privada da carteira proxy (gerada na etapa anterior, a chave privada exibida após a autorização).


Prática de hiperlíquido na FMZ

Informações necessárias para configurar o objeto de troca:

  • Endereço de carteira é usado para consultar informações de transação do usuário
  • A carteira PrivateKey é usada para transferências e outras operações
  • A chave secreta é usada para operações relacionadas com transacções

Uma vez que a configuração estiver completa, podemos testá-la na plataforma FMZ. Usamos diretamente a ferramenta de depuração da plataforma FMZ para a prática de testes.

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

Se você estiver usando um objeto de troca Hyperliquid configurado com informações de testnet, você precisará fazer algumas operações de comutação ao usá-lo, por exemplo:

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

A configuração da rede principal não requer a operação de comutação acima. As interfaces API relacionadas a produtos spot e futuros na troca Hyperliquid DEX são quase as mesmas, com apenas pequenas diferenças em detalhes.Futuros hiperlíquidosObjetos de intercâmbioInformações de configuração da rede principale oInformações de configuração da testnetpara testes.

Informações sobre a variedade

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

Dados do livro 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])
}

Ativos da conta

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

Resultados da função:

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

Ordem e verificação

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 todas as encomendas

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

Atividade de alavancagem do interruptor, posição cruzada/isolada do interruptor

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 da função:

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

exchange.GetRawJSON() retorna as informações de resposta da solicitação de configuração de alavancagem:

O que é que se passa?

Outras interfaces

Uma vez que os parâmetros de interface da troca são relativamente complexos e não podem ser passados usando o método de codificação de URL, quando se usaexchange.IOfunctionOs seguintes são exemplos de várias chamadas de interface.

Documentação de referência sobre hiperlíquidos:https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order

Cancelar programação.

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

{status:err,resposta:Não é possível definir o tempo de cancelamento programado até que o volume suficiente seja negociado.Comércio:174.57424.”}

Esta função tem restrições: a conta deve atingir o nível de negociação para utilizar esta função.

2a Ordem

Crie uma ordem 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

Cancele a ordem do TWAP.

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

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

Aprovar Agente

Testnet, autorize uma nova carteira 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))
}

Autorização com êxito, retorna:

O que é que se passa?

  • Crie uma carteira de proxy API. 0xAAAA é o endereço de carteira gerado (apenas um exemplo). Guarde a chave privada correspondente ao gerá-la.
  • test02 é o nome da carteira de proxy API. O par de chaves gerado será exibido na página do APP hiperlíquidohttps://app.hyperliquid-testnet.xyz/API.

vaultTransferência

Retirem bens do cofre.

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: é o endereço do cofre.
  • isDeposit: verdadeiro, controla o depósito e o depósito.

Retirar

Testnet, retire os bens para a carteira.

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 dinheiro para o seu endereço de carteira atual: 0xAAA.

usdClassTransfer

Transferência de activos entre contratos a vista/futures (contratos perpétuos).

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))
}
  • O parâmetro toPerp é definido comofalse, indicando a direcção da rotação: futuros -> spot.
  • O parâmetro toPerp é definido comotrue, indicando a direcção de rotação: spot -> futuros.

Utilização da interface do Websocket

Endereço da interface WS da rede principal:

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

Uma vez que a interface API do protocolo REST não tem uma interface para obter dados de transações recentes, a interface Websocket tem este canal que pode ser assinado.

Estrutura da mensagem de assinatura

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

Exemplo de teste executado em ferramentas de depuração:

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

Fim de ano

Os testes acima são baseados no mais recente docker. Você precisa baixar o mais recente docker para suportar o intercâmbio Hyperliquid DEX.

Obrigado pelo apoio e por ler.


Mais.