4
ফোকাস
1271
অনুসারী

এফএমজেড কোয়ান্টিফিকেশন: ক্রিপ্টোকারেন্সি মার্কেটে সাধারণ চাহিদা ডিজাইনের উদাহরণের বিশ্লেষণ (2)

তৈরি: 2023-12-24 22:24:58, আপডেট করা হয়েছে: 2023-12-25 17:10:56
comments   1
hits   1511

এফএমজেড কোয়ান্টিফিকেশন: ক্রিপ্টোকারেন্সি মার্কেটে সাধারণ চাহিদা ডিজাইনের উদাহরণের বিশ্লেষণ (2)

পূর্ববর্তী নিবন্ধে পাঠকদের মন্তব্যের জবাবে, তারা চুক্তির অ্যাকাউন্ট স্থানান্তর নিরীক্ষণের জন্য একটি প্রোগ্রামের উদাহরণের জন্য অনুরোধ করেছিল, এই ইস্যুতে, আমরা এই প্রয়োজনীয়তা বাস্তবায়নের জন্য Binance Exchange ব্যবহার করব এবং কীভাবে এটি একসাথে ডিজাইন করতে হবে তা শিখব।

ক্রিপ্টোকারেন্সি এক্সচেঞ্জ প্রতিদিন প্রচুর সংখ্যক লেনদেন প্রক্রিয়া করে, যার মধ্যে বিভিন্ন ওয়ালেটের মধ্যে সম্পদের স্থানান্তরও অন্তর্ভুক্ত। এই স্থানান্তরগুলি রিয়েল টাইমে পর্যবেক্ষণ করা ব্যবসায়ী এবং ডেভেলপারদের জন্য অত্যন্ত গুরুত্বপূর্ণ। এই প্রবন্ধে ক্রিপ্টোকারেন্সি এক্সচেঞ্জে সাম্প্রতিক সম্পদ স্থানান্তর পর্যবেক্ষণের জন্য ডিজাইন করা জাভাস্ক্রিপ্ট কোডের একটি অংশ অন্বেষণ করা হবে এবং এর মূল উপাদানগুলি নিয়ে আলোচনা করা হবে।

প্রয়োজনীয়তা বিশ্লেষণ করুন

আমি বিনান্স এক্সচেঞ্জের ডকুমেন্টেশন পরীক্ষা করে দেখেছি যে একটি স্থানান্তর ইতিহাস ইন্টারফেস রয়েছে যা সমস্ত স্থানান্তর তথ্য জিজ্ঞাসা করতে পারে। যেহেতু আমরা শুধুমাত্র হস্তান্তর রেকর্ডগুলি পর্যবেক্ষণ করছি যা ঘটতে পারে, তাই আমাদের সমস্ত স্থানান্তর ইতিহাস পাওয়ার দরকার নেই৷ আমাদের শুধুমাত্র একটি নির্দিষ্ট ফ্রিকোয়েন্সির উপর ভিত্তি করে একটি নির্দিষ্ট সীমার মধ্যে সাম্প্রতিক স্থানান্তর রেকর্ডগুলি পরীক্ষা করতে হবে। যদি নতুন স্থানান্তর রেকর্ড পাওয়া যায়, সেগুলি আপডেট করা হবে এবং জানানো হবে৷

এই ইন্টারফেস ব্যবহার করুন:

// GET /sapi/v1/asset/transfer type, size : 100

তাহলে কিভাবে নতুন যোগ করা ট্রান্সফার রেকর্ড চেক করবেন? Binance এর ডকুমেন্টেশন পড়ার পর, আমি দেখতে পেলাম যে এই ইন্টারফেস দ্বারা প্রত্যাবর্তিত ডেটাতে একটি টাইমস্ট্যাম্প আছে যতক্ষণ না রেকর্ড করা সর্বোচ্চ টাইমস্ট্যাম্পের চেয়ে বড় একটি রেকর্ড আছে স্থানান্তর কর্ম ঘটেছে. শুধু এটি ট্রিগার করতে এটি ব্যবহার করুন.

/sapi/v1/asset/transferইন্টারফেসটি একবারে 100 টুকরো ডেটার জন্য অনুরোধ করতে পারে এই সনাক্তকরণটি কম-ফ্রিকোয়েন্সি স্থানান্তরের জন্য সমস্যা সৃষ্টি করবে না, যদি না একটি সনাক্তকরণের শেষ এবং পরবর্তী সনাক্তকরণের শুরুর মধ্যে 100 টির বেশি স্থানান্তর ক্রিয়াকলাপ না থাকে৷ এই সময়ে, কিছু নতুন অপারেশন রেকর্ড মিস করা হতে পারে, যা সাধারণ চাহিদার পরিস্থিতির জন্য যথেষ্ট (সাধারণত পাগলাটে তহবিল স্থানান্তর করার কোন কৌশল থাকবে না…)।

অবশ্যই, প্রকৃত নকশায় অনেকগুলি বিবরণ রয়েছে উদাহরণস্বরূপ, ডকুমেন্টেশনগুলি দেখে, আমরা দেখতে পেয়েছি যে অনেকগুলি স্থানান্তর দিক রয়েছে, তাই আমাদের প্রতিটি স্থানান্তর দিক নিরীক্ষণ করতে হবে৷ কোডে সংজ্ঞায়িত করা হয়েছেvar dicType = {...}সমস্ত স্থানান্তর নির্দেশাবলী পরিচালনা করতে।

বিষয়বস্তুকে আরও ভালোভাবে প্রদর্শন করার জন্য, কৌশল ইন্টারফেসে শেষ 5টি স্থানান্তর তথ্য আউটপুট করার জন্য আমরা একটি স্ট্যাটাস বার টেবিল ব্যবহার করি, তাই আমরা একটি টেবিল তৈরি করেছি যার নাম:monitorবস্তুটি ডেটা রেকর্ড করতে ব্যবহৃত হয়। অবশ্যই, আপনি সীমাহীনভাবে স্থানান্তর তথ্য রেকর্ড করতে পারবেন না, তাই আমরা প্রতিটি স্থানান্তর নির্দেশের জন্য শুধুমাত্র 100টি রেকর্ড বজায় রাখি যদি সংখ্যাটি 100 ছাড়িয়ে যায়, আমরা অকাল রেকর্ড মুছে দেব।

কোড উদাহরণ

function getRecentTransferHistory(TransType, typeDesc) {
	// GET /sapi/v1/asset/transfer type, size : 100
    
    var rows = null 
    var ret = exchange.IO("api", "GET", "/sapi/v1/asset/transfer", `type=${TransType}&size=100`)
    Log("/sapi/v1/asset/transfer" + `type=${TransType}&size=100`)
    if (ret && typeof(ret.rows) != "undefined" && Array.isArray(ret.rows)) {
        rows = ret.rows
    } else if (ret && typeof(ret.total) != "undefined" && ret.total == 0) {
        rows = []
    } else {
    	Log(TransType, typeDesc, "查询失败", ret)
    }
    
    return rows
}

var monitor = {}
function monitorTransfers() {
    var dicType = {
        "MAIN_UMFUTURE": "现货钱包 --> U本位合约钱包",
        "MAIN_CMFUTURE": "现货钱包 --> 币本位合约钱包",
        "UMFUTURE_MAIN": "U本位合约钱包 --> 现货钱包",
        "UMFUTURE_MARGIN": "U本位合约钱包 --> 杠杆全仓钱包",
        "CMFUTURE_MAIN": "币本位合约钱包 --> 现货钱包",
        "MARGIN_UMFUTURE": "杠杆全仓钱包 --> U本位合约钱包",
        "MARGIN_CMFUTURE": "杠杆全仓钱包 --> 币本位合约钱包",
        "CMFUTURE_MARGIN": "币本位合约钱包 --> 杠杆全仓钱包",
        "FUNDING_UMFUTURE": "资金钱包 --> U本位合约钱包",
        "UMFUTURE_FUNDING": "U本位合约钱包 --> 资金钱包",
        "FUNDING_CMFUTURE": "资金钱包 --> 币本位合约钱包",
        "CMFUTURE_FUNDING": "币本位合约钱包 --> 资金钱包",
        "UMFUTURE_OPTION": "U本位合约钱包 --> 期权钱包",
        "OPTION_UMFUTURE": "期权钱包 --> U本位合约钱包",
        // 统一账户
        "MAIN_PORTFOLIO_MARGIN": "现货钱包 --> 统一账户钱包",
        "PORTFOLIO_MARGIN_MAIN": "统一账户钱包 --> 现货钱包"
    }
    
    Log("开始检测")
    _.each(dicType, function(v, k) {
        var rows = getRecentTransferHistory(k, v)
        var maxTS = 0
        _.each(rows, function(row) {
            if (typeof(monitor[k]) == "undefined") {
            	monitor[k] = {"transType": k, "typeDesc": v, "recentRecords": [], "lastTS": 0}            	
            }

            if (row["timestamp"] > monitor[k]["lastTS"]) {
                monitor[k]["recentRecords"].push(row)
                
                if (monitor[k]["lastTS"] != 0) {
                	Log("检测到新增划转记录", k, v, row, "#FF0000")
                }                
            }
            maxTS = Math.max(maxTS, row["timestamp"])     
        })
        if (rows && rows.length == 0) {
            return 
        }
        monitor[k]["lastTS"] = maxTS

        var sortedArrayAscending = monitor[k]["recentRecords"].slice().sort((a, b) => a.timestamp - b.timestamp)
        monitor[k]["recentRecords"] = sortedArrayAscending

        if (monitor[k]["recentRecords"].length > 100) {
        	monitor[k]["recentRecords"].shift()
        }
        Sleep(1000)
    })
    Log("开始结束")
}


function main() {
    LogReset()
    while (true) {
        monitorTransfers()

        var tbls = []
        _.each(monitor, function(v, k) {
        	var tbl = {
        		"type": "table", 
        		"title": v["typeDesc"], 
        		"cols": ["asset", "amount", "status", "tranId", "time"], 
        		"rows": []
        	}

            var arr = v["recentRecords"].slice().sort((a, b) => b.timestamp - a.timestamp)
            for (var i = 0; i < arr.length; i++) {
            	if (i < 5) {
            		tbl["rows"].push([arr[i]["asset"], arr[i]["amount"], arr[i]["status"], arr[i]["tranId"], _D(arr[i]["timestamp"])])
            	}            	
            }
            tbls.push(tbl)
        })        

    	LogStatus(_D(), "\n", "`" + JSON.stringify(tbls) + "`")
    	Sleep(1000 * 30)
    }
}

কোড ওভারভিউ:

প্রদত্ত জাভাস্ক্রিপ্ট কোডে বেশ কিছু ফাংশন রয়েছে যা একসাথে সাম্প্রতিক সম্পদ স্থানান্তর নিরীক্ষণের জন্য একটি সিস্টেম তৈরি করে। আসুন প্রধান উপাদানগুলি ভেঙে দেওয়া যাক:

  • getRecentTransferHistory ফাংশন:

উদ্দেশ্য: নির্দিষ্ট পরামিতি অনুযায়ী এক্সচেঞ্জ API থেকে সাম্প্রতিক সম্পদ স্থানান্তরের ইতিহাস প্রাপ্ত করুন। পরামিতি: TransType (ট্রান্সফার টাইপ), typeDesc (টাইপ বিবরণ)। API এন্ডপয়েন্ট: /sapi/v1/asset/transfer.

  • মনিটর ট্রান্সফার ফাংশন:

উদ্দেশ্য: পূর্বনির্ধারিত স্থানান্তর প্রকারের উপর পুনরাবৃত্তি করুন, সাম্প্রতিক স্থানান্তর ইতিহাস পুনরুদ্ধার করুন এবং যেকোনো নতুন স্থানান্তর লগ করুন। মানব-পাঠযোগ্য বর্ণনায় স্থানান্তরের ধরন ম্যাপ করতে একটি অভিধান (dicType) ব্যবহার করুন। প্রতিটি ধরনের সর্বশেষ স্থানান্তর ট্র্যাক করতে মনিটর অবজেক্ট আপডেট করুন।

  • প্রধান ফাংশন:

উদ্দেশ্য: একটি অসীম লুপ চালান যা ক্রমাগত স্থানান্তর নিরীক্ষণ করে এবং সর্বশেষ ডেটা প্রদর্শন করে। নিয়মিত মনিটর ট্রান্সফার ফাংশন ব্যবহার করুন। সম্পদ, পরিমাণ, স্থিতি, লেনদেন আইডি এবং টাইমস্ট্যাম্পের মতো কলামগুলি সহ প্রতিটি স্থানান্তর প্রকারের জন্য একটি টেবিল তৈরি করুন।

মূল বৈশিষ্ট্য:

  • ডায়নামিক ট্রান্সফার টাইপ ম্যাপিং:

কোডটি বর্ণনামূলক নামগুলিতে স্থানান্তরের ধরন ম্যাপ করতে একটি অভিধান (ডিকটাইপ) ব্যবহার করে, প্রতিটি স্থানান্তরের প্রকৃতির একটি স্পষ্ট ব্যাখ্যা প্রদান করে।

  • রিয়েল-টাইম পর্যবেক্ষণ:

সিস্টেমটি ক্রমাগত নতুন স্থানান্তরের জন্য পরীক্ষা করে, মনিটর অবজেক্ট আপডেট করে এবং সনাক্ত করা পরিবর্তনগুলি রেকর্ড করে।

  • তথ্য উপস্থাপনা:

প্রাসঙ্গিক বিবরণ যেমন সম্পদ, পরিমাণ, স্থিতি, লেনদেন আইডি এবং টাইমস্ট্যাম্প সহ প্রতিটি ধরণের স্থানান্তর ডেটা উপস্থাপন করতে টেবিল ব্যবহার করুন।

  • সাম্প্রতিক স্থানান্তর ইতিহাস পরিচালনা:

সংক্ষিপ্ত এবং সময়োপযোগী প্রদর্শন নিশ্চিত করে প্রতিটি প্রকারের জন্য সাম্প্রতিক স্থানান্তর রেকর্ডগুলির একটি স্ক্রলিং তালিকা বজায় রাখুন।

বাস্তব অফার পরীক্ষা

একটি স্থানান্তর ম্যানুয়ালি করা হয়েছিল, এবং প্রোগ্রামটি স্থানান্তর অপারেশন সনাক্ত করেছে।

এফএমজেড কোয়ান্টিফিকেশন: ক্রিপ্টোকারেন্সি মার্কেটে সাধারণ চাহিদা ডিজাইনের উদাহরণের বিশ্লেষণ (2)

এফএমজেড কোয়ান্টিফিকেশন: ক্রিপ্টোকারেন্সি মার্কেটে সাধারণ চাহিদা ডিজাইনের উদাহরণের বিশ্লেষণ (2)

END:

প্রদত্ত জাভাস্ক্রিপ্ট কোডটি ক্রিপ্টোকারেন্সি এক্সচেঞ্জে সাম্প্রতিক সম্পদ স্থানান্তর পর্যবেক্ষণের জন্য একটি শক্তিশালী সমাধান প্রদান করে। এর গতিশীল এবং রিয়েল-টাইম প্রকৃতি এটিকে বিভিন্ন ওয়ালেটের মধ্যে সম্পদের গতিবিধি বুঝতে চাওয়া ব্যবসায়ী এবং ডেভেলপারদের জন্য একটি মূল্যবান হাতিয়ার করে তোলে। এই কোডটি নির্দিষ্ট চাহিদা অনুসারে পরিবর্তন এবং কাস্টমাইজ করা যেতে পারে, যা তাদের ক্রিপ্টোকারেন্সি ট্রেডিং কৌশল উন্নত করতে বা অতিরিক্ত পর্যবেক্ষণ ক্ষমতা বিকাশ করতে চাওয়াদের জন্য একটি শক্ত ভিত্তি প্রদান করে।

এই নিবন্ধটি বিষয়ের উপর কিছু আলোকপাত করে এবং একটি ডিজাইন ধারণা প্রদান করে আপনার ক্রিপ্টোকারেন্সি ক্যারিয়ার তথ্যপূর্ণ এবং সফল হোক!