4
ध्यान केंद्रित करना
1064
समर्थक

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

में बनाया: 2024-12-24 17:09:32, को अपडेट: 2024-12-26 21:41:46
comments   0
hits   233

[TOC]

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

प्रस्तावना

डिसेंट्रलाइज्ड एक्सचेंजेस (DEX) के क्रिप्टोकरेंसी ट्रेडिंग क्षेत्र में तेजी से उभार के साथ, क्वांटिटेटिव ट्रेडर्स इन प्लेटफॉर्म्स पर ऑटोमेटेड ट्रेडिंग के लिए बढ़ते जा रहे हैं। dYdX, सबसे लोकप्रिय डिसेंट्रलाइज्ड ट्रेडिंग प्लेटफॉर्म्स में से एक होने के नाते, फ्यूचर्स परपेचुअल कॉन्ट्रैक्ट्स ट्रेडिंग को सपोर्ट करते हुए शक्तिशाली ट्रेडिंग फंक्शनलिटी प्रदान करता है। इसका नवीनतम संस्करण v4 परफॉर्मेंस और यूजर अनुभव को और अधिक ऑप्टिमाइज करता है, जिसके कारण यह कई क्वांट ट्रेडर्स की पहली पसंद बन गया है।

यह आर्टिकल dYdX v4 पर क्वांटिटेटिव ट्रेडिंग प्रैक्टिसेस को कवर करेगा, जिसमें इसके API का उपयोग करके ट्रेडिंग, मार्केट डेटा प्राप्त करना और अकाउंट मैनेजमेंट शामिल हैं।

  • परीक्षण वातावरण स्विच करें
  • मार्केट सूचना क्वेरी
  • ऑर्डर सूचना, पोजीशन सूचना क्वेरी
  • ऑर्डर प्लेस करना
  • सब-अकाउंट प्रबंधन
  • नोड मेथड अनुरोध

dYdX v4 DEX

  • dYdX टेस्टनेट ऐप पेज

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

  • dYdX v3 की तरह, ट्रेडिंग से dYdX टोकन के रूप में इनाम मिलता है।

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

वॉलेट कनेक्शन, लॉगिन, कॉन्फ़िगरेशन

पूर्व का dYdX v3 प्रोटोकॉल DEX एक्सचेंज अब ऑफलाइन है, वर्तमान में dYdX v4 ऐप एड्रेस:

https://dydx.trade/trade/ETH-USD

ऐप पेज खोलने के बाद, दाएं ऊपरी कोने में वॉलेट कनेक्ट करने का बटन होता है, QR कोड स्कैन करके वॉलेट कनेक्ट करें।

यदि आप पहले टेस्टनेट वातावरण में परीक्षण करना चाहते हैं, तो निम्न का उपयोग कर सकते हैं:

https://v4.testnet.dydx.exchange/trade/ETH-USD

इसी प्रकार दाएं ऊपरी कोने में वॉलेट कनेक्ट बटन पर क्लिक करके, सिग्नेचर वेरिफिकेशन के बाद वॉलेट कनेक्ट हो जाता है। वॉलेट कनेक्ट होने के बाद स्वचालित रूप से एक dYdX v4 एड्रेस जेनरेट होता है जो ऐप पेज के दाएं ऊपरी कोने में दिखाई देता है। इस एड्रेस पर क्लिक करने पर मेनू खुलता है जिसमें डिपॉजिट, विद्ड्रॉल, ट्रांसफर जैसे ऑप्शन्स होते हैं। dYdX मुख्य नेटवर्क (प्रोडक्शन) और टेस्टनेट के बीच एक प्रमुख अंतर यह है कि टेस्टनेट पर डिपॉजिट करने पर स्वचालित रूप से 300 USDC टेस्ट फंड प्राप्त होते हैं। वास्तविक ट्रेडिंग के लिए USDC फंड डिपॉजिट करने की आवश्यकता होती है, जो कई एसेट्स और ब्लॉकचेन के माध्यम से सुगम है।

  • dYdX v4 अकाउंट एड्रेस
    dYdX v4 अकाउंट एड्रेस वॉलेट एड्रेस से व्युत्पन्न होता है, उदाहरण: dydx1xxxxxxxxxxxxxxxxxxxxq2ge5jr4nzfeljxxxx (dydx1 प्रीफिक्स)। इस एड्रेस को ब्लॉकचेन एक्सप्लोरर्स में खोजा जा सकता है।

  • मेमोनिक शब्द
    ऊपरी दाएं मेनू में “एक्सपोर्ट पासफ्रेज़” बटन से वर्तमान dYdX अकाउंट के मेमोनिक शब्द एक्सपोर्ट किए जा सकते हैं। FMZ प्लेटफ़ॉर्म पर एक्सचेंज जोड़ते समय इन मेमोनिक्स को कॉन्फ़िगर करना आवश्यक है।

मेमोनिक्स को सीधे FMZ प्लेटफ़ॉर्म पर कॉन्फ़िगर किया जा सकता है या लोकल स्टोरेज में सेव रखा जा सकता है। dYdX v4 एक्सचेंज ऑब्जेक्ट का उपयोग करते समय ये मेमोनिक्स फ़ाइल से पढ़े जाते हैं, जैसा कि आगे प्रैक्टिकल उदाहरण में दिखाया जाएगा।

मुख्य नेटवर्क और टेस्टनेट अंतर

टेस्टनेट वातावरण कुछ पहलुओं में मुख्य नेटवर्क से भिन्न है:

  • सब-अकाउंट एसेट ट्रांसफर
    मुख्य नेटवर्क में सब-अकाउंट क्लीनअप मैकेनिज्म है (जब subAccountNumber >= 128 और कोई ओपन पोजीशन न हो तो एसेट्स स्वचालित रूप से सब-अकाउंट 0 में ट्रांसफर हो जाते हैं)। टेस्टनेट में यह मैकेनिज्म लागू नहीं होता।

  • टोकन नामकरण
    मूल टोकन dYdX के नाम में अंतर: मुख्य नेटवर्क DYDX vs टेस्टनेट Dv4TNT

  • कॉन्फ़िगरेशन पैरामीटर्स
    उदाहरण के लिए:

    • मुख्य नेटवर्क: इंडेक्सर एड्रेस: https://indexer.dydx.trade
      चेन ID: dydx-mainnet-1
      REST नोड: https://dydx-dao-api.polkachu.com:443

    • टेस्टनेट:
      इंडेक्सर एड्रेस: https://indexer.v4testnet.dydx.exchange
      चेन ID: dydx-testnet-4
      REST नोड: https://dydx-testnet-api.polkachu.com

dYdX v4 प्रोटोकॉल आर्किटेक्चर

dYdX v4 प्रोटोकॉल Cosmos इकोसिस्टम पर विकसित किया गया है। इसकी ट्रेडिंग संबंधित कार्यक्षमता दो मुख्य भागों से निर्मित है:

  • मार्केट डेटा और अकाउंट सूचना के लिए इंडेक्सर
  • dYdX ब्लॉकचेन पर ऑर्डर, कैंसिलेशन और ट्रांसफर मैसेजेस

इंडेक्सर

इंडेक्सर सेवा REST और WebSocket प्रोटोकॉल प्रदान करती है।

  • REST प्रोटोकॉल
    मार्केट डेटा, अकाउंट इंफो, पोजीशन्स और ऑर्डर्स क्वेरी करने के लिए उपयोग किया जाता है। FMZ प्लेटफ़ॉर्म पर यह यूनिफ़ाइड API इंटरफेस के रूप में इंटीग्रेटेड है।

  • WebSocket प्रोटोकॉल
    FMZ प्लेटफ़ॉर्म पर Dial फ़ंक्शन का उपयोग कर WebSocket कनेक्शन बनाकर मार्केट डेटा सब्सक्राइब किया जा सकता है।

ध्यान दें: dYdX v4 इंडेक्सर में केंद्रीकृत एक्सचेंजों की तरह डेटा अपडेट में कुछ विलंब हो सकता है (जैसे ऑर्डर प्लेस करने के तुरंत बाद क्वेरी करने पर ऑर्डर न दिखाई देना)। ऐसे केस में ऑपरेशन्स के बाद Sleep(n) का उपयोग कर कुछ सेकंड प्रतीक्षा करने की सलाह दी जाती है।

WebSocket API का उपयोग कर ऑर्डर बुक सब्सक्रिप्शन का उदाहरण:

function dYdXIndexerWSconnManager(streamingPoint) {
    var self = {}
    self.base = streamingPoint
    self.wsThread = null

    // सब्सक्राइब
    self.CreateWsThread = function (msgSubscribe) {
        self.wsThread = threading.Thread(function (streamingPoint, msgSubscribe) {
            // ऑर्डर बुक
            var orderBook = null 

            // ऑर्डरबुक अपडेट
            var updateOrderbook = function(orderbook, update) {
                // बिड्स अद्यतन करें
                if (update.bids) {
                    update.bids.forEach(([price, size]) => {
                        const priceFloat = parseFloat(price)
                        const sizeFloat = parseFloat(size)

                        if (sizeFloat === 0) {
                            // प्राइस price वाली बिड हटाएं
orderbook.bids = orderbook.bids.filter(bid => parseFloat(bid.price) !== priceFloat)
                        } else {
                            // अपडेट या नई बोली जोड़ें
                            orderbook.bids = orderbook.bids.filter(bid => parseFloat(bid.price) !== priceFloat)
                            orderbook.bids.push({price: price, size: size})
                            // कीमत के अनुसार अवरोही क्रम में सॉर्ट करें
                            orderbook.bids.sort((a, b) => parseFloat(b.price) - parseFloat(a.price))
                        }
                    })
                }

                // asks अपडेट करें
                if (update.asks) {
                    update.asks.forEach(([price, size]) => {
                        const priceFloat = parseFloat(price)
                        const sizeFloat = parseFloat(size)

                        if (sizeFloat === 0) {
                            // निर्दिष्ट कीमत वाली आफ़र हटाएं
                            orderbook.asks = orderbook.asks.filter(ask => parseFloat(ask.price) !== priceFloat)
                        } else {
                            // अपडेट या नई आफ़र जोड़ें
                            orderbook.asks = orderbook.asks.filter(ask => parseFloat(ask.price) !== priceFloat)
                            orderbook.asks.push({price: price, size: size})
                            // कीमत के अनुसार आरोही क्रम में सॉर्ट करें
                            orderbook.asks.sort((a, b) => parseFloat(a.price) - parseFloat(b.price))
                        }
                    })
                }

                return orderbook
            }

            var conn = Dial(`${streamingPoint}|reconnect=true&payload=${JSON.stringify(msgSubscribe)}`)
            if (!conn) {
                Log("createWsThread failed.")
                return
            }
            while (true) {
                var data = conn.read()
                if (data) {
                    var msg = null                    
                    try {
                        msg = JSON.parse(data)
                        if (msg["type"] == "subscribed") {
                            orderBook = msg["contents"]
                            threading.currentThread().postMessage(orderBook)
                        } else if (msg["type"] == "channel_data") {
                            orderBook = updateOrderbook(orderBook, msg["contents"])
                            threading.currentThread().postMessage(orderBook)
                        }
                    } catch (e) {
                        Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
                    }
                }
            }
        }, streamingPoint, msgSubscribe)
    }

    // मैसेज मॉनिटरिंग
    self.Peek = function () {
        return self.wsThread.peekMessage()
    }

    return self
}

function main() {
    // रियल : wss://indexer.dydx.trade/v4/ws
    // सिम्युलेट : wss://indexer.v4testnet.dydx.exchange/v4/ws

    var symbol = "ETH-USD"
    var manager = dYdXIndexerWSconnManager("wss://indexer.dydx.trade/v4/ws")
मैनेजर.क्रिएटWsथ्रेड({"type": "subscribe", "channel": "v4_orderbook", "id": symbol})

    var redCode = "#FF0000"
    var greenCode = "#006400"
    while (true) {
        var depthTbl = {type: "table", title: symbol + " / depth", cols: ["level", "price", "amount"], rows: []}
        var depth = manager.पीक()
        if (depth) {
            for (var i = 0; i < depth.asks.length; i++) {
                if (i > 9) {
                    break
                }
                var ask = depth.asks[i]
                depthTbl.rows.push(["asks " + (i + 1) + greenCode, ask.price + greenCode, ask.size + greenCode])  // बोली स्तरों को हरे रंग में प्रदर्शित
            }
            depthTbl.rows.reverse()

            for (var i = 0; i < depth.bids.length; i++) {
                if (i > 9) {
                    break
                }
                var bid = depth.bids[i]
                depthTbl.rows.push(["bids " + (i + 1) + redCode, bid.price + redCode, bid.size + redCode])  // प्रस्ताव स्तरों को लाल रंग में प्रदर्शित
            }
        }
        लॉगस्टेटस(_D(), "\n`" + JSON.stringify(depthTbl) + "`")  // रियल-टाइम डेप्थ टेबल अपडेट
    }
}

dYdX चेन नोड संदेश प्रसारण

ट्रेडिंग में सबसे अधिक उपयोग होने वाले संदेश हैं: ऑर्डर संदेश, ऑर्डर कैंसिलेशन संदेश, और फंड ट्रांसफर संदेश।

  • ऑर्डर संदेश सारांश

    {
    "@type": "/dydxprotocol.clob.MsgPlaceOrder",
    "order": {
      "orderId": {
        "subaccountId": {
          "owner": "xxx"
        },
        "clientId": xxx,
        "orderFlags": 64,
        "clobPairId": 1
      },
      "side": "SIDE_BUY",
      "quantums": "2000000",
      "subticks": "3500000000",
      "goodTilBlockTime": 1742295981
    }
    }
    
    • लिमिट ऑर्डर:
      FMZ प्लेटफॉर्म पर एनकैप्सुलेटेड ऑर्डर फंक्शन में, लिमिट ऑर्डर के लिए orderFlags मान: ORDER_FLAGS_LONG_TERM = 64 # लॉन्ग-टर्म ऑर्डर। dydx v4 प्रोटोकॉल प्रतिबंधों के अनुसार, अधिकतम ऑर्डर वैधता अवधि (90 दिन) का उपयोग किया जाता है।

    • मार्केट ऑर्डर:
      FMZ प्लेटफॉर्म पर मार्केट ऑर्डर के लिए orderFlags मान: ORDER_FLAGS_SHORT_TERM = 0 # शॉर्ट-टर्म ऑर्डर। dydx v4 प्रोटोकॉल अनुशंसा:

    // सेल के लिए ओरेकल प्राइस - 5%, बाय के लिए ओरेकल प्राइस + 5% सेट करें

    वास्तविक मार्केट ऑर्डर न होने के कारण, ओरेकल प्राइस के आधार पर 5% स्लिपेज जोड़ा जाता है। शॉर्ट-टर्म ऑर्डर की वैधता ब्लॉक हाइट पर आधारित होती है, वर्तमान ब्लॉक +10 ब्लॉक्स के बाद एक्सपायर।

    • ऑर्डर आईडी:
      चेन पर सीधे ऑर्डर एक्जीक्यूशन के कारण, इंडेक्सर-जनरेटेड ऑर्डर आईडी उपलब्ध नहीं होती। यूनिक ऑर्डर आईडी सुनिश्चित करने के लिए निम्नलिखित कॉम्पोनेंट्स (अंग्रेजी कॉमा सेपरेटेड) का उपयोग किया जाता है:

      • ट्रेडिंग पेयर
      • dydx वर्तमान खाता पता
      • सबअकाउंट नंबर (subaccountNumber)
      • clientId (रैंडम जनरेटेड)
      • clobPairId (इंस्ट्रूमेंट आईडी)
      • orderFlags
      • goodTilData (मिलीसेकंड)
  • ऑर्डर कैंसिलेशन संदेश

    {
    "@type": "/dydxprotocol.clob.MsgCancelOrder",
    "orderId": {
      "subaccountId": {
        "owner": "xxx"
      },
      "clientId": 2585872024,
      "orderFlags": 64,
      "clobPairId": 1
    },
    "goodTilBlockTime": 1742295981
    }
    

FMZ प्लेटफॉर्म के ऑर्डर इंटरफेस द्वारा रिटर्न की गई ऑर्डर आईडी पास करें।

  • फंड ट्रांसफर संदेश
  {
    "@type": "/dydxprotocol.sending.MsgCreateTransfer",
    "transfer": {
      "sender": {
        "owner": "xxx"
      },
      "recipient": {
        "owner": "xxx",
        "number": 128
      },
      "amount": "10000000"
    }
  }

dydx v4 पर subAccountNumber 0 प्राथमिक सबअकाउंट है। subAccountNumber ≥128 वाले आईडी आइसोलेटेड मार्जिन ट्रेडिंग के लिए उपयोग होते हैं, जिनके लिए न्यूनतम 20 USDC आवश्यक है।
उदाहरण: subAccountNumber 0 -> 128 या 128 -> 0 ट्रांसफर। गैस फी USDC या dydx टोकन में भुगतान कर सकते हैं।

FMZ प्लेटफ़ॉर्म पर dYdX v4 का व्यावहारिक अनुप्रयोग

उपरोक्त सामग्री ने कुछ एनकैप्सुलेशन विवरणों को स्पष्ट किया है। अब हम वास्तविक उपयोग को प्रैक्टिस में लाएंगे। यहाँ हम dYdX v4 टेस्टनेट का प्रदर्शन करेंगे जो मेननेट के समान है और स्वचालित फ़ॉसिट द्वारा टेस्ट संपत्ति प्राप्त की जा सकती है। होस्टिंग नोड डिप्लॉयमेंट प्रक्रिया को दोहराया नहीं जाएगा, FMZ पर लाइव टेस्ट बनाएं।

1. कॉन्फ़िगरेशन

क्रिप्टो वॉलेट (यहाँ imToken वॉलेट) का उपयोग करके dYdX v4 ऐप से सफलतापूर्वक कनेक्ट होने के बाद, टेस्ट संपत्ति प्राप्त करें और वर्तमान dYdX v4 अकाउंट (वॉलेट से व्युत्पन्न) का मेमोनिक सीड एक्सपोर्ट करें।

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

FMZ प्लेटफ़ॉर्म पर मेमोनिक सीड कॉन्फ़िगर करें। यहाँ हम लोकल फ़ाइल मेथड का उपयोग करेंगे (सीधे टेक्स्ट भी डाल सकते हैं, प्लेटफ़ॉर्म पर कॉन्फ़िगर होने पर मेमोनिक एन्क्रिप्टेड होता है)।

  • मेमोनिक फ़ाइल: mnemonic.txt

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

होस्टिंग नोड डायरेक्टरी के अंदर स्ट्रैटेजी ID फ़ोल्डर में रखें (अन्य डायरेक्टरी में भी रख सकते हैं, कॉन्फ़िगरेशन में पूरा पथ लिखें)।

  • FMZ पर एक्सचेंज कॉन्फ़िगर करें

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

मेमोनिक एडिट बॉक्स में भरें: file:///mnemonic.txt, वास्तविक पथ: होस्टिंग नोड डायरेक्टरी/logs/storage/594291.

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

2. dydx v4 टेस्टनेट पर स्विच करें

function main() {
    // टेस्टनेट चेन का इंडेक्सर पता सेट करें
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // टेस्टनेट चेन का ChainId सेट करें 
    exchange.IO("chainId", "dydx-testnet-4")

    // टेस्टनेट चेन का REST नोड पता सेट करें
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    // अकाउंट जानकारी पढ़ने का टेस्ट
    Log(exchange.GetAccount()) 
}

टेस्टनेट अकाउंट जानकारी प्राप्त हुई:

{
	"Info": {
		"subaccounts": [{
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"subaccountNumber": 0,
			"equity": "300.386228",
			"latestProcessedBlockHeight": "28193227",
			"freeCollateral": "300.386228",
			"openPerpetualPositions": {},
			"assetPositions": {
				"USDC": {
					"subaccountNumber": 0,
					"size": "300.386228",
					"symbol": "USDC",
					"side": "LONG",
					"assetId": "0"
				}
			},
			"marginEnabled": true,
			"updatedAtHeight": "28063818"
		}, {
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"equity": "0",
			"freeCollateral": "0",
			"openPerpetualPositions": {},
			"marginEnabled": true,
			"subaccountNumber": 1,
			"assetPositions": {},
			"updatedAtHeight": "27770289",
			"latestProcessedBlockHeight": "28193227"
		}, {
			"equity": "0",
			"openPerpetualPositions": {},
			"marginEnabled": true,
			"updatedAtHeight": "28063818",
			"latestProcessedBlockHeight": "28193227",
			"subaccountNumber": 128,
			"freeCollateral": "0",
			"assetPositions": {},
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez"
		}],
		"totalTradingRewards": "0.021744179376211564"
	},
	"Stocks": 0,
	"FrozenStocks": 0,
	"Balance": 300.386228,
	"FrozenBalance": 0,
	"Equity": 300.386228,
	"UPnL": 0
}

3. मार्केट सूचना क्वेरी

टेस्टनेट पर स्विच नहीं किया गया, मेननेट से टेस्ट करें

function main() {
    var markets = exchange.GetMarkets()
    if (!markets) {
        throw "मार्केट डेटा प्राप्त करने में त्रुटि"
    }
    var tbl = {type: "table", title: "टेस्ट मार्केट्स", cols: ["कुंजी", "सिंबल", "बेस एसेट", "क्वोट एसेट", "टिक साइज़", "अमाउंट साइज़", "प्राइस प्रिसिजन", "अमाउंट प्रिसिजन", "न्यूनतम मात्रा", "अधिकतम मात्रा", "न्यूनतम नोशनल", "अधिकतम नोशनल", "CtVal"], 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])
    }
### 4. ऑर्डर प्लेस करना

```js
function main() {
    // टेस्टनेट चेन के इंडेक्सर एड्रेस को बदलें
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // टेस्टनेट चेन का ChainId सेट करें
    exchange.IO("chainId", "dydx-testnet-4")

    // टेस्टनेट चेन का REST नोड एड्रेस बदलें
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    // लिमिट ऑर्डर - ऑर्डर प्लेस करें
    var idSell = exchange.CreateOrder("ETH_USD.swap", "sell", 4000, 0.002)
    var idBuy = exchange.CreateOrder("ETH_USD.swap", "buy", 3000, 0.003)

    // मार्केट ऑर्डर
    var idMarket = exchange.CreateOrder("ETH_USD.swap", "buy", -1, 0.01)

    Log("idSell:", idSell)
    Log("idBuy:", idBuy)
    Log("idMarket:", idMarket)
}

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

dYdX v4 ऐप पेज:

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

5. ऑर्डर जानकारी

टेस्टनेट पर पहले से प्लेस किए गए दो ऑर्डर्स के साथ, वर्तमान पेंडिंग ऑर्डर्स प्राप्त करने और ऑर्डर्स रद्द करने का परीक्षण करें।

function main() {    
    // टेस्टनेट चेन के इंडेक्सर एड्रेस को बदलें
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // टेस्टनेट चेन का ChainId सेट करें
    exchange.IO("chainId", "dydx-testnet-4")

    // टेस्टनेट चेन का REST नोड एड्रेस बदलें
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    var orders = exchange.GetOrders()
    Log("orders:", orders)
    for (var order of orders) {
        exchange.CancelOrder(order.Id, order)
        Sleep(2000)
    }

    var tbl = {type: "table", title: "test GetOrders", cols: ["Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
    for (var order of orders) {
        tbl.rows.push([order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
    }
    LogStatus("`" + JSON.stringify(tbl) +  "`")
}

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

6. पोजीशन जानकारी क्वेरी

function main() {
    // टेस्टनेट चेन के इंडेक्सर एड्रेस को बदलें
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // टेस्टनेट चेन का ChainId सेट करें
    exchange.IO("chainId", "dydx-testnet-4")

    // टेस्टनेट चेन का REST नोड एड्रेस बदलें
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    var p1 = exchange.GetPositions("USD.swap")
    var p2 = exchange.GetPositions("ETH_USD.swap")
    var p3 = exchange.GetPositions()
    var p4 = exchange.GetPositions("SOL_USD.swap")

    var tbls = []
    for (var positions of [p1, p2, p3, p4]) {
        var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []}
        for (var p of positions) {
            tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel])
        } 
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

7. सब-अकाउंट प्रबंधन

function main() {
    // टेस्टनेट चेन के इंडेक्सर एड्रेस को बदलें
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // टेस्टनेट चेन का ChainId सेट करें
    exchange.IO("chainId", "dydx-testnet-4")

    // टेस्टनेट चेन का REST नोड एड्रेस बदलें
exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    // subAccountNumber 0 से 128: 20 USDC, Gas Fee adv4tnt अर्थात dydx टोकन
    var ret = exchange.IO("transferUSDCToSubaccount", 0, 128, "adv4tnt", 20)  
    Log("ret:", ret)

    // सब-अकाउंट नंबर 128 पर स्विच करें, अकाउंट जानकारी पढ़ने के लिए चेक करें
    exchange.IO("subAccountNumber", 128)

    var account = exchange.GetAccount()
    Log("account:", account)
}

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

सब-अकाउंट नंबर 128 पर स्विच करने के बाद GetAccount द्वारा प्राप्त डेटा:

{
	"Info": {
		"subaccounts": [{
			"subaccountNumber": 0,
			"assetPositions": {
				"USDC": {
					"size": "245.696892",
					"symbol": "USDC",
					"side": "LONG",
					"assetId": "0",
					"subaccountNumber": 0
				}
			},
			"updatedAtHeight": "28194977",
			"latestProcessedBlockHeight": "28195008",
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"freeCollateral": "279.5022142346",
			"openPerpetualPositions": {
				"ETH-USD": {
					"closedAt": null,
					"size": "0.01",
					"maxSize": "0.01",
					"exitPrice": null,
					"unrealizedPnl": "-0.17677323",
					"subaccountNumber": 0,
					"status": "OPEN",
					"createdAt": "2024-12-26T03:36:09.264Z",
					"createdAtHeight": "28194494",
					"sumClose": "0",
					"netFunding": "0",
					"market": "ETH-USD",
					"side": "LONG",
					"entryPrice": "3467.2",
					"realizedPnl": "0",
					"sumOpen": "0.01"
				}
			},
			"marginEnabled": true,
			"equity": "280.19211877"
		}, {
			"openPerpetualPositions": {},
			"assetPositions": {},
			"marginEnabled": true,
			"latestProcessedBlockHeight": "28195008",
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"subaccountNumber": 1,
			"equity": "0",
			"freeCollateral": "0",
			"updatedAtHeight": "27770289"
		}, {
			"openPerpetualPositions": {},
			"updatedAtHeight": "28194977",
			"latestProcessedBlockHeight": "28195008",
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"subaccountNumber": 128,
			"assetPositions": {
				"USDC": {
					"assetId": "0",
					"subaccountNumber": 128,
					"size": "20",
					"symbol": "USDC",
					"side": "LONG"
				}
			},
			"marginEnabled": true,
			"equity": "20",
			"freeCollateral": "20"
		}],
		"totalTradingRewards": "0.021886899964446858"
	},
	"Stocks": 0,
	"FrozenStocks": 0,
	"Balance": 20,
	"FrozenBalance": 0,
	"Equity": 20,
	"UPnL": 0
}

subAccountNumber 128 वाले सब-अकाउंट में 20 USDC ट्रांसफर किए गए हैं, यह देखा जा सकता है।

8. TxHash प्राप्त करें, REST नोड इंटरफ़ेस कॉल करें

ऑर्डर के आधार पर TxHash प्राप्त करें, REST नोड इंटरफ़ेस कॉल करने की विधि का परीक्षण करें

ऑर्डर का TxHash कैसे प्राप्त करें: एक्सचेंज ऑब्जेक्ट dydx TxHash को कैश करता है, ऑर्डर ID का उपयोग करके क्वेरी की जा सकती है। हालाँकि, रणनीति बंद होने के बाद, कैश किए गए ऑर्डर tx हैश मैपिंग साफ़ हो जाएगी।

function main() {
    // टेस्ट नेटवर्क के इंडेक्सर पते पर स्विच करें
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // टेस्ट नेटवर्क का ChainId सेट करें
    exchange.IO("chainId", "dydx-testnet-4")

    // टेस्ट नेटवर्क के REST नोड पते पर स्विच करें
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    var id1 = exchange.CreateOrder("ETH_USD.swap", "buy", 3000, 0.002)
    var hash1 = exchange.IO("getTxHash", id1)
    Log("id1:", id1, "hash1:", hash1)
var id2 = exchange.CreateOrder("ETH_USD.swap", "buy", 2900, 0.003)
    var hash2 = exchange.IO("getTxHash", id2)
    Log("id2:", id2, "hash2:", hash2)
    
    // मैपिंग टेबल को रीसेट करने के लिए उपयोग करें: exchange.IO("getTxHash", "")
    var arr = [hash1, hash2]
    
    Sleep(10000)
    for (var txHash of arr) {
        // GET https://docs.cosmos.network   /cosmos/tx/v1beta1/txs/{hash}
        var ret = exchange.IO("api", "GET", "/cosmos/tx/v1beta1/txs/" + txHash)
        Log("ret:", ret)
    }
}

DEX एक्सचेंज क्वांटिटेटिव प्रैक्टिस (1) - dYdX v4 उपयोग गाइड

TxHash के माध्यम से प्राप्त संदेश:

var ret = exchange.IO(“api”, “GET”, “/cosmos/tx/v1beta1/txs/” + txHash)

सामग्री बहुत लंबी है, प्रदर्शन के लिए आंशिक अंश:

{
	"tx_response": {
		"codespace": "",
		"code": 0,
		"logs": [],
		"info": "",
		"height": "28195603",
		"data": "xxx",
		"raw_log": "",
		"gas_wanted": "-1",
		"gas_used": "0",
		"tx": {
			"@type": "/cosmos.tx.v1beta1.Tx",
			"body": {
				"messages": [{
					"@type": "/dydxprotocol.clob.MsgPlaceOrder",
					"order": {
						"good_til_block_time": 1742961542,
						"condition_type": "CONDITION_TYPE_UNSPECIFIED",
						"order_id": {
							"clob_pair_id": 1,
							"subaccount_id": {
								"owner": "xxx",
								"number": 0
							},
							"client_id": 2999181974,
							"order_flags": 64
						},
						"side": "SIDE_BUY",
						"quantums": "3000000",
						"client_metadata": 0,
						"conditional_order_trigger_subticks": "0",
						"subticks": "2900000000",
						"time_in_force": "TIME_IN_FORCE_UNSPECIFIED",
						"reduce_only": false
					}
				}],
				"memo": "FMZ",
				"timeout_height": "0",
				"extension_options": [],
				"non_critical_extension_options": []
			},
      ...

समाप्त

उपरोक्त परीक्षण नवीनतम होस्ट संस्करण पर आधारित है, dYdX v4 DEX समर्थन के लिए नवीनतम होस्ट डाउनलोड करना आवश्यक है

समर्थन के लिए धन्यवाद, आपके पठन के लिए आभार।