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

DEX取引所の量化実践 (2) -- Hyperliquidの使用ガイド

作者: リン・ハーン発明者 量化 - 微かな夢作成日:2025-01-15 13:43:15 更新日:2025-01-15 17:08:49 更新日:2015-01-15 更新日:2015-01-15 更新日:2015-01-15 更新日:2015-01-15 更新日:2015-01-15 更新日:2015-01-15 更新日:2015-01-15 更新日:2015-01-15 更新日:2015-01-15 更新日:2015-01-15 更新日:2015-01-15

[TOC]

DEX交易所量化实践(2)– Hyperliquid 使用指南

前言

最近,FMZプラットフォームは,ハイパーリキッドDEXという高性能な分散型取引所を新たにサポートし,ユーザに分散型取引に参加するための選択肢をさらに提供した.現在,FMZプラットフォームの管理者機能は, Hyperliquidの現金取引と永続契約取引をサポートし,DEXのすべてのAPI機能をカバーする全面的な更新が実施されている.

Hyperliquid プラットフォームの概要

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

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

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

このガイドは,FMZのプラットフォーム上で,ハイパーリキッドDEXのプログラム化・量化取引を迅速に掌握し,より多くの取引機会を掘り出すのに役立ちます.

実践内容

REST プロトコル - ビジネスインターフェースの実践. - 取引インターフェースの実践 (注文,取り消し) - 取引に関する問い合わせの慣行 (アカウント,注文) - その他の機能 (現金,契約分譲,金庫取得,資産を財布に分譲など)

WebSocket プロトコル - 成交情報のサブスクリプションの実践 (RESTインターフェイスにはTradesインターフェイスがないため,Websocketインターフェイスで補完)


超液体

  • 取引品種分類 Hyperliquidは取引品種から,現貨,永続契約,FMZプラットフォームベースのアーキテクチャに分類され,FMZプラットフォームでは,Hyperliquid現貨取引所対象,Hyperliquid先物取引所対象として分かれている.それぞれHyperliquid DEX内の異なる品種に対応している.

FMZの追加取引所ページでは,Hyperliquidの現貨・先物取引所オブジェクトを設定できます.

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

DEX交易所量化实践(2)– Hyperliquid 使用指南

  • 環境の分別 Hyperliquidには,ほとんどの取引所と同様にテスト環境があります.

    • ウェブサイトの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を使って2DコードをスキャンしてHyperliquidに接続できます (ウォレットがArbitrumに切り替わると,スキャンログイン,テストネット,ホームネットも同じです).

  • ウォレットとHyperliquidが接続される

DEX交易所量化实践(2)– Hyperliquid 使用指南

  • テストネットの水道蛇口 (USDC資産のテストに突入)

テストネットで最初に馴染みのある生徒が Hyperliquid に財布を接続した後に,直接 Hyperliquid のページでタップを見つけることができます.

DEX交易所量化实践(2)– Hyperliquid 使用指南

テスト資産,テスト用USDCを取得した後",預金"ボタンをクリックしてHyperliquidに預金できます (ArbitrumテストネットはETHを少し持っていればよい).

  • 主ネットがUSDC資産に突入

"Deposit"ボタンをクリックすると,ArbitrumのETHを少しずつ消費し,財布の認証が必要です.

  • 代理財布の設定を作成する

Hyperliquid APPのページで手動取引を行うとき,ページは自動的に代理財布アドレスとプライベートキーを生成し,ブラウザに記録され,ブラウザページの下記のような操作に使用されます.

Hyperliquid の API ページで必要な代理財布アドレスと対応するプライベートキーを作成できます:

DEX交易所量化实践(2)– Hyperliquid 使用指南

DEX交易所量化实践(2)– Hyperliquid 使用指南

  • 1 代理財布の名前をつけよう.

  • 2 住所とプライベートキーを生成する.

  • 3. Hyperliquid に接続されたウォレットを使用して代理ウォレットに権限を与える.

  • FMZで代理財布アドレス,プライベートキーを設定する

この情報は,FMZのプラットフォームで設定できます (設定インターフェイスは上記を参照).

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

  • Wallet Address: Hyperliquid に接続されたウォレットアドレス (注意,代理ウォレットアドレスではありません).
  • Wallet PrivateKey: Hyperliquid に接続された財布のプライベートキー ((不要,APIなどの呼び出しが必要な場合にのみ必要であり,空白に置くことができます)).
  • Secret Key: 代理財布のプライベートキー (前回のステップで代理財布を作成し,承認後に表示されるプライベートキー)

FMZでハイパーリキッドを実践する

取引所のオブジェクトを設定するために必要な情報:

  • Wallet Address ユーザーによる取引などの情報への問い合わせ
  • Wallet PrivateKey は,送金,切り替えるなどの操作に使用されます.
  • 秘密鍵は取引に関する操作に使用されます

設定が完了したら,FMZプラットフォームでテストできます. FMZプラットフォームの"デュマイティングツール"を使って直接テストを行います.

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

テストネットワーク情報配置のHyperliquid Exchange オブジェクトを使用している場合は,いくつかの切り替え操作を行う必要があります.

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

    // source : a 主网 , b 测试网
    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) +  "`")
}

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 ((() は,レバレッジ設定のリクエストに対する返信を返します.

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

他のインターフェース

取引所のインターフェースのパラメータが比較的複雑で,URLエンコード方式で送信できないため,exchange.IO函数呼び出しでは,JSON 文字列のみを参数伝達として使用できます.以下の各インターフェース呼び出し例はこちら.

超液体 参考資料: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 , 订单量 : 1  , twapOrder 订单有头寸要求,最少100美元价值
    // a : 0 , 即 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代理ウォレット名で,生成されたこのキーペアは,hyperliquid 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. 0xAAA. 0xAAA. 0xAAA. 0xAAA. 0xAAA. 0xAAA. 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))
}
  • 参数toPerpは,false未来 -> スポット.
  • 参数toPerpは,trueスポット -> フューチャー.

Websocket インターフェースを使用する

ウェブのWSインターフェースのアドレス:

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

REST プロトコル API インターフェイスは最近のトランザクションデータのインターフェースを入手していないため,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 使用指南

エンド

上記のテストでは,最新の托管者をベースに,最新の托管者をダウンロードする必要があります.

ありがとうございました. ありがとうございました.


もっと