FMZ Kuantitatif: Penyelesaian contoh reka bentuk permintaan biasa di pasaran mata wang kripto (II)

Penulis:Mimpi kecil, Dicipta: 2023-12-24 22:24:58, Dikemas kini: 2023-12-25 17:10:56

img

Sebagai contoh, kita akan menggunakan pertukaran Binance sebagai objek ujian untuk mencapai keperluan ini, dan bersama-sama belajar bagaimana untuk merancang.

Bursa mata wang kripto memproses sejumlah besar transaksi setiap hari, termasuk pemindahan aset antara dompet yang berbeza. Pemantauan pemindahan ini secara langsung adalah penting bagi peniaga dan pemaju. Artikel ini akan membincangkan satu kod JavaScript yang bertujuan untuk memantau pemindahan aset terkini di bursa mata wang kripto dan membincangkan komponen utamanya.

Menganalisis keperluan

Mengkaji dokumen Bursa Binance, kami mendapati bahawa terdapat antara muka sejarah penyampaian untuk mendapatkan semua maklumat penyampaian. Oleh kerana kami hanya memantau rekod penyampaian yang mungkin berlaku, kami tidak perlu mendapatkan semua sejarah penyampaian. Kami hanya perlu memeriksa rekod penyampaian dalam jangka masa yang tertentu berdasarkan frekuensi tertentu.

Menggunakan antara muka ini:

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

Bagaimana untuk memeriksa rekod pemindahan yang baru? Setelah melihat dokumen Binance, kami mendapati bahawa data yang dikembalikan oleh antara muka ini mempunyai tanda masa, dan menggunakan tanda masa adalah sangat mudah, selagi terdapat rekod yang lebih besar daripada tanda masa terbesar yang direkodkan pada masa ini, tanda bahawa tindakan pemindahan baru telah berlaku.

/sapi/v1/asset/transferSetiap antara muka meminta sehingga 100 data setiap kali, pengesanan ini tidak akan menimbulkan masalah untuk pemindahan frekuensi rendah, kecuali jika satu pengesanan berakhir dan akaun mempunyai lebih daripada 100 operasi pemindahan sebelum pengesanan seterusnya bermula.

Sudah tentu terdapat banyak lagi butiran semasa reka bentuk sebenar, seperti melihat dokumentasi yang mendapati terdapat banyak arah penyampaian, jadi kita perlu memantau setiap arah penyampaian; ia ditakrifkan dalam kod.var dicType = {...}Untuk menguruskan semua arah pembahagian.

Untuk menunjukkan kandungan yang lebih baik, kami menggunakan jadual status untuk mengeluarkan maklumat pengalihan 5 artikel terkini dalam antara muka dasar, jadi kami membina satu yang dipanggil:monitorObjek yang digunakan untuk merakam data. Sudah tentu anda tidak boleh merakam maklumat yang tidak terhad, jadi kami hanya mengekalkan 100 rekod untuk setiap arah penggarisan, dan lebih daripada 100 akan menghapus rekod yang terlalu awal.

Contoh kod

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)
    }
}

Di sini, anda boleh melihat gambar di bawah.

Kod JavaScript yang disediakan terdiri daripada beberapa fungsi, yang bersama-sama membina sistem untuk memantau pemindahan aset terkini. Mari kita memecahkan komponen utama:

  • Fungsi getRecentTransferHistory:

    Tujuan: Mendapatkan sejarah pemindahan aset terkini dari API bursa mengikut parameter yang ditetapkan. Parameter: TransType (jenis penyampaian), typeDesc (deskripsi jenis). API hujung: /sapi/v1/asset/transfer.

  • MonitorTransfers Fungsi:

    Tujuan: Melalui jenis pemisahan yang telah ditentukan, mencari sejarah pemisahan terkini, dan merakam sebarang pemisahan baru. Menggunakan diksi (dicType) untuk memetakan jenis penyampaian ke deskripsi yang mudah dibaca. Mengemas kini objek monitor untuk mengesan penyesuaian terkini untuk setiap jenis.

  • Fungsi utama:

    Matlamat: Memandu pusingan tanpa henti, terus memantau pemotongan dan memaparkan data terkini. Menggunakan monitorTransfers secara berkala. Menghasilkan satu jadual untuk setiap jenis pengalihan yang mengandungi barisan seperti aset, jumlah, status, ID urus niaga dan timestamp.

Fitur utama:

  • Peta jenis pemindahan dinamik:

    Kod menggunakan kamus (dicType) untuk memetakan jenis penyampaian ke nama deskriptif untuk memberikan penjelasan yang jelas mengenai setiap sifat penyampaian.

  • Pemantauan masa nyata:

    Sistem ini sentiasa memeriksa pengalihan baru, mengemas kini objek monitor dan merakam sebarang perubahan yang dikesan.

  • Data menunjukkan:

    Gunakan jadual untuk memaparkan setiap jenis data pemindahan, termasuk butiran berkaitan seperti aset, jumlah, status, ID urus niaga dan tanda masa.

  • Di bawah ini adalah beberapa contoh:

    Mempunyai senarai bergulir rekod pengalihan terkini untuk setiap jenis untuk memastikan paparan ringkas dan tepat pada masanya.

Ujian cakera sebenar

Satu pusingan telah dilakukan secara manual, dan program telah mengesan operasi pusingan.

img

img

Hujung:

Kod JavaScript yang disediakan memberikan penyelesaian yang kuat untuk memantau pemisahan aset baru-baru ini di bursa mata wang kripto. Ciri-ciri dinamik dan masa nyata menjadikannya alat yang berharga bagi pedagang dan pemaju yang ingin mengetahui pergerakan aset di antara pelbagai dompet. Kod ini boleh diubahsuai dan disesuaikan mengikut keperluan khusus, memberikan asas yang kukuh bagi mereka yang ingin meningkatkan strategi perdagangan mata wang kripto atau membangunkan ciri pemantauan tambahan.

Dalam artikel ini, kami akan membentangkan idea reka bentuk yang akan memberi maklumat dan kejayaan kepada kerjaya anda dalam mata wang kripto!


Lebih lanjut

Pengesanan 98K-band_Long#Mimpi kecil guru adalah versi realiti #Mimpi kecil guru paling kuat love you