संसाधन लोड हो रहा है... लोड करना...

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

लेखक:FMZ~Lydia, बनाया गयाः 2023-12-25 16:40:50, अद्यतनः 2024-01-02 21:21:39

FMZ Quant: An Analysis of Common Requirements Design Examples in the Cryptocurrency Market (II)

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

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

आवश्यकताओं का विश्लेषण करें

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

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

// 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, "inquiry failure", ret)
    }
    
    return rows
}

var monitor = {}
function monitorTransfers() {
    var dicType = {
        "MAIN_UMFUTURE": "Spot wallet --> U-based contract wallet",
        "MAIN_CMFUTURE": "Spot wallet --> Currency-based contract wallet",
        "UMFUTURE_MAIN": "U-based contract wallet --> Spot wallet",
        "UMFUTURE_MARGIN": "U-based contract wallet --> Leveraged full position wallet",
        "CMFUTURE_MAIN": "Currency-based contract wallet --> Spot wallet",
        "MARGIN_UMFUTURE": "Leveraged full position wallet --> U-based contract wallet",
        "MARGIN_CMFUTURE": "Leveraged full position wallet --> Currency-based contract wallet",
        "CMFUTURE_MARGIN": "Currency-based contract wallet --> Leveraged full position wallet",
        "FUNDING_UMFUTURE": "Funds wallet --> U-based contract wallet",
        "UMFUTURE_FUNDING": "U-based contract wallet --> Funds wallet",
        "FUNDING_CMFUTURE": "Funds wallet --> Currency-based contract wallet",
        "CMFUTURE_FUNDING": "Currency-based contract wallet --> Funds wallet",
        "UMFUTURE_OPTION": "U-based contract wallet --> Options wallet",
        "OPTION_UMFUTURE": "Options wallet --> U-based contract wallet",
        // integrated account
        "MAIN_PORTFOLIO_MARGIN": "Spot wallet --> Unified accounts wallet",
        "PORTFOLIO_MARGIN_MAIN": "Unified accounts wallet --> Spot wallet"
    }
    
    Log("start testing")
    _.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("New transfer records detected", 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("commencement and termination")
}


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

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

  • मॉनिटर ट्रांसफर फ़ंक्शनः

    उद्देश्यः पूर्वनिर्धारित हस्तांतरण प्रकारों पर पुनरावृत्ति, हाल के हस्तांतरण इतिहास को पुनर्प्राप्त करें, और किसी भी नए हस्तांतरण को रिकॉर्ड करें। मानव-पठनीय विवरणों में स्थानांतरण प्रकारों को मैप करने के लिए एक शब्दकोश (dicType) का उपयोग करें. प्रत्येक प्रकार के नवीनतम हस्तांतरणों को ट्रैक करने के लिए मॉनिटर ऑब्जेक्ट को अपडेट करें.

  • मुख्य कार्य:

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

प्रमुख विशेषताएं:

  • गतिशील हस्तांतरण प्रकार मानचित्रणः

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

  • वास्तविक समय की निगरानी:

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

  • डेटा प्रस्तुतिः

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

  • हालिया हस्तांतरण इतिहास प्रबंधनः

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

बॉट परीक्षण

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

FMZ Quant: An Analysis of Common Requirements Design Examples in the Cryptocurrency Market (II)

FMZ Quant: An Analysis of Common Requirements Design Examples in the Cryptocurrency Market (II)

अंतः

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

यह लेख इस विषय पर कुछ प्रकाश डालता है और एक डिजाइन विचार प्रदान करता है। आपका क्रिप्टोक्यूरेंसी कैरियर सूचनात्मक और सफल दोनों हो सकता है!


अधिक जानकारी