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 ہو اور اس ID والے سب اکاؤنٹ میں کوئی پوزیشن نہ ہو تو اثاثے خودکار طور پر subAccountNumber 0 والے اکاؤنٹ میں منتقل ہو جاتے ہیں۔ ٹیسٹنگ کے دوران دیکھا گیا کہ ٹیسٹ نیٹ پر یہ میکانزم موجود نہیں (یا ٹرگرنگ کنڈیشنز مختلف ہیں)۔

  • کچھ ٹوکن نام۔ نیٹیو ٹوکن dydx کے نام مختلف ہیں: مین نیٹ پر DYDX، ٹیسٹ نیٹ پر Dv4TNT

  • ایڈریس کنفیگریشنز، جیسے چین ID، نوڈ ایڈریس، انڈیکسر ایڈریس وغیرہ۔ نوڈز اور کنفیگریشنز کی مثالیں:

    • مین نیٹ: انڈیکسر ایڈریس: 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 v4 DEX سسٹم کے ٹریڈنگ سے متعلقہ حصے دو اہم اجزاء پر مشتمل ہیں:

  • مارکیٹ ڈیٹا، اکاؤنٹ انفارمیشن کیوری کے لیے انڈیکسر سروس
  • dydx بلاکچین پر آرڈرز، کینسلیشنز، ٹرانسفرز کے میسجز

انڈیکسر

انڈیکسر سروس REST اور WebSocket پروٹوکولز سپورٹ کرتی ہے۔

  • REST پروٹوکول REST انٹرفیس مارکیٹ ڈیٹا، اکاؤنٹ انفارمیشن، پوزیشنز، آرڈرز کیوری کرنے کے لیے استعمال ہوتا ہے۔ FMZ پلیٹ فارم پر یہ یونیفائیڈ API انٹرفیس کے طور پر ایمپلیمنٹ کیا گیا ہے۔

  • WebSocket پروٹوکول FMZ پلیٹ فارم پر Dial فنکشن کا استعمال کرتے ہوئے WebSocket کنیکشن بنائی جا سکتی ہے، مارکیٹ ڈیٹا وغیرہ سبسکرائب کیا جا سکتا ہے۔

نوٹ کریں کہ dydx v4 کا انڈیکسر بھی سینٹرلائزڈ ایکسچینجز کی طرح ڈیٹا اپڈیٹس میں تھوڑی تاخیر رکھتا ہے۔ مثال کے طور پر کبھی کبھار آرڈر پلیس کرنے کے فوراً بعد کیوری کرنے پر آرڈر نظر نہیں آتا۔ تجویز ہے کہ ایسے آپریشنز کے بعد Sleep(n) کا استعمال کر کے چند سیکنڈز انتظار کریں۔

ذیل میں Dial فنکشن کا استعمال کرتے ہوئے WebSocket کنیکشن بنانے اور آرڈر بک ڈیٹا سبسکرائب کرنے کی مثال دی گئی ہے:

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) {
                            // قیمت پر موجود بڈز کو ڈیلیٹ کریں
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))
                        }
                    })
                }

                // اَسکز کو اپ ڈیٹ کریں
                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")
مینیجر.CreateWsThread({"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.Peek()
        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])
            }
        }
        LogStatus(_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
    }
    }
    
    • حد آرڈر (Limit Order):
      FMZ پلیٹ فارم پر انکیپسولیٹڈ آرڈر فنکشن میں، limit order کے لیے orderFlags کی ویلیو:

    ORDER_FLAGS_LONG_TERM = 64 # طویل مدتی آرڈر
    dydx v4 پروٹوکول کی پابندیوں کے مطابق، زیادہ سے زیادہ آرڈر ایکسپائری (90 دن) استعمال کی گئی ہے۔
    - مارکیٹ آرڈر:
    FMZ پلیٹ فارم پر انکیپسولیٹڈ آرڈر فنکشن میں، market order کے لیے orderFlags کی ویلیو:
    ORDER_FLAGS_SHORT_TERM = 0 # قلیل مدتی آرڈر
    dydx v4 پروٹوکول کی سفارش کے مطابق:

    // Recommend set to oracle price - 5% or lower for SELL, oracle price + 5% for BUY

    اصلی مارکیٹ آرڈر نہ ہونے کی وجہ سے، اوریکل قیمت کو بنیاد بنا کر ±5% سلپج شامل کیا جاتا ہے۔ short-term order کی ایکسپائری بھی مختلف ہے، جو بلاک ہائٹ پر مبنی ہے (موجودہ بلاک + 10 بلاکس)۔

    • آرڈر ID:
      چین پر براہ راست آرڈر پلیسمنٹ کی وجہ سے، میسیج براڈکاسٹ کے بعد انڈیکسر جنریٹڈ ID دستیاب نہیں ہوتی۔ منفرد ID کو یقینی بنانے کے لیے، آرڈر ID درج ذیل معلومات سے تشکیل دی جاتی ہے (انگریزی کوما سے علیحدہ):
      • ٹریڈنگ پیئر
      • dydx اکاؤنٹ ایڈریس
      • سب اکاؤنٹ نمبر (subaccountNumber)
      • clientId (رینڈم جنریٹڈ)
      • clobPairId (ٹریڈنگ انسٹرومنٹ ID)
      • orderFlags
      • goodTilData (ملی سیکنڈز)
  • آرڈر کینسل میسیج سمیری

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

FMZ پلیٹ فارم کے آرڈر انٹرفیس سے واپس کی گئی آرڈر ID درکار ہوتی ہے۔

  • فنڈ ٹرانسفر میسیج سمیری
    
    {
    "@type": "/dydxprotocol.sending.MsgCreateTransfer",
    "transfer": {
      "sender": {
        "owner": "xxx"
      },
      "recipient": {
        "owner": "xxx",
        "number": 128
      },
      "amount": "10000000"
    }
    }
    

dydx v4 ایڈریسز کے تحت متعدد سب اکاؤنٹس بنائے جا سکتے ہیں۔ subAccountNumber=0 پہلا آٹو-جنریٹڈ سب اکاؤنٹ ہے۔ subAccountNumber≥128 والے IDs عموماً isolated positions کے لیے استعمال ہوتے ہیں، جن کے لیے کم از کم 20 USDC کی ضرورت ہوتی ہے۔
مثال: subAccountNumber 0 → 128 یا 128 → 0 ٹرانسفرز۔ ہر ٹرانسفر پر گیس فیس (USDC/dydx ٹوکن) لاگو ہوتی ہے۔

FMZ پلیٹ فارم پر dYdX v4 کی عملی مشق

مندرجہ بالا مواد نے کچھ انکیپسولیشن تفصیلات کی وضاحت کی ہے۔ اب ہم عملی استعمال کا تجربہ کریں گے۔ یہاں dYdX v4 ٹیسٹ نیٹ ورک کو ڈیمو کے لیے استعمال کیا گیا ہے۔ ٹیسٹ نیٹ ورک مین نیٹ ورک کے ساتھ مطابقت رکھتا ہے اور خودکار faucet کے ذریعے ٹیسٹ اثاثے حاصل کیے جا سکتے ہیں۔ ہوسٹ کی ڈیپلائمنٹ آپریشنز کو دہرایا نہیں جائے گا، FMZ پر حقیقی ٹیسٹ بنائیں۔

1۔ کنفیگریشن

کریپٹو کرنسی والیٹ کو کامیابی سے dYdX v4 ایپ سے منسلک کرنے کے بعد (میں نے imToken والیٹ استعمال کیا)، ٹیسٹ اثاثے وصول کریں، پھر موجودہ 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 "get markets error"
    }
    var tbl = {type: "table", title: "test markets", cols: ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "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: "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: "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")

    // سب اکاؤنٹ نمبر 0 -> 128 : 20 USDC ، گیس فیس 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
}

سب اکاؤنٹ نمبر 128 میں 20 USDC کی منتقلی دیکھی جا سکتی ہے۔

8、TxHash حاصل کریں، REST نوڈ API کال کریں

آرڈر کے مطابق 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)

مواد بہت طویل ہے، جزوی نمائش:

”`JSON
{ “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”: []
},

اختتام

مندرجہ بالا ٹیسٹ، تازہ ترین Hosted Trading Platform پر مبنی ہے۔ dYdX v4 DEX کی سپورٹ کیلئے نئے ورژن ڈاؤن لوڈ کرنا ضروری ہے

تعاون کا شکریہ، آپ کے مطالعہ کا شکریہ۔