avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

DEX ایکسچینج مقداری مشق (4) - WOOFi / EdgeX حکمت عملی تک رسائی ٹیسٹ

میں تخلیق کیا: 2025-04-10 15:36:06, تازہ کاری: 2025-04-11 13:35:33
comments   0
hits   674

DEX ایکسچینج مقداری مشق (4) - WOOFi / EdgeX حکمت عملی تک رسائی ٹیسٹ

پچھلے کچھ مضامین میں، ہم نے مرکزی دھارے کے DEXs تک رسائی پر تبادلہ خیال کیا ہے، اور یہ مضمون اصل استعمال پر توجہ مرکوز کرے گا اور حقیقی حکمت عملی کی تعیناتی کے ٹیسٹ کرائے گا۔ FMZ پلیٹ فارم نے حال ہی میں WOOFi اور EdgeX وکندریقرت تبادلے کے لیے تعاون شامل کیا ہے۔ اس مضمون میں، ہم ان دو تبادلوں پر کچھ آسان تدریسی حکمت عملیوں کو چلانے کی مشق کریں گے۔

WOOFi

اپنے بٹوے کو WOOFi پر جوڑیں، اور پھر API KEY صفحہ پر، آپ API کلیدی معلومات دیکھ سکتے ہیں، اسے کاپی اور پیسٹ کر سکتے ہیں اور اسے FMZ پر کنفیگر کر سکتے ہیں۔

FMZ کا تازہ ترین میزبان استعمال کریں، جو پہلے سے ہی WOOFi DEX اور EdgeX DEX کو سپورٹ کرتا ہے، ڈاؤن لوڈ اور تعیناتی کے بعد۔ صفحہ پر ایکسچینج آبجیکٹ کو ترتیب دیں: https://www.fmz.com/m/platforms/add، اور WOOFi کی AccountId، AccessKey، اور SecretKey کو ترتیب دیں۔

اس ٹیسٹ میں، ہم نے استعمال کیا aبنیادی مارکیٹ بنانے کی حکمت عملی پروٹو ٹائپمارکیٹ کے اتار چڑھاؤ کے اشارے (ATR) کے ساتھ مل کر، زیر التواء آرڈرز کے درمیان وقفہ کو متحرک طور پر شمار کیا جاتا ہے، اور پوزیشنوں کی ذہین شناخت اور بند ہونے والی پوزیشنوں پر ترجیح کے ساتھ آرڈر پلیسنگ منطق کا ادراک کیا جاتا ہے۔ حکمت عملی ہر دور میں آرڈر بک کو تازہ کرتی ہے، گہرائی اور پوزیشن کی معلومات کو دوبارہ حاصل کرتی ہے، اور مقررہ قیمت کے وقفے اور آرڈر کی مقدار کے مطابق آرڈر دیتی ہے۔ پورے عمل کا احاطہ کرتا ہے:

  • ریئل ٹائم مارکیٹ کی معلومات نکالنا اور اشارے کا تجزیہ؛
  • طویل اور مختصر دونوں سمتوں میں زیر التواء آرڈرز کا منطقی کنٹرول؛
  • اختتامی اور افتتاحی پوزیشنوں کا فیصلہ اور موڑ؛
  • عہدوں اور اکاؤنٹ کی حیثیت کا بصری آؤٹ پٹ۔

اس حکمت عملی کے ذریعے، ہم WOOFi پر حقیقی لین دین کی کارکردگی، آرڈر میں تاخیر، اور مماثلت کے تجربے کا مشاہدہ کر سکتے ہیں، اور مزید پیچیدہ حکمت عملیوں کے بعد کے ڈیزائن کی بنیاد رکھ سکتے ہیں۔

ہم WOOFi کا ٹیسٹ ماحول اور ٹیسٹ نیٹ ورک استعمال کرتے ہیں: Arbitrum Sepolia۔

exchange.SetBase(”https://testnet-api.orderly.org”)

WOOFi ٹیسٹ نیٹ ورک پر ایک ٹونٹی ہے جو آپ کو آسانی سے جانچ کے لیے USDC حاصل کرنے کی اجازت دیتی ہے۔

حکمت عملی کوڈ:

function createOrders(e, symbol, side, ordersNum, beginPrice, firstAmount, spacing, pos) {
    if (side == "buy" || side == "closesell") {
        if (spacing > 0) {
            throw "spacing error"
        }
    } else if (side == "sell" || side == "closebuy") {
        if (spacing < 0) {
            throw "spacing error"
        }
    } else {
        throw "side error"
    }
    
    var holdAmount = 0
    if (pos) {
        holdAmount = pos.Amount
    }

    var amount = firstAmount
    for (var i = 0 ; i < ordersNum ; i++) {
        var id = null 
        amount = amount * 2
        var price = beginPrice + i * spacing

        if (price <= 0 || amount <= 0) {
            Log("continue loop:", price, amount, "#FF0000")
            continue 
        }

        if (holdAmount - amount >= 0) {
            id = e.CreateOrder(symbol, side == "buy" ? "closesell" : "closebuy", price, holdAmount)
            holdAmount = 0
        } else {
            id = e.CreateOrder(symbol, side, price, amount)
        }

        Sleep(100)
    }
}

function cancelAll(e, symbol) {
    while (true) {
        var orders = _C(e.GetOrders, symbol)
        var sideOrders = []
        for (var o of orders) {
            sideOrders.push(o)
        }
        if (sideOrders.length == 0) {
            break
        }

        for (var o of sideOrders) {
            e.CancelOrder(o.Id, o)
        }

        Sleep(500)
    }
}

function main() {
    LogReset(1)
    LogProfitReset()
    exchange.SetBase("https://testnet-api.orderly.org")

    // 参数
    var symbol = "ETH_USDC.swap"
    var ordersNum = 5
    var orderAmount = 0.01
    var priceSpace = 0

    // 初始化
    exchange.SetPrecision(2, 3)    
    var msg = []
    var buyOrdersNum = ordersNum
    var sellOrdersNum = ordersNum

    while (true) {
        cancelAll(exchange, symbol)

        var r = _C(exchange.GetRecords, symbol, 60 * 5)
        var art = TA.ATR(r, 20)
        priceSpace = art[art.length - 1]
        var pos = _C(exchange.GetPositions, symbol)        

        // depth
        var depth = _C(exchange.GetDepth, symbol)
        if (depth.Bids.length == 0 || depth.Asks.length == 0) {
            msg.push("invalid depth")
        } else {
            var bid1Price = depth.Bids[0].Price
            var ask1Price = depth.Asks[0].Price

            var longPos = null
            var shortPos = null
            for (var p of pos) {
                if (p.Type == PD_LONG) {
                    longPos = p
                } else if (p.Type == PD_SHORT) {
                    shortPos = p
                }
            }

            // long
            createOrders(exchange, symbol, "buy", buyOrdersNum, bid1Price, orderAmount, -priceSpace, shortPos)
            // short
            createOrders(exchange, symbol, "sell", sellOrdersNum, ask1Price, orderAmount, priceSpace, longPos)
        }
        
        var acc = _C(exchange.GetAccount)
        var orders = _C(exchange.GetOrders, symbol)
        LogProfit(acc.Equity, "&")

        var posTbl = {"type": "table", "title": "pos", "cols": ["Symbol", "Type", "Price", "Amount"], "rows": []}
        for (var p of pos) {
            posTbl["rows"].push([p.Symbol, p.Type == PD_LONG ? "多" : "空", p.Price, p.Amount])
        }

        var ordersTbl = {"type": "table", "title": "orders", "cols": ["Symbol", "Type", "Price", "Amount"], "rows": []}
        for (var o of orders) {
            ordersTbl["rows"].push([o.Symbol, o.Type == ORDER_TYPE_BUY ? "买" : "卖", o.Price, o.Amount])
        }

        LogStatus(_D(), "priceSpace:", priceSpace, "\n`" + JSON.stringify([posTbl, ordersTbl]) + "`")
        Sleep(1000 * 60)
        LogReset(1000)
    }
}

WOOFi پر حکمت عملی کی مشق

DEX ایکسچینج مقداری مشق (4) - WOOFi / EdgeX حکمت عملی تک رسائی ٹیسٹ

DEX ایکسچینج مقداری مشق (4) - WOOFi / EdgeX حکمت عملی تک رسائی ٹیسٹ

DEX ایکسچینج مقداری مشق (4) - WOOFi / EdgeX حکمت عملی تک رسائی ٹیسٹ

EdgeX

FMZ پر EdgeX کو ترتیب دینے کے لیے API کی معلومات بنیادی طور پر WOOFi کے لیے جیسی ہے، لیکن مختلف تبادلے کے لیے مختلف API معلومات درکار ہوتی ہیں۔ EdgeX پر، آپ کو صرف AccountId اور SecretKey کو کنفیگر کرنے کی ضرورت ہے۔ EdgeX فرنٹ اینڈ سے جڑنے کے لیے والیٹ کا استعمال کرنے کے بعد انہیں اکاؤنٹ API مینجمنٹ پیج پر بھی دیکھا جا سکتا ہے۔

EdgeX پر ہم جس حکمت عملی کو نافذ کرنے جا رہے ہیں اس پر مبنی ہے۔ملٹی لیئر بولنگر بینڈزریورس اوپننگ + مڈ ٹریک کلوزنگ کی مقداری تجارتی منطق قلیل مدتی اتار چڑھاؤ کا ادراک کر سکتی ہے۔

حکمت عملی بہت آسان ہے، بنیادی خیال یہ ہے:

  • متعدد بولنگر اسٹینڈرڈ ڈیوی ایشنز کو استعمال کرتے ہوئے، مارکیٹ کے اتار چڑھاؤ کی شدت کا اندازہ لگایا جا سکتا ہے۔
  • عہدوں کو کھولنے اور بڑھانے کی ایک منطق ہے۔ کامیابی جتنی مضبوط ہوگی، پوزیشن اتنی ہی بڑی ہوگی۔
  • پوزیشنوں کو بند کرنے کے لیے ایک واضح منطق ہے، اور جب پوزیشن درمیانی ٹریک پر واپس آجائے گی تو آپ دستبردار ہو جائیں گے۔
  • حجم معیاری انحراف کثیر کے متناسب ہے: مضبوط بریک آؤٹ بڑی پوزیشنوں کی طرف لے جاتے ہیں۔

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

حکمت عملی کوڈ:

function main() {
    var symbol = "ETH_USDT.swap"
    var arrUp = []
    var arrDown = []
    let c = KLineChart({
        overlay: true
    }) 
    while (true) {
        var bolls = []
        var r = _C(exchange.GetRecords, symbol)
        for (var i = 0; i < 3; i++) {
            var boll = TA.BOLL(r, 20, i + 1)
            bolls.push(boll)
            var up = boll[0][boll[0].length - 1]
            var mid = boll[1][boll[1].length - 1]
            var down = boll[2][boll[2].length - 1]
            var close = r[r.length - 1].Close
            if (close > up && i >= arrUp.length) {
                exchange.CreateOrder(symbol, "sell", -1, 0.01 * (i + 1))
                arrUp.push({"symbol": symbol, "amount": 0.01 * (i + 1)})
            } else if (close < down && i >= arrDown.length) {
                exchange.CreateOrder(symbol, "buy", -1, 0.01 * (i + 1))
                arrDown.push({"symbol": symbol, "amount": 0.01 * (i + 1)})
            } else if ((arrUp.length > 0 && close < mid) || (arrDown.length > 0 && close > mid)) {
                var pos = exchange.GetPositions(symbol)
                for (var p of pos) {
                    if (p.Type == PD_LONG) {
                        exchange.CreateOrder(symbol, "closebuy", -1, p.Amount)
                    } else if (p.Type == PD_SHORT) {
                        exchange.CreateOrder(symbol, "closesell", -1, p.Amount)
                    }
                }
                arrUp = []
                arrDown = []
            }
        }
        r.forEach(function(bar, index) {
            c.begin(bar)
            for (var i in bolls) {
                var b = bolls[i]
                c.plot(b[0][index], 'up_' + (i + 1))
                c.plot(b[1][index], 'mid_' + (i + 1))
                c.plot(b[2][index], 'down_' + (i + 1))
            }
            c.close()
        })
        LogStatus(_D(), "\n", arrUp, "\n", arrDown)
        Sleep(500)
    }
}

آئیے پہلے ایک طویل مدتی بیک ٹیسٹ کریں:

DEX ایکسچینج مقداری مشق (4) - WOOFi / EdgeX حکمت عملی تک رسائی ٹیسٹ

DEX ایکسچینج مقداری مشق (4) - WOOFi / EdgeX حکمت عملی تک رسائی ٹیسٹ

EdgeX ٹیسٹ تعینات کریں۔

DEX ایکسچینج مقداری مشق (4) - WOOFi / EdgeX حکمت عملی تک رسائی ٹیسٹ

END

مذکورہ بالا حکمت عملی صرف تدریسی اور تحقیقی مقاصد کے لیے ہیں۔ براہ کرم ان کا اطلاق کرتے وقت محتاط رہیں۔ پڑھنے کے لیے آپ کا شکریہ۔