리소스 로딩... 로딩...

DEX 거래소의 양적 관행 (2) -- 하이퍼 액성 사용자 가이드

저자:FMZ~리디아, 생성: 2025-01-16 10:57:22, 업데이트: 2025-01-16 10:59:23

전문

최근, FMZ 플랫폼은 고성능 분산 거래소인 하이퍼 리퀴드 DEX에 대한 지원을 추가하여 사용자에게 분산 거래에 참여할 수있는 더 많은 옵션을 제공합니다. 현재, FMZ 플랫폼의 도커 기능은 하이퍼 리퀴드 의 스팟 및 영구 계약 거래를 지원하고 DEX의 모든 API 기능을 커버하기 위해 완전히 업데이트되었습니다.

하이퍼 액체 플랫폼 개요

하이퍼 리퀴드는 처음부터 최적화된 고성능 L1 블록체인으로, 완전히 온 체인 오픈 금융 시스템을 구축한다는 비전을 가지고 있다. 사용자는 효율적인 네이티브 컴포넌트와 상호 작용하면서 원활한 최종 사용자 경험을 보장함으로써 독립적으로 애플리케이션을 만들 수 있다.

하이퍼 리퀴드 L1의 성능은 허가 없는 금융 애플리케이션 생태계를 지원하기에 충분하다. 모든 주문, 인출, 거래 및 청산은 블록 지연시간이 1초 미만인 완전히 투명한 방식으로 체인에 완료된다. 현재 체인은 초당 최대 10만 개의 주문 처리 용량을 지원한다.

하이퍼 리퀴드 L1는 Hotstuff와 그 후의 알고리즘에서 영감을 얻은 하이퍼 BFT라는 사용자 정의 합의 알고리즘을 사용합니다. 합의 메커니즘과 네트워크 아키텍처 모두 고성능 블록체인의 요구를 충족시키기 위해 아래에서 최적화되었습니다.

이 가이드를 통해 FMZ 플랫폼의 Hyperliquid DEX에서 프로그래밍 및 양적 거래에 빠르게 시작할 수 있도록 돕고 더 많은 거래 기회를 발견 할 수 있기를 바랍니다.

연습 내용

REST 프로토콜

  • 시장 인터페이스 연습.
  • 거래 인터페이스 연습 (오더 배치, 오더 철회)
  • 트랜잭션 관련 질의 연습 (상서, 주문)
  • 다른 기능 (스팟, 계약 전송, 금고에서 인출, 지갑으로 자산을 전송 등).

웹소켓 프로토콜

  • 교환 정보 구독 관행 (웹소켓 인터페이스로 보완되는 REST 인터페이스에 트레이드 인터페이스는 없습니다)

초액성

  • 거래 품종 하이퍼리쿼드는 거래 종류에 따라 스팟 및 영구 계약으로 나뉘어 있습니다. FMZ 플랫폼의 아키텍처에 따라 각각 하이퍼리쿼드 DEX의 다른 종류에 해당하는 FMZ 플랫폼에서 하이퍼리쿼드 스팟 거래 대상과 하이퍼리쿼드 선물 거래 대상으로 나뉘어 있습니다.

FMZ 플랫폼의 플랫폼 추가 페이지에서, 당신은 Hyperliquid 스팟과 선물 교환 객체를 구성할 수 있습니다:

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

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

  • 환경 부문 대부분의 거래소와 마찬가지로 하이퍼리quid도 테스트 환경을 가지고 있습니다.

메인넷 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 버튼을 클릭하십시오. (아비트럼 테스트 네트워크에 약간의 ETH가 가장 좋습니다.)

  • 메인 네트워크에 USDC 자산을 입금

지갑 검증을 필요로 하는 예금 버튼을 클릭하면 아비트럼에서 약간의 ETH를 소비할 수 있습니다.

  • 프록시 지갑 구성을 생성

하이퍼 리퀴드 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에서 초액수 연습

교환 객체를 구성하는 데 필요한 정보:

  • 지갑 주소는 사용자 트랜잭션 정보를 검색하는 데 사용됩니다
  • 지갑 프라이빗키는 송금 및 다른 작업에 사용됩니다
  • 비밀 키는 트랜잭션 관련 작업에 사용됩니다.

구성이 완료되면 FMZ 플랫폼에서 테스트 할 수 있습니다. 테스트 연습을 위해 FMZ 플랫폼의 디버깅 툴을 직접 사용합니다.

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

만약 당신이 testnet 정보로 구성된 Hyperliquid 교환 객체를 사용하고 있다면, 예를 들어, 그것을 사용할 때 몇 가지 전환 작업을 수행해야 합니다.

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

메인 네트워크 구성은 위의 전환 작업을 필요로 하지 않습니다. 하이퍼 액체 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() 는 레버리지 설정 요청의 응답 정보를 반환합니다.

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

다른 인터페이스

교환의 인터페이스 매개 변수는 상대적으로 복잡하고 URL 암호화 방법을 사용하여 전달 할 수 없기 때문에exchange.IOfunction호출, 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:충분한 거래량까지 예정된 취소 시간을 설정할 수 없습니다.100만원 거래:174.57424.”}

이 기능에는 제한이 있습니다. 이 기능을 사용하려면 거래 수준에 도달해야 합니다.

2번 주문

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 프록시 지갑 이름입니다. 생성 키 페어는 하이퍼 액체 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, 예금 및 예금을 제어합니다.

철회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))
}
  • 매개 변수 toPerpfalse, 회전 방향을 나타냅니다: 선물 -> 스팟.
  • 매개 변수 toPerptrue, 회전 방향을 나타냅니다: 스팟 -> 선물.

웹소켓 인터페이스 사용

주요 네트워크 WS 인터페이스 주소:

메인넷: wss://api.hyperliquid.xyz/ws

REST 프로토콜 API 인터페이스는 최근 트랜잭션 데이터를 얻기 위한 인터페이스를 가지고 있지 않기 때문에, 웹소켓 인터페이스는 이 채널을 구독할 수 있습니다.

구독 메시지 구조

{
    "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

END

위의 테스트는 최신 도커를 기반으로 합니다. Hyperliquid DEX 교환을 지원하려면 최신 도커를 다운로드 해야 합니다.

지원해주셔서 감사합니다. 읽고 주셔서 감사합니다.


더 많은