avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

Criado em: 2025-01-15 13:43:15, atualizado em: 2025-01-16 09:52:43
comments   2
hits   3114

[TOC]

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

Prefácio

Recentemente, a plataforma FMZ adicionou suporte para Hyperliquid DEX, uma exchange descentralizada de alto desempenho, oferecendo aos usuários mais opções para participar de transações descentralizadas. Atualmente, a função de custódia da plataforma FMZ foi totalmente atualizada para oferecer suporte às transações de contratos spot e perpétuos da Hyperliquid e cobrir todas as funções de API da DEX.

Visão geral da plataforma Hyperliquid

Hyperliquid é uma blockchain L1 de alto desempenho otimizada do zero com a visão de construir um sistema financeiro aberto totalmente on-chain. Os usuários podem criar aplicativos de forma independente, interagindo com componentes nativos eficientes, garantindo ao mesmo tempo uma experiência tranquila para o usuário final.

O desempenho do Hyperliquid L1 é suficiente para suportar um ecossistema sem permissão de aplicativos financeiros. Todos os pedidos, retiradas de pedidos, transações e liquidações são concluídos na cadeia de forma completamente transparente, com atrasos de bloco de menos de 1 segundo. Atualmente, a rede suporta uma capacidade de processamento de até 100.000 pedidos por segundo.

O Hyperliquid L1 usa um algoritmo de consenso personalizado chamado HyperBFT, inspirado no Hotstuff e seus sucessores. Tanto o mecanismo de consenso quanto a arquitetura de rede são otimizados de baixo para cima para atender às necessidades de blockchain de alto desempenho.

Por meio deste guia, esperamos ajudar você a começar rapidamente com a negociação programática e quantitativa da Hyperliquid DEX na plataforma FMZ e descobrir mais oportunidades de negociação.

Conteúdo prático

Protocolo REST

  • Prática de interface de mercado.
  • Prática de interface de negociação (colocação de ordens, cancelamento de ordens).
  • Práticas de consulta relacionadas a transações (contas, pedidos).
  • Outras funções (spot, transferência de contrato, retirada de cofre, transferência de ativos para carteira, etc.).

Protocolo Websocket

  • Prática de assinatura de informações de troca (não há interface de trocas na interface REST, que é complementada pela interface Websocket)

Hyperliquid

  • Tipos de negociação 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. Eles correspondem a diferentes variedades no Hyperliquid DEX, respectivamente.

Na página Adicionar Bolsa da plataforma FMZ, você pode configurar objetos de bolsa à vista e de futuros da Hyperliquid:

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

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

  • Divisão ambiental Como a maioria das exchanges, a Hyperliquid tem um ambiente de testes.

    • Endereço do aplicativo Mainnet:

    https://app.hyperliquid.xyz

    Pela experiência real de uso, a rede principal é relativamente estável e a velocidade também é boa. Endereço do nó da interface da API do protocolo REST correspondente:https://api.hyperliquid.xyz。 As informações relacionadas à assinatura de mensagens também são diferentes:source == "a"chainId = 42161

    • Endereço do aplicativo de rede de teste:

    https://app.hyperliquid-testnet.xyz

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

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

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

  • Conexão da carteira com o Hyperliquid

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

  • Testnet Faucet (teste de depósito de ativos USDC)

Se você quiser se familiarizar com a testnet primeiro, poderá encontrar a faucet diretamente na página da Hyperliquid depois de conectar sua carteira à Hyperliquid.

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

Você pode reivindicar ativos de teste. Após receber o USDC para teste, clique no botão “Deposit” para depositá-lo no Hyperliquid (é melhor ter algum ETH para a rede de teste Arbitrum).

  • Deposite ativos USDC na rede principal

Clique no botão “Depositar” para depositar, o que requer verificação de carteira e consumirá um pouco de ETH na 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 registrados no navegador e usados ​​para operações como fazer pedidos na página do navegador. Se quisermos fazer programática e quantitativa Como a transação precisa obter essas informações de configuração?

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

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

  • 1. Dê um nome para a carteira proxy a ser criada.

  • 2. Gere endereço e chave privada.

    1. Autorize a carteira proxy usando a carteira conectada ao Hyperliquid.
  • Configurar o endereço da carteira proxy e a chave privada no FMZ

Então você pode configurar essas informações 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 conectada ao Hyperliquid (observe que não é o endereço da carteira proxy).
  • Wallet PrivateKey: A chave privada da carteira conectada ao Hyperliquid (opcional, necessária somente 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 Hiperlíquida na FMZ

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

  • O endereço da carteira é usado para consultar informações de transações do usuário
  • A Wallet PrivateKey é usada para transferência, transferência e outras operações
  • A chave secreta é usada para operações relacionadas a transações

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

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

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

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

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

    return exchange.GetAccount()
}

A configuração da mainnet não requer a operação de comutação acima. As interfaces de API relacionadas a produtos spot e futuros na bolsa Hyperliquid DEX são quase as mesmas, com apenas pequenas diferenças nos detalhes. Em seguida, usamosInformações de configuração da rede principaleInformações de configuração do Testnetde Futuros HiperlíquidosTroque objetos para testar.

Informações sobre 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) +  "`")
}

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

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

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

Ativos da conta

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

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

Encomendar e verificar

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 Prática Quantitativa (2) - Guia do Usuário Hyperliquid

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

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

Trocar alavancagem, trocar margem cruzada/margem isolada

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

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

    return exchange.GetRawJSON()
}

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

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

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

Outras interfaces

Como os parâmetros da interface da exchange são complexos, não é possível usar o método de codificação de URL para passar os parâmetros.exchange.IOAo chamar uma função, somente strings JSON podem ser passadas como parâmetros. A seguir estão exemplos de chamada de cada interface.

Documentação de referência do 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 função tem restrições: a conta deve atingir o nível de negociação para usar esta função.

twapOrder

Crie um pedido 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, 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))
}

A autorização retorna com sucesso:

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

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

vaultTransfer

Retire ativos 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”: true, controla depósito e depósito.

withdraw3

Testnet, retire ativos 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 endereço da sua carteira atual: “0xAAA”.

usdClassTransfer

Transferência de ativos entre spot/futuros (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” está definido comofalseIndica a direção da rotação: futuros -> spot.
  • O parâmetro “toPerp” está definido comotrueIndica a direção da transferência: spot -> futuros.

Uso da interface Websocket

Endereço da interface WS da rede principal:

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

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

Estrutura da mensagem de assinatura

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

Exemplo de teste executado no 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("测试结束")
}

DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid

END

Os testes acima são baseados no custodian mais recente. Você precisa baixar o custodian mais recente para dar suporte à exchange Hyperliquid DEX.

Obrigado pelo seu apoio e obrigado pela leitura.