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

DEX 거래소 정량화 연습 ((2)-- Hyperliquid 사용 지침

저자:발명가들의 수량화 - 작은 꿈, 생성: 2025-01-15 13:43:15, 업데이트: 2025-01-15 17:08:49

[TOC]

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

전문

최근, FMZ 플랫폼은 Hyperliquid DEX라는 고성능의 분산 거래소를 추가 지원하여 사용자에게 분산 거래에 참여할 수있는 더 많은 옵션을 제공합니다. 현재, FMZ 플랫폼의 관리자 기능은 Hyperliquid의 현금 및 상시 계약 거래를 지원하고 DEX의 모든 API 기능을 덮는 완전히 업데이트되었습니다.

하이퍼리quid 플랫폼 설명서

하이퍼리quid (Hyperliquid) 는 초로부터 최적화된 고성능 L1 블록체인이며, 전체적으로 연계된 개방형 금융 시스템을 구축하는 비전이다. 사용자는 효율적인 네이티브 구성 요소와 상호작용하여 애플리케이션을 독자적으로 만들 수 있으며, 동시에 최종 사용자 경험의 원활성을 보장한다.

하이퍼리쿼드 L1의 성능은 허가 없이 금융 애플리케이션 생태계를 지원할 만큼 충분하다. 모든 주문, 환불, 거래 및 청산은 블록체인 상에서 완전히 투명하게 완료되며, 블록 지연은 1초 미만이다. 현재 블록체인은 초당 최대 10만 개의 주문을 처리할 수 있는 능력을 지원한다.

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

이 가이드를 통해 FMZ 플랫폼에서 Hyperliquid DEX의 프로그래밍 및 양적 거래를 빠르게 수행하고 더 많은 거래 기회를 탐색하는 데 도움이 될 것입니다.

실습 내용

REST 프로토콜 - 비즈니스 인터페이스 연습. - 트랜잭션 인터페이스 실습 (예: 주문, 취소) - 거래 관련 문의 연습 (계정, 주문) - 다른 기능 (현금, 계약 분할, 금전함수, 자산 분할, 지갑 등)

웹소켓 프로토콜 - 트레이드 정보 구독 연습 (REST 인터페이스에는 트레이드 인터페이스가 없으며 웹소켓 인터페이스로 보완됩니다)


초액성

  • 거래 품종 분류 하이퍼리quid는 거래 품종으로 나뉘어 현금, 상속계약, FMZ 플랫폼에 기반한 구조로 나뉘어 있으며, FMZ 플랫폼에서도 하이퍼리quid 현금 거래소 객체, 하이퍼리quid 선물 거래소 객체로 나뉘어 있다. 각각 하이퍼리quid DEX의 다른 품종에 대응한다.

FMZ 플랫폼의 추가 거래소 페이지에서 Hyperliquid 현금, 선물 거래소 객체를 구성할 수 있습니다.

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

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

  • 환경 분할 대부분의 거래소와 마찬가지로, 하이퍼리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를 사용하여 2D 암호 스캔을 통해 Hyperliquid에 연결할 수 있습니다. (지갑이 Arbitrum으로 전환되는 방식과 동일한 방식으로 스캔 로그인, 테스트 네트워크, 홈 네트워크).

  • 지갑이 하이퍼리quid에 연결됩니다.

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

  • 테스트 네트워크 펌프 (USDC 자산을 테스트하는 강입)

테스트 네트워크에서 먼저 익숙한 학생을 원한다면 지갑이 Hyperliquid에 연결된 후 Hyperliquid 페이지에서 직접 펌프를 찾을 수 있습니다.

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

테스트 자산을 받을 수 있고 테스트용 USDC를 받을 수 있는 경우, "예금" 버튼을 누르면 Hyperliquid에 저장할 수 있습니다.

  • 메인 네트워크가 USDC 자산에 침투

"예금" 버튼을 누르면 지갑 검증이 필요하며 Arbitrum에 있는 ETH를 조금 더 소비합니다.

  • 대리인 지갑 설정

하이퍼리quid 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를 호출할 때만 필요합니다. 빈자리를 남길 수 있습니다.)).
  • 비밀 키: 대리자 지갑 비공개 키 (전 단계에서 대리자 지갑을 생성하고 권한이 부여된 후에 표시되는 비공개 키)

FMZ에서 Hyperliquid를 실행합니다.

거래소 개체를 구성하는 데 필요한 정보:

  • Wallet Address 사용자 거래와 같은 정보를 검색하는 데 사용됩니다.
  • Wallet PrivateKey는 송금, 회전 등 작업을 위해 사용됩니다.
  • 비밀 키는 트랜잭션 관련 작업에 사용됩니다.

일단 구성이 완료되면 FMZ 플랫폼에서 테스트를 할 수 있습니다. 우리는 FMZ 플랫폼의 "디큐팅 도구"를 사용하여 직접 테스트를 수행합니다.

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

테스트 네트워크 정보 구성의 Hyperliquid 거래소 객체를 사용하는 경우 사용 시 몇 가지 전환 작업을 수행해야 합니다. 예를 들어:

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 ((() 는 레버 설정 요청에 대한 응답을 반환합니다:

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

다른 인터페이스

이 방식은 URL을 사용해서 전송할 수 없는 복잡한 인터페이스 파라미터로 인해 사용되고 있습니다.exchange.IO함수를 호출할 때 JSON 문자열만을 매개 변수로 전송할 수 있습니다.

Hyperliquid 참조: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 , 订单量 : 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))
}

이 문서의 권한이 성공적으로 반환되었습니다.

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

  • API 대리인 지갑을 생성하고, 0xAAAA가 생성된 지갑 주소 (예제만) 로 생성될 때 해당 개인 키를 저장합니다.
  • test02 는 API 대리인 지갑의 이름이며, 생성된 이 비밀 키 쌍은 hyperliquid 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. 0xAAA. 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지표 방향을 표시합니다:futures -> spot.
  • 변수 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("测试结束")
}

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

END

위의 테스트는 최신 관리자에 기반하여 최신 관리자를 다운로드해야 Hyperliquid DEX 거래소를 지원합니다.

이 글을 읽은 모든 분들께 감사드립니다.


더 많은