В процессе загрузки ресурсов... загрузка...

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

Автор:FMZ~Lydia, Создано: 2025-01-16 10:57:22, Обновлено: 2025-01-16 10:59:23

Преамбула

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

Обзор гипержидкой платформы

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

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

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

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

Содержание упражнений

Протокол REST

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

Протокол Websocket

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

Гипержидкий

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

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

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

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

  • Отдел охраны окружающей среды Как и большинство бирж, Hyperliquid также имеет тестовую среду.

Адрес APP для основной сети:

https://app.hyperliquid.xyz

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

Адрес APP испытательной сети:

https://app.hyperliquid-testnet.xyz

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

Подключение кошелька, логин и конфигурация

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

  • Кошелек подключен к Hyperliquid

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

  • Таблица лидеров сети тестирования (активы USDC для тестирования депозитов) Если вы хотите сначала ознакомиться с тестовой сетью, вы можете найти таблицу лидеров непосредственно на странице Hyperliquid после подключения кошелька к Hyperliquid.

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

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

  • Депонировать активы в USDC в основной сети

Нажмите кнопку Deposit для внесения депозита, который требует проверки кошелька и будет потреблять немного ETH на Arbitrum.

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

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

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

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

  1. Укажите имя создаваемого прокси-кошелька.
  2. Создать адрес и частный ключ.
  3. Авторизуйте прокси-кошелек с помощью кошелька, подключенного к Hyperliquid.
  • Настроить адрес прокси-кошелька и частный ключ на FMZ

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

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

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


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

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

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

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

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

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

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

Конфигурация майннета не требует вышеуказанной операции переключения. Интерфейсы 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) +  "`")
}

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

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

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

Активы счета

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

Результаты функций:

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

Порядок и проверка

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

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

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

Установление рычагов воздействия, перекрестное/изолированное положение переключателя

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

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

    return exchange.GetRawJSON()
}

Результаты функций:

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

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

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

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

Поскольку параметры интерфейса обмена относительно сложны и не могут быть переданы с помощью метода кодирования URL, при использованииexchange.IOfunctionВ следующем приведены примеры различных вызовов интерфейса.

ссылка на гипержидкую документацию:https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order

Отменить расписание.

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

{status:err,response:Невозможно установить запланированное время отмены, пока не будет достаточно объема торгов.1000000 - торгуется:174.57424.”}

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

Заказывать

Создайте приказ 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))
}

twapОтменить

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

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

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

Одобрить

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

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. 0xAAAA - это созданный адрес кошелька (только пример). Сохранить соответствующий частный ключ при его создании.
  • test02 это имя прокси-кошелька API. Сгенерированная пара ключей будет отображаться на странице гипержидкой APPhttps://app.hyperliquid-testnet.xyz/API.

хранилищеПередача

Выведите активы из хранилища.

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, контролирует депозит и депозит.

вывести3

Тестнет, выведи активы в кошелек.

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, указывающий направление вращения: спот -> фьючерсы.

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

Адрес интерфейса 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("End of test")
}

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

Окончание

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

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


Больше