4
Подписаться
1271
Подписчики

Количественная практика обмена DEX (2) - Руководство пользователя Hyperliquid

Создано: 2025-01-15 13:43:15, Обновлено: 2025-01-16 09:52:43
comments   2
hits   3114

[TOC]

Количественная практика обмена DEX (2) - Руководство пользователя Hyperliquid

Предисловие

Недавно платформа FMZ добавила поддержку Hyperliquid DEX — высокопроизводительной децентрализованной биржи, предоставляющей пользователям больше возможностей для участия в децентрализованных транзакциях. В настоящее время функция кастодиана платформы FMZ полностью обновлена ​​для поддержки спотовых и бессрочных контрактных транзакций Hyperliquid и охвата всех функций API DEX.

Обзор платформы Hyperliquid

Hyperliquid — это высокопроизводительный блокчейн L1, оптимизированный с нуля с целью создания полностью открытой финансовой системы на основе блокчейна. Пользователи могут создавать приложения независимо, взаимодействуя с эффективными собственными компонентами, обеспечивая при этом удобство работы конечного пользователя.

Производительность Hyperliquid L1 достаточна для поддержки экосистемы финансовых приложений, не требующей разрешений. Все заказы, снятия заказов, транзакции и ликвидации выполняются в блокчейне абсолютно прозрачным образом, с задержкой блоков менее 1 секунды. В настоящее время сеть поддерживает мощность обработки до 100 000 заказов в секунду.

Hyperliquid L1 использует собственный алгоритм консенсуса HyperBFT, созданный по мотивам Hotstuff и его последователей. Как механизм консенсуса, так и архитектура сети оптимизированы снизу вверх для удовлетворения потребностей высокопроизводительного блокчейна.

С помощью этого руководства мы надеемся помочь вам быстро начать программную и количественную торговлю Hyperliquid DEX на платформе FMZ и открыть для себя больше торговых возможностей.

Практика содержания

REST-протокол

  • Практика взаимодействия с рынком.
  • Практика торгового интерфейса (размещение ордеров, отмена ордеров).
  • Практики запросов, связанных с транзакциями (счета, заказы).
  • Другие функции (спот, перевод контрактов, вывод средств из хранилища, перевод активов в кошелек и т. д.).

Протокол веб-сокета

  • Практика подписки на информацию обмена (в интерфейсе REST отсутствует интерфейс Trades, который дополняется интерфейсом Websocket)

Hyperliquid

  • Типы торговли Hyperliquid делится на спотовые и бессрочные контракты на основе торговых разновидностей. На основе архитектуры платформы FMZ он также делится на объекты спотовой биржи Hyperliquid и объекты фьючерсной биржи Hyperliquid на платформе FMZ. Они соответствуют различным разновидностям Hyperliquid DEX соответственно.

На странице «Добавить биржу» платформы FMZ вы можете настроить объекты спотовой и фьючерсной биржи Hyperliquid:

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

Количественная практика обмена DEX (2) - Руководство пользователя Hyperliquid

  • Экологический отдел Как и большинство бирж, Hyperliquid имеет тестовую среду.

    • Адрес приложения Mainnet:

    https://app.hyperliquid.xyz

    По опыту реального использования основная сеть относительно стабильна, а скорость также хорошая. Соответствующий адрес узла интерфейса API протокола REST:https://api.hyperliquid.xyz。 Информация, связанная с подписанием сообщений, также отличается:source == "a"chainId = 42161

    • Адрес приложения тестовой сети:

    https://app.hyperliquid-testnet.xyz

    Тестовая сеть часто дает сбои, но она используется только как тестовый интерфейс и для ознакомления с торговыми функциями на DEX. Соответствующий адрес узла интерфейса API протокола REST:https://api.hyperliquid-testnet.xyz。 Информация, связанная с подписанием сообщений, также отличается:source == "b"chainId = 421614

Информация о подключении, входе в систему и конфигурации кошелька

Как и в случае с большинством бирж DEX, вы можете использовать приложение кошелька для сканирования QR-кода для подключения к Hyperliquid (переключите кошелек на Arbitrum и отсканируйте код для входа, тестовая сеть и основная сеть одинаковы). .

  • Подключение кошелька к Hyperliquid

Количественная практика обмена DEX (2) - Руководство пользователя Hyperliquid

  • Testnet Faucet (тестовый депозит активов USDC)

Если вы хотите сначала ознакомиться с тестовой сетью, вы можете найти кран прямо на странице Hyperliquid после подключения своего кошелька к Hyperliquid.

Количественная практика обмена DEX (2) - Руководство пользователя Hyperliquid

Вы можете запросить тестовые активы. Получив USDC для тестирования, нажмите кнопку «Депозит», чтобы внести его в Hyperliquid (лучше всего иметь немного ETH для тестовой сети Arbitrum).

  • Внесите активы USDC в основную сеть

Нажмите кнопку «Депозит», чтобы внести депозит. Для этого потребуется верификация кошелька и будет потрачено немного ETH на Arbitrum.

  • Создайте конфигурацию прокси-кошелька

При выполнении ручных транзакций на странице Hyperliquid APP, страница автоматически сгенерирует адрес прокси-кошелька и закрытый ключ, которые записываются в браузер и используются для таких операций, как размещение заказов на странице браузера. Если мы хотим сделать программные и количественные Каким образом транзакция должна получить эту информацию о конфигурации?

Создать необходимый адрес прокси-кошелька и соответствующий ему закрытый ключ можно на странице API Hyperliquid:

Количественная практика обмена DEX (2) - Руководство пользователя Hyperliquid

Количественная практика обмена DEX (2) - Руководство пользователя Hyperliquid

  • 1. Дайте имя прокси-кошельку, который вы хотите создать.

  • 2. Сгенерируйте адрес и закрытый ключ.

    1. Авторизуйте прокси-кошелек, используя кошелек, подключенный к Hyperliquid.
  • Настройте адрес прокси-кошелька и закрытый ключ на FMZ

Затем вы можете настроить эту информацию на платформе FMZ (интерфейс настройки указан выше).

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

  • Адрес кошелька: адрес кошелька, подключенного к Hyperliquid (обратите внимание, это не адрес прокси-кошелька).
  • Wallet PrivateKey: закрытый ключ кошелька, подключенный к Hyperliquid (необязательно, требуется только при вызове API, например, для переводов, можно оставить пустым).
  • Секретный ключ: закрытый ключ прокси-кошелька (сгенерирован на предыдущем шаге, закрытый ключ отображается после авторизации).

Гиперликвидная практика на FMZ

Информация, необходимая для настройки объекта обмена:

  • Адрес кошелька используется для запроса информации о транзакциях пользователя.
  • Кошелек PrivateKey используется для переводов, трансферов и других операций
  • Секретный ключ используется для операций, связанных с транзакциями.

После завершения конфигурации мы можем протестировать ее на платформе FMZ. Мы напрямую используем «инструмент отладки» платформы FMZ для практики тестирования.

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

Если вы используете объект обмена Hyperliquid, настроенный с использованием информации тестовой сети, вам потребуется выполнить некоторые операции переключения при его использовании, например:

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

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

    return exchange.GetAccount()
}

Конфигурация mainnet не требует вышеуказанной операции переключения. Интерфейсы API, связанные со спотовыми и фьючерсными продуктами на бирже Hyperliquid DEX, почти одинаковы, с небольшими различиями в деталях. Далее мы используемИнформация о конфигурации основной сетииИнформация о конфигурации тестовой сетииз Гиперликвидные фьючерсыОбменяйтесь объектами для тестирования.

Информация о сорте

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 (2) - Руководство пользователя Hyperliquid

Данные книги заказов

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 (2) - Руководство пользователя Hyperliquid

Активы счета

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

Количественная практика обмена DEX (2) - Руководство пользователя Hyperliquid

Заказать и проверить

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 (2) - Руководство пользователя Hyperliquid

Отменить все заказы

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 (2) - Руководство пользователя Hyperliquid

Переключение кредитного плеча, переключение кросс-маржи/изолированной маржи

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

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

    return exchange.GetRawJSON()
}

Количественная практика обмена DEX (2) - Руководство пользователя Hyperliquid

exchange.GetRawJSON() возвращает ответную информацию запроса на настройку кредитного плеча:

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

Другие интерфейсы

Поскольку параметры интерфейса биржи сложны, использовать метод кодирования URL для передачи параметров невозможно.exchange.IOПри вызове функции в качестве параметров можно передавать только строки JSON. Ниже приведены примеры вызова каждого интерфейса.

Справочная документация 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.”}

Эта функция имеет ограничения: для использования этой функции счет должен достичь торгового уровня.

twapOrder

Создайте заказ 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

Отменить заказ TWAP.

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

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

approveAgent

Тестовая сеть, авторизуйте новый прокси-кошелек.

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

Авторизация успешно возвращает:

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

  • Создайте API proxy кошелек. 0xAAAA — это сгенерированный адрес кошелька (просто пример). Сохраните соответствующий закрытый ключ при его генерации.
  • “test02” — имя API proxy wallet. Сгенерированная пара ключей будет отображаться на странице hyperliquid APP.https://app.hyperliquid-testnet.xyz/APIсередина.

vaultTransfer

Изъять активы из хранилища.

function main() {
    var params = {
        "type": "vaultTransfer",
        "vaultAddress": "0xAAA",
        "isDeposit": true,
        "usd": 5000000
    }
    
    return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
  • «usd»: 5000000 означает 5 USDC.
  • «0xAAA»: адрес хранилища.
  • “isDeposit”: true, управляет депозитом и пополнением.

withdraw3

Тестовая сеть, вывод средств на кошелек.

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))
}
  • Выведите деньги на ваш текущий адрес кошелька: «0xAAA».

usdClassTransfer

Перевод активов между спотовыми/фьючерсными контрактами (бессрочные контракты).

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))
}
  • Параметр “toPerp” установлен наfalseУказывает направление вращения: фьючерсы -> спот.
  • Параметр “toPerp” установлен наtrueУказывает направление перевода: спот -> фьючерс.

Использование интерфейса WebSocket

Основной адрес сетевого интерфейса WS:

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

Поскольку интерфейс API протокола REST не имеет интерфейса для получения данных о последних транзакциях, интерфейс Websocket имеет этот канал, на который можно подписаться.

Структура сообщения подписки

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

Пример теста, выполненного в отладчике:

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 (2) - Руководство пользователя Hyperliquid

END

Вышеуказанные тесты основаны на последнем кастодиане. Вам необходимо загрузить последний кастодиан для поддержки обмена Hyperliquid DEX.

Спасибо за вашу поддержку и спасибо за чтение.