एफएमजेड क्वांटिकेशनः क्रिप्टोक्यूरेंसी बाजार में आम जरूरतों के डिजाइन उदाहरण का विश्लेषण

लेखक:छोटे सपने, बनाया गयाः 2023-12-24 22:24:58, अद्यतन किया गयाः 2023-12-25 17:10:56

img

पिछले लेख में पाठकों की टिप्पणी के अनुसार, एक अनुबंध खाता स्क्रैपिंग की निगरानी करने के लिए एक कार्यक्रम उदाहरण की आवश्यकता है, और इस अंक में हम इस आवश्यकता को पूरा करने के लिए परीक्षण वस्तु के रूप में बिनान एक्सचेंज का उपयोग करते हैं, और एक साथ सीखने के लिए कैसे डिजाइन करें।

क्रिप्टोक्यूरेंसी एक्सचेंजों में दैनिक रूप से बड़ी संख्या में लेनदेन होते हैं, जिनमें विभिन्न पर्सों के बीच परिसंपत्ति विभाजन शामिल हैं। वास्तविक समय में इन विभाजनों की निगरानी व्यापारियों और डेवलपर्स के लिए महत्वपूर्ण है। यह लेख एक जावास्क्रिप्ट कोड की जांच करेगा, जिसका उद्देश्य क्रिप्टोक्यूरेंसी एक्सचेंजों पर हाल के परिसंपत्ति विभाजन की निगरानी करना है और इसके महत्वपूर्ण घटकों पर चर्चा करना है।

जरूरतों का विश्लेषण

बिनान एक्सचेंज के दस्तावेजों की जांच करने के बाद, यह पता चला कि एक स्क्रैप हिस्ट्री इंटरफ़ेस है जो सभी स्क्रैप सूचनाओं का पता लगा सकता है। चूंकि हम केवल संभावित स्क्रैप रिकॉर्ड की निगरानी कर रहे हैं, इसलिए हमें सभी स्क्रैप हिस्ट्री प्राप्त करने की आवश्यकता नहीं है। हमें केवल हाल की अवधि के एक निश्चित सीमा के भीतर स्क्रैप रिकॉर्ड की जांच करने की आवश्यकता है। यदि कोई नया स्क्रैप रिकॉर्ड पाया जाता है, तो इसे अपडेट किया जाता है।

इस इंटरफेस का उपयोग करेंः

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

तो फिर नए स्क्रैप रिकॉर्ड की जांच कैसे करें? बिनान के दस्तावेज़ को देखने के बाद यह पता चला कि इस इंटरफ़ेस द्वारा लौटाए गए डेटा में समय की टोकरी है, समय की टोकरी का उपयोग करके निर्णय लेना बहुत आसान है, जब तक कि वर्तमान रिकॉर्ड में सबसे बड़े समय की टोकरी से बड़ा रिकॉर्ड हो, यह इंगित करता है कि एक नया स्क्रैप रोटेशन हुआ है। इस प्रकार ट्रिगर किया जा सकता है।

/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 फ़ंक्शनः

    उद्देश्यः निर्दिष्ट पैरामीटर के अनुसार एक्सचेंज एपीआई से हालिया परिसंपत्ति स्थानांतरण इतिहास प्राप्त करना। पैरामीटरः TransType (पुनर्निर्देशित प्रकार), typeDesc (प्रकार वर्णन) । एपीआई अंतः /sapi/v1/asset/transfer.

  • monitorTransfers फ़ंक्शनः

    उद्देश्यः पूर्वनिर्धारित विभाजन प्रकारों में जाना, हाल के विभाजन इतिहास को पुनर्प्राप्त करना और किसी भी नए विभाजन को रिकॉर्ड करना। DicType का उपयोग करके, किसी प्रकार के स्क्रॉल को आसानी से पढ़ने योग्य विवरण में मैप करें। अद्यतन मॉनिटर ऑब्जेक्ट प्रत्येक प्रकार के नवीनतम स्क्रॉल को ट्रैक करने के लिए।

  • main फ़ंक्शन:

    उद्देश्यः एक असीमित चक्र चलाने के लिए, निरंतर निगरानी स्क्रैपिंग और नवीनतम डेटा प्रदर्शित करने के लिए। नियमित रूप से monitorTransfers फ़ंक्शन का उपयोग करें। प्रत्येक स्क्रैप प्रकार के लिए एक तालिका उत्पन्न करें, जिसमें संपत्ति, राशि, स्थिति, लेनदेन आईडी और समय सारिणी जैसे कॉलम शामिल हैं।

मुख्य विशेषताएंः

  • डायनेमिक स्क्रैप मैपिंग प्रकारः

    कोड का उपयोग करने वाला शब्दकोश (dicType) प्रत्येक विच्छेदन के गुणों के लिए स्पष्ट विवरण प्रदान करने के लिए विच्छेदन प्रकार को वर्णनात्मक नामों में मैप करता है।

  • वास्तविक समय में निगरानीः

    यह सिस्टम लगातार नए स्क्रैप की जांच करता है, मॉनिटर ऑब्जेक्ट को अपडेट करता है और किसी भी परिवर्तन का पता लगाता है।

  • डेटा प्रस्तुत करता हैः

    तालिकाओं का उपयोग करके प्रत्येक प्रकार के स्क्रैप डेटा को प्रदर्शित किया जाता है, जिसमें सम्पत्ति, राशि, स्थिति, लेनदेन आईडी और समय सारिणी जैसे संबंधित विवरण शामिल हैं।

  • हाल ही में इतिहास प्रबंधन को हटाया गयाः

    प्रत्येक प्रकार के लिए हाल ही में स्क्रॉल किए गए रिकॉर्ड की एक रोलिंग सूची बनाए रखें, ताकि संक्षिप्त और समय पर प्रदर्शित किया जा सके।

वास्तविक डिस्क परीक्षण

मैनुअल रूप से एक स्क्रैप किया गया और प्रोग्राम ने स्क्रैप ऑपरेशन का पता लगाया।

img

img

अंतः

उपलब्ध कराया गया जावास्क्रिप्ट कोड क्रिप्टोकरेंसी एक्सचेंजों पर हालिया परिसंपत्ति विभाजन की निगरानी के लिए एक शक्तिशाली समाधान प्रदान करता है। इसकी गतिशीलता और वास्तविक समय की विशेषताएं इसे व्यापारियों और डेवलपर्स के लिए एक मूल्यवान उपकरण बनाती हैं जो विभिन्न पर्सों के बीच परिसंपत्ति की गति को समझने की तलाश करते हैं। यह कोड विशिष्ट आवश्यकताओं के अनुसार संशोधित और अनुकूलित किया जा सकता है, जो उन लोगों के लिए एक ठोस आधार प्रदान करता है जो क्रिप्टोकरेंसी ट्रेडिंग रणनीति को मजबूत करना चाहते हैं या अतिरिक्त निगरानी सुविधाएं विकसित करना चाहते हैं।

इस लेख में, हम आपको एक डिजाइन विचार के साथ प्रस्तुत करते हैं और आपके क्रिप्टोक्यूरेंसी करियर को जानकारीपूर्ण और सफल बनाने की कामना करते हैं!


अधिक

98K-बैंड ट्रैकिंग _Longछोटे सपने शिक्षक है वास्तविकता संस्करण अधिक A सपने छोटे सपने शिक्षक सबसे ज्यादा प्यार आप