[TOC]
最近,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インターフェイスで補完)
FMZの追加取引所ページでは,Hyperliquidの現貨・先物取引所オブジェクトを設定できます.
環境の分別 Hyperliquidには,ほとんどの取引所と同様にテスト環境があります.
リアルな使い方をすると,メインネットは安定し,速度も良好です.
対応する REST プロトコル API インターフェースノードのアドレス:https://api.hyperliquid.xyz
│ │
メッセージの署名に関する情報も異なります:source == "a"
,chainId = 42161
テストネットはしばしば停止しますが,テストインターフェースとしてのみ使用され,DEX上の取引機能に慣れています.
対応する REST プロトコル API インターフェースノードのアドレス:https://api.hyperliquid-testnet.xyz
│ │
メッセージの署名に関する情報も異なります:source == "b"
,chainId = 421614
ほとんどのDEX取引所のウォレット接続方法と同様に,ウォレットAPPを使って2DコードをスキャンしてHyperliquidに接続できます (ウォレットがArbitrumに切り替わると,スキャンログイン,テストネット,ホームネットも同じです).
テストネットで最初に馴染みのある生徒が Hyperliquid に財布を接続した後に,直接 Hyperliquid のページでタップを見つけることができます.
テスト資産,テスト用USDCを取得した後",預金"ボタンをクリックしてHyperliquidに預金できます (ArbitrumテストネットはETHを少し持っていればよい).
"Deposit"ボタンをクリックすると,ArbitrumのETHを少しずつ消費し,財布の認証が必要です.
Hyperliquid APPのページで手動取引を行うとき,ページは自動的に代理財布アドレスとプライベートキーを生成し,ブラウザに記録され,ブラウザページの下記のような操作に使用されます.
Hyperliquid の API ページで必要な代理財布アドレスと対応するプライベートキーを作成できます:
1 代理財布の名前をつけよう.
2 住所とプライベートキーを生成する.
3. Hyperliquid に接続されたウォレットを使用して代理ウォレットに権限を与える.
FMZで代理財布アドレス,プライベートキーを設定する
この情報は,FMZのプラットフォームで設定できます (設定インターフェイスは上記を参照).
取引所のオブジェクトを設定するために必要な情報:
設定が完了したら,FMZプラットフォームでテストできます. FMZプラットフォームの"デュマイティングツール"を使って直接テストを行います.
テストネットワーク情報配置の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) + "`")
}
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])
}
function main() {
var account = exchange.GetAccount()
return account
}
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) + "`")
}
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) + "`")
}
function main() {
// 设置当前为全仓
exchange.IO("cross", true)
// 设置杠杆
exchange.SetMarginLevel("ETH_USD.swap", 10)
return exchange.GetRawJSON()
}
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 取引された:174.57424.”}: err , response : 取引量が十分になるまで予定されたキャンセル時間を設定できません.必須:
この機能には制限があります.アカウントが取引レベルに達した場合にのみこの機能を使用できます.
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の注文は撤回された.
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 , 応答: { タイプ: デフォルト }
https://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))
}
テストネット,資産を財布に提出.
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))
}
現貨/先物 (永続契約) の間の資産分割.
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))
}
false
未来 -> スポット.true
スポット -> フューチャー.ウェブの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("测试结束")
}
上記のテストでは,最新の托管者をベースに,最新の托管者をダウンロードする必要があります.
ありがとうございました. ありがとうございました.