avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Kuantifikasi FMZ: Analisis Contoh Reka Bentuk Permintaan Biasa dalam Pasaran Mata Wang Kripto (Bahagian 2)

Dicipta dalam: 2023-12-24 22:24:58, dikemas kini pada: 2023-12-25 17:10:56
comments   1
hits   1511

Kuantifikasi FMZ: Analisis Contoh Reka Bentuk Permintaan Biasa dalam Pasaran Mata Wang Kripto (Bahagian 2)

Sebagai tindak balas kepada komen pembaca dalam artikel sebelumnya, contoh program untuk memantau pemindahan akaun kontrak diperlukan Dalam isu ini, kami akan menggunakan Binance Exchange sebagai objek ujian untuk mencapai keperluan ini dan mempelajari cara mereka bentuknya.

Pertukaran mata wang kripto memproses sejumlah besar transaksi setiap hari, termasuk pemindahan aset antara dompet yang berbeza. Memantau pemindahan ini dalam masa nyata adalah penting untuk pedagang dan pembangun. Artikel ini akan meneroka sekeping kod JavaScript yang direka untuk memantau pemindahan aset baru-baru ini pada pertukaran mata wang kripto dan membincangkan komponen utamanya.

Menganalisis keperluan

Selepas berunding dengan dokumentasi Binance Exchange, saya mendapati terdapat antara muka sejarah pemindahan yang boleh menanyakan semua maklumat pemindahan. Memandangkan kami hanya memantau kemungkinan rekod pemindahan, kami tidak perlu mendapatkan semua sejarah pemindahan. Kami hanya perlu menyemak rekod pemindahan terkini dalam julat tertentu pada kekerapan tertentu. Jika mana-mana rekod pemindahan baru ditemui, ia akan dikemas kini dan dimaklumkan.

Gunakan antara muka ini:

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

Jadi bagaimana anda menyemak rekod pemindahan yang baru ditambah? Selepas membaca dokumentasi Binance, saya mendapati bahawa data yang dikembalikan oleh antara muka ini mengandungi cap masa Sangat mudah untuk menggunakan cap masa untuk menilai Selagi terdapat rekod dengan cap masa yang lebih besar daripada rekod semasa, ini bermakna pemindahan baru telah berlaku. Hanya gunakan ini untuk mencetuskannya.

/sapi/v1/asset/transferAntara muka meminta maksimum 100 keping data setiap kali Pengesanan ini tidak akan menyebabkan masalah untuk pemindahan frekuensi rendah melainkan akaun mempunyai lebih daripada 100 operasi pemindahan antara penghujung satu pengesanan dan permulaan pengesanan seterusnya. Pada masa ini, beberapa rekod operasi baharu mungkin terlepas, yang mencukupi untuk senario permintaan umum (biasanya tidak akan ada sebarang strategi untuk memindahkan dana secara gila…).

Sudah tentu, terdapat banyak butiran dalam reka bentuk sebenar Sebagai contoh, apabila menyemak dokumen, kami mendapati terdapat banyak arah putaran, jadi kami perlu memantau setiap arah putaran. Kod mentakrifkanvar dicType = {...}Untuk mengurus semua arahan pemindahan.

Untuk memaparkan kandungan dengan lebih baik, kami menggunakan jadual bar status untuk mengeluarkan lima maklumat pemindahan terakhir dalam antara muka strategi, jadi kami membina jadual yang dipanggil:monitorObjek yang digunakan untuk merekod data. Sudah tentu anda tidak boleh merekodkan maklumat pemindahan selama-lamanya, jadi kami hanya mengekalkan 100 rekod untuk setiap arah pemindahan Jika terdapat lebih daripada 100 rekod, rekod pramatang akan dipadamkan.

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

Gambaran Keseluruhan Kod:

Kod JavaScript yang disediakan termasuk beberapa fungsi yang bersama-sama membina sistem untuk memantau pemindahan aset baru-baru ini. Mari kita pecahkan komponen utama:

  • fungsi getRecentTransferHistory:

Tujuan: Dapatkan sejarah pemindahan aset terkini daripada API pertukaran mengikut parameter yang ditentukan. Parameter: TransType (jenis pemindahan), typeDesc (penerangan jenis). Titik akhir API: /sapi/v1/asset/transfer.

  • fungsi monitorTransfers:

Tujuan: Mengulangi jenis pemindahan yang telah ditetapkan, mendapatkan semula sejarah pemindahan terkini dan merekodkan sebarang pemindahan baharu. Gunakan kamus (dicType) untuk memetakan jenis pemindahan kepada penerangan yang boleh dibaca manusia. Kemas kini objek monitor untuk menjejaki pemindahan terkini setiap jenis.

  • fungsi utama:

Tujuan: Jalankan gelung tak terhingga yang sentiasa memantau pemindahan dan memaparkan data terkini. Gunakan fungsi monitorTransfers secara berkala. Jana jadual untuk setiap jenis pemindahan, termasuk lajur seperti aset, amaun, status, ID transaksi dan cap waktu.

Ciri-ciri Utama:

  • Pemetaan jenis pemindahan dinamik:

Kod ini menggunakan kamus (dicType) untuk memetakan jenis pemindahan kepada nama deskriptif, memberikan penerangan yang jelas tentang sifat setiap pemindahan.

  • Pemantauan masa nyata:

Sistem sentiasa menyemak pemindahan baharu, mengemas kini objek monitor dan mencatat sebarang perubahan yang dikesan.

  • Persembahan data:

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

  • Pengurusan sejarah perpindahan terkini:

Kekalkan senarai tatal pemindahan terkini untuk setiap jenis, memastikan paparan ringkas dan tepat pada masanya.

Ujian sebenar

Pemindahan dilakukan secara manual dan program mengesan operasi pemindahan.

Kuantifikasi FMZ: Analisis Contoh Reka Bentuk Permintaan Biasa dalam Pasaran Mata Wang Kripto (Bahagian 2)

Kuantifikasi FMZ: Analisis Contoh Reka Bentuk Permintaan Biasa dalam Pasaran Mata Wang Kripto (Bahagian 2)

END:

Kod JavaScript yang disediakan menyediakan penyelesaian yang berkuasa untuk memantau pemindahan aset terkini pada pertukaran mata wang kripto. Sifatnya yang dinamik dan masa nyata menjadikannya alat yang berharga untuk pedagang dan pembangun yang ingin memahami pergerakan aset antara dompet yang berbeza. Kod ini boleh diubah suai dan disesuaikan dengan keperluan khusus, menyediakan asas yang kukuh bagi mereka yang ingin meningkatkan strategi perdagangan mata wang kripto mereka atau membangunkan keupayaan pemantauan tambahan.

Artikel ini hanyalah titik permulaan untuk memberikan idea reka bentuk Saya harap perniagaan mata wang kripto anda akan bermaklumat dan berjaya!