avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Kuantifikasi FMZ: Analisis Contoh Desain Permintaan Umum di Pasar Mata Uang Kripto (Bagian 2)

Dibuat di: 2023-12-24 22:24:58, diperbarui pada: 2023-12-25 17:10:56
comments   1
hits   1511

Kuantifikasi FMZ: Analisis Contoh Desain Permintaan Umum di Pasar Mata Uang Kripto (Bagian 2)

Menanggapi komentar pembaca di artikel sebelumnya, diperlukan contoh program untuk memantau transfer akun kontrak. Dalam edisi ini, kami akan menggunakan Binance Exchange sebagai objek uji untuk mencapai persyaratan ini dan mempelajari cara mendesainnya.

Bursa mata uang kripto memproses sejumlah besar transaksi setiap hari, termasuk transfer aset antar dompet yang berbeda. Pemantauan transfer ini secara real-time sangat penting bagi para pedagang dan pengembang. Artikel ini akan membahas sepotong kode JavaScript yang dirancang untuk memantau transfer aset terkini di bursa mata uang kripto dan membahas komponen utamanya.

Menganalisis persyaratan

Setelah berkonsultasi dengan dokumentasi Binance Exchange, saya menemukan bahwa ada antarmuka riwayat transfer yang dapat menanyakan semua informasi transfer. Karena kami hanya memantau kemungkinan catatan transfer, kami tidak perlu memperoleh semua riwayat transfer. Kita hanya perlu memeriksa catatan transfer terkini dalam rentang tertentu dan frekuensi tertentu. Jika ada catatan transfer baru yang ditemukan, catatan tersebut akan diperbarui dan diberitahukan.

Gunakan antarmuka ini:

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

Jadi bagaimana Anda memeriksa catatan transfer yang baru ditambahkan? Setelah membaca dokumentasi Binance, saya menemukan bahwa data yang dikembalikan oleh antarmuka ini berisi stempel waktu. Sangat mudah untuk menggunakan stempel waktu untuk menilai. Selama ada catatan dengan stempel waktu yang lebih besar dari catatan saat ini, itu berarti transfer baru telah terjadi. . Gunakan ini untuk memicunya.

/sapi/v1/asset/transferAntarmuka meminta maksimal 100 data setiap kali. Deteksi ini tidak akan menimbulkan masalah untuk transfer frekuensi rendah kecuali akun tersebut memiliki lebih dari 100 operasi transfer antara akhir satu deteksi dan awal deteksi berikutnya. Pada saat ini, beberapa catatan operasi baru mungkin terlewat, yang cukup untuk skenario permintaan umum (umumnya tidak akan ada strategi untuk mentransfer dana secara gila-gilaan…).

Tentu saja, ada banyak detail dalam desain yang sebenarnya. Misalnya, saat memeriksa dokumen, kami menemukan bahwa ada banyak arah rotasi, jadi kami perlu memantau setiap arah rotasi. Kode tersebut mendefinisikanvar dicType = {...}Untuk mengelola semua arah transfer.

Untuk menampilkan konten dengan lebih baik, kami menggunakan tabel bilah status untuk menampilkan lima informasi transfer terakhir dalam antarmuka strategi, jadi kami membuat tabel yang disebut:monitorObjek yang digunakan untuk merekam data. Tentu saja Anda tidak dapat menyimpan informasi transfer tanpa batas waktu, jadi kami hanya menyimpan 100 catatan untuk setiap arah transfer. Jika ada lebih dari 100 catatan, catatan yang belum waktunya akan dihapus.

Contoh Kode

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

Ikhtisar Kode:

Kode JavaScript yang disediakan mencakup beberapa fungsi yang bersama-sama membangun sistem untuk memantau transfer aset terkini. Mari kita uraikan komponen utamanya:

  • fungsi getRecentTransferHistory:

Tujuan: Mendapatkan riwayat transfer aset terkini dari API bursa sesuai dengan parameter yang ditentukan. Parameter: TransType (tipe transfer), typeDesc (deskripsi tipe). Titik akhir API: /sapi/v1/asset/transfer.

  • fungsi monitorTransfers:

Tujuan: Mengulangi jenis transfer yang telah ditetapkan sebelumnya, mengambil riwayat transfer terkini, dan mencatat setiap transfer baru. Gunakan kamus (dicType) untuk memetakan jenis transfer ke deskripsi yang dapat dibaca manusia. Perbarui objek monitor untuk melacak transfer terkini setiap jenis.

  • fungsi utama:

Tujuan: Menjalankan loop tak terbatas yang terus memantau transfer dan menampilkan data terkini. Gunakan fungsi monitorTransfers secara berkala. Buat tabel untuk setiap jenis transfer, termasuk kolom seperti aset, jumlah, status, ID transaksi, dan stempel waktu.

Fitur Utama:

  • Pemetaan jenis transfer dinamis:

Kode tersebut menggunakan kamus (dicType) untuk memetakan jenis transfer ke nama deskriptif, memberikan deskripsi yang jelas tentang sifat setiap transfer.

  • Pemantauan waktu nyata:

Sistem terus memeriksa transfer baru, memperbarui objek monitor, dan mencatat setiap perubahan yang terdeteksi.

  • Presentasi data:

Gunakan tabel untuk menyajikan setiap jenis data transfer, termasuk rincian relevan seperti aset, jumlah, status, ID transaksi, dan stempel waktu.

  • Manajemen riwayat transfer terkini:

Pertahankan daftar gulir transfer terkini untuk setiap jenis, yang memastikan tampilan yang ringkas dan tepat waktu.

Ujian sesungguhnya

Transfer dilakukan secara manual dan program mendeteksi operasi transfer.

Kuantifikasi FMZ: Analisis Contoh Desain Permintaan Umum di Pasar Mata Uang Kripto (Bagian 2)

Kuantifikasi FMZ: Analisis Contoh Desain Permintaan Umum di Pasar Mata Uang Kripto (Bagian 2)

END:

Kode JavaScript yang disediakan memberikan solusi ampuh untuk memantau transfer aset terkini di bursa mata uang kripto. Sifatnya yang dinamis dan real-time menjadikannya alat yang berharga bagi para pedagang dan pengembang yang ingin memahami pergerakan aset antara dompet yang berbeda. Kode ini dapat dimodifikasi dan disesuaikan dengan kebutuhan spesifik, menyediakan landasan yang kuat bagi mereka yang ingin meningkatkan strategi perdagangan mata uang kripto mereka atau mengembangkan kemampuan pemantauan tambahan.

Artikel ini hanyalah titik awal untuk memberikan ide desain. Saya harap bisnis mata uang kripto Anda akan informatif dan sukses!