資源の読み込みに... 荷物...

DEX取引所の定量実践 (2) -- ハイパーリキッドユーザーガイド

作者: リン・ハーンFMZ~リディア, 作成日:2025-01-16 10:57:22, 更新日:2025-01-16 10:59:23

前言

最近,FMZプラットフォームは,高性能分散型取引所であるHyperliquid DEXのサポートを追加し,ユーザーに分散型取引に参加するためのより多くのオプションを提供します.現在,FMZプラットフォームのドッカー機能は,Hyperliquidのスポットおよび永久契約取引をサポートするために完全に更新され,DEXのすべてのAPI機能をカバーしています.

超液体プラットフォームの概要

Hyperliquidは,ゼロから最適化された高性能L1ブロックチェーンであり,完全にチェーン上のオープンな金融システムを構築するというビジョンを持っています.ユーザーは効率的なネイティブコンポーネントと相互作用することで,エンドユーザーにとってスムーズな体験を保証しながら,アプリケーションを独立して作成することができます.

Hyperliquid L1の性能は,許可のない金融アプリケーションエコシステムをサポートするのに十分である.すべての注文,引き出し,取引,清算は,ブロックレイテンシーが1秒未満で,完全に透明な方法でチェーン上で完了する.現在,チェーンは,1秒間に10万注文までの処理能力をサポートしている.

Hyperliquid L1は,Hotstuffとその後のアルゴリズムにインスピレーションを受けたHyperBFTと呼ばれるカスタムコンセンサスアルゴリズムを使用しています.コンセンサスメカニズムとネットワークアーキテクチャの両方が,高性能ブロックチェーンのニーズを満たすために,底から上へと最適化されています.

このガイドを通じて,FMZプラットフォームのHyperliquid DEXで プログラム化および定量的な取引を迅速に開始し,より多くの取引機会を発見するのを助けることを願っています.

練習内容

REST プロトコル

  • 市場インターフェースの練習
  • 取引インターフェイスの実践 (注文の提出,注文の撤回)
  • トランザクション関連クエリの実践 (ポジション,注文)
  • 他の機能 (スポット,契約転送,セーフの引き出し,財布への資産の転送など)

Webソケットプロトコル

  • Exchange Information サブスクリプション 実践 (WebSocket インターフェースで補完される REST インターフェースには Trades インターフェースがありません)

超液体

  • 売買品種 Hyperliquidは,取引品種に基づいてスポットおよび永久契約に分かれています. FMZプラットフォームのアーキテクチャに基づいて,それぞれHyperliquid DEXの異なる品種に対応するFMZプラットフォーム上のHyperliquidスポット交換オブジェクトとHyperliquid先物交換オブジェクトに分かれています.

FMZ プラットフォームの Add プラットフォームページでは,Hyperliquid スポットと先物交換オブジェクトを設定できます:

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

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

  • 環境部門 ハイパーリキッドもテスト環境を持っています

メインネットAPPアドレス:

https://app.hyperliquid.xyz

実際の利用では,メインネットワークは比較的安定し,高速です. 対応する REST プロトコル API インターフェースノード アドレスは:https://api.hyperliquid.xyz- わかった メッセージ署名に関する情報も異なります.source == "a",chainId = 42161.

テストネットワーク APP アドレス:

https://app.hyperliquid-testnet.xyz

テストネットワークはしばしばクラッシュしますが,テストインターフェイスとして DEXの取引機能に慣れるためにのみ使用されます. 対応する REST プロトコル API インターフェースノード アドレスは:https://api.hyperliquid-testnet.xyz- わかった メッセージ署名に関する情報も異なります.source == "b",chainId = 421614.

ウォレット接続,ログイン,設定情報

ほとんどのDEX取引所のウォレット接続方法と同様に,ウォレットAPPを使用して Hyperliquid に接続するための QR コードをスキャンできます (ウォレットを Arbitrum に切り替えてログインするコードをスキャンします.テストネットワークとメインネットワークは同じです).

  • Hyperliquid に接続された財布

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

  • テストネットランキングボード (デポジットテストのUSDC資産) テストネットに詳しい方は Hyperliquid のページに直接ランキングボードを見つけることができます ウォレットを Hyperliquid に接続した後です

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

テスト資産を請求できます. USDCをテスト用に受け取った後, Hyperliquid に預金するために Deposit ボタンをクリックします (Arbitrum テストネットワークのために ETH を持っておくのが最善です).

  • メインネットにUSDC資産を預ける

預金ボタンをクリックして預金します 預金には財布の確認が必要で Arbitrum で少しETHが消費されます

  • プロキシウォレット設定を作成

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 アドレスは,ユーザートランザクション情報をクエリするために使用されます.
  • ウォレット プライベートキー は 送金 や その他の 操作 に 用い られ ます
  • 秘密鍵はトランザクション関連の操作に使用されます.

設定が完了したら,FMZプラットフォームでテストできます. テスト練習のために FMZプラットフォームの"デバッグツール"を直接使用します.

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

テストネット情報で構成された Hyperliquid Exchange オブジェクトを使用している場合は,これを使用する際にいくつかの切り替え操作を行う必要があります.

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

メインネットの構成には上記の切り替え操作は必要ありません. Hyperliquid DEX 取引所のスポットおよび先物製品に関連する API インターフェースは,細部にわずかな違いのみでほぼ同じです.次に,超流動の先物交換対象メインネット構成情報そしてテストネットの構成情報テストのために

品種に関する情報

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() はレバレッジ設定要求の応答情報を返します.

{ 状態: OK, 応答: { タイプ: デフォルト }

他のインターフェース

インターフェースのパラメータは比較的複雑で,URLエンコーディング方法を使用して渡すことはできないため,exchange.IOfunctionJSON 文字列のみをパラメータとして渡すことができる.以下の例は,様々なインターフェースの呼び出しである.

超液体参照資料: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:取引量が十分になるまで予定されたキャンセル時間を設定できません.必須:取引された: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))
}

認証が成功しました

{ 状態: OK, 応答: { タイプ: デフォルト }

  • API プロキシウォレットを作成します. 0xAAAA は生成されたウォレットアドレス (例のみ). 作成時に対応するプライベートキーを保存します.
  • test02 は API プロキシウォレット名です.生成されたキーペアはハイパーリキッド APP ページに表示されます.https://app.hyperliquid-testnet.xyz/API.

vault 転送

預金庫から資産を回収する

function main() {
    var params = {
        "type": "vaultTransfer",
        "vaultAddress": "0xAAA",
        "isDeposit": true,
        "usd": 5000000
    }
    
    return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
  • usd:5000000は5USDCを意味します.
  • 0xAAA 宝庫の住所です
  • isDeposit: true, 預金と預金を制御する.

撤回する

テストネット 財布に資産を引く

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

usdクラス転送

資産を即時取引と先物取引 (永続契約) の間で移転する.

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))
}
  • パラメーター toPerpfalse,回転方向を示す:先物 -> 即時.
  • パラメーター toPerptrue, 回転方向を表示する:スポット -> フューチャー.

Webソケット インターフェイス 使用

主なネットワークWSインターフェースのアドレス:

メインネット: wss://api.hyperliquid.xyz/ws

REST プロトコル API インターフェイスは最近のトランザクションデータを取得するためのインターフェースを持っていないため,Webソケットインターフェイスにはこのチャンネルがあり,サブスクリプションすることができます.

サブスクリプション メッセージ構造

{
    "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 交換をサポートするために最新のドッカーをダウンロードする必要があります.

応援してくれて ありがとう


もっと