রিসোর্স লোড হচ্ছে... লোডিং...

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

লেখক:উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্ন, তৈরিঃ ২০২৩-১২-২৪ 22:24:58, আপডেটঃ ২০২৩-১২-২৫ ১৭ঃ১০ঃ৫৬

FMZ量化:加密货币市场常见需求设计实例解析(二)

পূর্ববর্তী নিবন্ধে পাঠকের মন্তব্যের জন্য, একটি প্রোগ্রামের উদাহরণ প্রয়োজন যা চুক্তি অ্যাকাউন্টের স্থানান্তরকে পর্যবেক্ষণ করে।

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

চাহিদা বিশ্লেষণ

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

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

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

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


当然实际设计的时候还有有很多细节,例如查看文档发现,划转方向有很多,所以我们要对每个划转方向都进行监测。代码中定义了```var dicType = {...}```来管理所有的划转方向。

为了更好的显示内容,我们使用一个状态栏表格在策略界面中输出最近5条的划转信息,所以我们就构造了一个名为:```monitor```的对象用来记录数据。当然你不能无限制的记录划转信息,所以我们只维持每个划转方向100条记录,超过100条就删除过早的记录。

### 代码范例

```js
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 ফাংশনঃ

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

  • monitorTransfers ফাংশনঃ

উদ্দেশ্যঃ পূর্বনির্ধারিত বিভক্ত প্রকারের মাধ্যমে যেতে, সাম্প্রতিক বিভক্ত ইতিহাস অনুসন্ধান করতে, এবং কোনও নতুন বিভক্ত রেকর্ড করতে। DicType ব্যবহার করে একটি সহজ-পঠনযোগ্য বিবরণে স্ক্র্যাপ টাইপ ম্যাপ করুন। প্রতিটি প্রকারের সর্বশেষ স্ক্র্যাপ ট্র্যাক করার জন্য মনিটর অবজেক্ট আপডেট করুন।

  • main ফাংশনঃ

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

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

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

ডিকটাইপ (dicType) ব্যবহার করে কোডটি একটি বর্ণনামূলক নামের সাথে ডিকটাইপ টাইপ ম্যাপ করে, যা প্রতিটি ডিকটাইপের বৈশিষ্ট্যের জন্য একটি স্পষ্ট বিবরণ প্রদান করে।

  • রিয়েল টাইম নজরদারিঃ

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

  • এই তথ্যগুলি দেখায়ঃ

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

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

সংক্ষিপ্ত এবং সময়মত প্রদর্শন নিশ্চিত করার জন্য প্রতিটি ধরণের জন্য সর্বশেষ স্ক্র্যাপ রেকর্ডের একটি স্লো লিস্ট রাখা হয়।

রিয়েল ডিস্ক টেস্ট

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

FMZ量化:加密货币市场常见需求设计实例解析(二)

FMZ量化:加密货币市场常见需求设计实例解析(二)

END:

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

এই নিবন্ধটি একটি নকশা ধারণা প্রদান করে এবং আপনার ক্রিপ্টোকারেন্সি কর্মজীবন উভয় তথ্যপূর্ণ এবং সফল হতে পারে!


আরও দেখুন

98K-ব্যাংড ট্র্যাকিং_লংছোট্ট স্বপ্নের শিক্ষক হলেন বাস্তবতার সংস্করণ ডোলা A স্বপ্নের শিক্ষক ছোট্ট স্বপ্নের শিক্ষক সবচেয়ে বেশি ভালবাসে আপনাকে