Sumber dimuat naik... memuat...

FMZ Quant: Analisis Contoh Reka Bentuk Keperluan Umum di Pasaran Cryptocurrency (II)

Penulis:FMZ~Lydia, Dicipta: 2023-12-25 16:40:50, Dikemas kini: 2024-01-02 21:21:39

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

Sebagai tindak balas kepada komen daripada pembaca dalam artikel sebelumnya, mereka meminta contoh program untuk memantau pemindahan akaun kontrak.

Pertukaran mata wang kripto mengendalikan sejumlah besar transaksi setiap hari, termasuk pemindahan aset antara dompet yang berbeza. Pemantauan pemindahan ini dalam masa nyata adalah penting bagi peniaga dan pemaju. Dalam artikel ini, kita akan meneroka sekeping kod JavaScript yang direka untuk memantau pemindahan aset baru-baru ini di bursa mata wang kripto dan membincangkan komponen utamanya.

Menganalisis Keperluan

Saya memeriksa dokumentasi pertukaran Binance dan mendapati bahawa terdapat antara muka sejarah pemindahan yang boleh menyoal semua maklumat pemindahan. Oleh kerana kami hanya memantau rekod pemindahan yang mungkin berlaku, kami tidak perlu mendapatkan semua sejarah pemindahan. Kami hanya perlu memeriksa rekod pemindahan baru-baru ini dalam julat tertentu berdasarkan kekerapan tertentu. Jika rekod pemindahan baru ditemui, mereka akan dikemas kini dan dimaklumkan.

Gunakan antara muka:

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

Jadi bagaimana untuk memeriksa rekod pemindahan yang baru ditambahkan? Selepas membaca dokumentasi Binance, saya mendapati bahawa terdapat cap masa dalam data yang dikembalikan oleh antara muka ini. Sangat mudah untuk menilai dengan cap masa. Selagi terdapat rekod yang lebih besar daripada cap masa maksimum yang direkodkan pada masa ini, ini bermakna tindakan pemindahan baru telah berlaku. Hanya gunakan ini untuk mencetuskannya.

Peraturan/sapi/v1/asset/transferantara muka boleh meminta sehingga 100 keping data pada satu masa. Pengesanan tidak akan menyebabkan masalah untuk pemindahan frekuensi rendah, melainkan akaun mempunyai lebih daripada 100 operasi pemindahan antara akhir satu pengesanan dan permulaan pengesanan seterusnya. Pada masa ini, beberapa rekod operasi baru mungkin terlepas, yang mencukupi untuk senario permintaan umum (secara amnya, tidak akan ada strategi untuk memindahkan dana dengan gila...).

Sudah tentu, terdapat banyak butiran dalam reka bentuk sebenar. contohnya, memeriksa dokumentasi, kita mendapati bahawa terdapat banyak arah pemindahan, jadi kita perlu memantau setiap arah pemindahan. kod ditakrifkanvar dicType = {...}untuk menguruskan semua arah pemindahan.

Untuk memaparkan kandungan yang lebih baik, kita menggunakan jadual bar status untuk mengeluarkan 5 terakhir maklumat pemindahan dalam antara muka strategi, jadi kita membina objek bernamamonitoruntuk merakam data. sudah tentu, anda tidak boleh merakam maklumat pemindahan tanpa had, jadi kami hanya menyimpan 100 rekod untuk setiap arah pemindahan. jika jumlahnya melebihi 100, kami akan memadam rekod yang lebih 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, "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)
    }
}

Ringkasan Kod:

Kod JavaScript yang disediakan termasuk beberapa fungsi yang membina sistem bersama untuk memantau pemindahan aset baru-baru ini.

  • Fungsi getRecentTransferHistory:

    Tujuan: Dapatkan sejarah pemindahan aset baru-baru ini dari API pertukaran mengikut parameter yang ditentukan. Parameter: TransType (jenis pemindahan), typeDesc (terangkan jenis). Titik akhir API: /sapi/v1/aset/pindahan.

  • MonitorFungsi pemindahan:

    Tujuan: Ulangi jenis pemindahan yang telah ditakrifkan, mendapatkan sejarah pemindahan baru-baru ini, dan merakam sebarang pemindahan baru. Gunakan kamus (dicType) untuk memetakan jenis pemindahan ke penerangan yang boleh dibaca oleh manusia. Mengemas kini objek monitor untuk mengesan pemindahan terbaru setiap jenis.

  • Fungsi utama:

    Tujuan: Jalankan gelung tanpa akhir yang memantau pemindahan secara berterusan dan memaparkan data terkini. Gunakan fungsi monitorTransfers secara berkala. Menghasilkan jadual untuk setiap jenis pemindahan, termasuk lajur seperti aset, jumlah, status, ID urus niaga, dan cap masa.

Ciri Utama:

  • Pemetaan jenis pemindahan dinamik:

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

  • Pemantauan masa nyata:

    Sistem memeriksa pemindahan baru secara berterusan, mengemas kini objek monitor dan merakam sebarang perubahan yang dikesan.

  • Penyampaian data:

    Gunakan jadual untuk membentangkan setiap jenis data pemindahan, termasuk butiran yang relevan seperti aset, jumlah, status, ID transaksi, dan cap waktu.

  • Pengurusan sejarah pemindahan terkini:

    Mengekalkan senarai meluncur rekod pemindahan baru-baru ini untuk setiap jenis, memastikan paparan ringkas dan tepat pada masanya.

Ujian Bot

Pemindahan dilakukan secara manual dan program mengesan operasi pemindahan.

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)

Hujung:

Kod JavaScript yang disediakan menyediakan penyelesaian yang kuat untuk memantau pemindahan aset baru-baru ini di bursa mata wang kripto. Sifat dinamik dan masa nyata menjadikannya alat yang berharga untuk pedagang dan pemaju yang ingin memahami pergerakan aset antara dompet yang berbeza. Kod ini boleh diubah suai dan disesuaikan dengan keperluan tertentu, memberikan asas yang kukuh bagi mereka yang ingin meningkatkan strategi perdagangan mata wang kripto mereka atau mengembangkan keupayaan pemantauan tambahan.

Semoga kerjaya cryptocurrency anda menjadi baik dan berjaya!


Lebih lanjut