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 স্ট্র্যাটেজি অ্যাক্সেস টেস্ট

গত কয়েকটি প্রবন্ধে, আমরা মূলধারার DEX-এর অ্যাক্সেস নিয়ে আলোচনা করেছি, এবং এই প্রবন্ধটি প্রকৃত ব্যবহারের উপর আলোকপাত করবে এবং প্রকৃত কৌশল স্থাপনের পরীক্ষা পরিচালনা করবে। 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 কনফিগার করুন।

এই পরীক্ষায়, আমরা একটি ব্যবহার করেছিবাজার তৈরির মৌলিক কৌশলের প্রোটোটাইপ, বাজারের অস্থিরতা নির্দেশক (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-এ যে কৌশলটি বাস্তবায়ন করতে যাচ্ছি তা হলমাল্টি-লেয়ার বলিঙ্গার ব্যান্ডরিভার্স ওপেনিং + মিড-ট্র্যাক ক্লোজিংয়ের পরিমাণগত ট্রেডিং লজিক স্বল্পমেয়াদী অস্থিরতা সালিসি উপলব্ধি করতে পারে।

কৌশলটি খুবই সহজ, মূল ধারণাটি হল:

  • একাধিক বলিঙ্গার স্ট্যান্ডার্ড বিচ্যুতি ব্যবহার করে, বাজারের অস্থিরতার তীব্রতা পরিমাপ করা যেতে পারে।
  • পজিশন খোলা এবং বৃদ্ধি করার একটি যুক্তি আছে। সাফল্য যত শক্তিশালী হবে, অবস্থান তত বড় হবে।
  • পজিশন বন্ধ করার জন্য একটি স্পষ্ট যুক্তি রয়েছে, এবং পজিশনটি যখন মাঝখানের ট্র্যাকে ফিরে আসবে তখন আপনি প্রত্যাহার করবেন।
  • আয়তন স্ট্যান্ডার্ড ডেভিয়েশন মাল্টিপলের সমানুপাতিক: শক্তিশালী ব্রেকআউট বৃহত্তর পজিশনের দিকে নিয়ে যায়।

তুমি হয়তো বিশ্বাস করবে না, কিন্তু FMZ-এ একটি সম্পূর্ণ কৌশল লিখতে মাত্র ৫০ লাইন কোড লাগে। বৃহৎ এআই মডেলের বর্তমান উন্নয়ন কৌশল নকশার সীমা অনেকাংশে কমিয়ে দিয়েছে। আমরা যে কৌশলগত ধারণাগুলি পরীক্ষা করেছি তা সহজেই 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

উপরোক্ত কৌশলগুলি শুধুমাত্র শিক্ষাদান এবং গবেষণার উদ্দেশ্যে। এগুলো প্রয়োগ করার সময় দয়া করে সতর্ক থাকুন। পড়ার জন্য ধন্যবাদ।