FMZ-Quantifizierung: Analyse von Designbeispielen für häufige Bedürfnisse im Kryptowährungsmarkt (II)

Schriftsteller:Kleine Träume, Erstellt: 2023-12-24 22:24:58, aktualisiert: 2023-12-25 17:10:56

img

In diesem Artikel werden wir mit der Binance-Börse als Testobjekt, um diesen Bedarf zu erfüllen, zusammen zu lernen, wie man es entwirft.

Kryptowährungsbörsen verarbeiten täglich eine Vielzahl von Transaktionen, einschließlich der Verteilung von Vermögenswerten zwischen verschiedenen Geldbörsen. Die Überwachung dieser Verteilung in Echtzeit ist für Händler und Entwickler von entscheidender Bedeutung. In diesem Artikel wird ein JavaScript-Code untersucht, der die jüngsten Verteilung von Vermögenswerten an Kryptowährungsbörsen überwachen soll, und seine wichtigsten Komponenten diskutiert.

Analyse der Bedürfnisse

Die Dokumentation der Binance-Börse wurde durchsucht und es wurde festgestellt, dass es eine Schalthistorie-Schnittstelle gibt, mit der alle Schaltinformationen abgerufen werden können. Da wir nur die möglichen Schaltprotokolle überwachen, müssen wir nicht alle Schalthistorien abrufen. Wir müssen nur Schaltprotokolle innerhalb eines bestimmten Bereichs der letzten Zeit nach einer bestimmten Frequenz überprüfen.

Sie können sich mit dieser Schnittstelle beschäftigen:

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

Wie überprüft man dann die neuen Schnittlisten? Nach einem Blick in die Dokumentation von Binance wurde festgestellt, dass die Daten, die von dieser Schnittstelle zurückgegeben werden, eine Zeitstange haben. Es ist sehr einfach, mit der Zeitstange zu entscheiden, ob eine neue Schnittliste stattgefunden hat, wenn die größte Zeitstange der aktuellen Aufzeichnung größer ist.

/sapi/v1/asset/transferDie Interface bittet jeweils um maximal 100 Daten, was für eine Spaltung von niedrigen Frequenzen kein Problem darstellt, es sei denn, dass ein Konto mehr als 100 Spaltungen hat, bevor die nächste beginnt.

Natürlich gibt es noch viele Details beim eigentlichen Entwurf, zum Beispiel, wenn man die Dokumentation anschaut, findet man, dass es viele Abzweigungsrichtungen gibt, also müssen wir jede Abzweigungsrichtung überwachen.var dicType = {...}Sie sind in der Lage, alle Richtungen zu steuern.

Um den Inhalt besser darzustellen, haben wir eine Status-Tabelle benutzt, um die letzten 5 Posten in der Strategie-Interface auszuführen, also haben wir einen Namen erstellt:monitorObjekt für die Datenerfassung. Natürlich kann man nicht unbegrenzt viele Aufzeichnungen verschieben, also halten wir nur 100 Aufzeichnungen in jeder Schnittrichtung, und wenn wir über 100 aufzeichnen, werden zu früh entfernte Aufzeichnungen gelöscht.

Codebeispiel

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

Der Code ist hier:

Der bereitgestellte JavaScript-Code besteht aus mehreren Funktionen, die zusammen ein System für die Überwachung der jüngsten Vermögensverteilung bauen.

  • Die Funktion getRecentTransferHistory:

    Zweck: Erhalten Sie die jüngste Verlagshistorie aus der API der Börse gemäß den angegebenen Parametern. Die Parameter sind: TransType (Typ der Übertragung), typeDesc (Typ der Beschreibung) ‒ Die API-Endpunkte sind /sapi/v1/asset/transfer.

  • Die Funktion monitorTransfers:

    Zweck: Durchsuchen Sie vordefinierte Umschlagtypen, holen Sie sich die jüngste Umschlaggeschichte und registrieren Sie alle neuen Umschläge. Verwenden Sie dicType, um den Typ zu einer leicht lesbaren Beschreibung zu bringen. Aktualisieren Sie die Monitorobjekte, um die neuesten Umschnitte für jeden Typ zu verfolgen.

  • Hauptfunktion:

    Ziel: Ein endloser Kreislauf zu betreiben, ständig zu überwachen und die neuesten Daten anzuzeigen. Die Funktion monitorTransfers wird regelmäßig verwendet. Erstellen Sie eine Tabelle für jede Art von Umschlag, die Kolumnen wie Vermögenswerte, Beträge, Status, Transaktions-ID und Zeitrahmen enthält.

Die wichtigsten Merkmale:

  • Dynamische Karten:

    Code-Use-Dictionary (dicType) bildet den Umschlagtyp in den beschreibenden Namen ab, um eine klare Beschreibung der Eigenschaften jedes Umschlags zu liefern.

  • Wir beobachten in Echtzeit:

    Das System überprüft ständig neue Schnittstellen, aktualisiert Monitorobjekte und zeichnet alle festgestellten Änderungen auf.

  • Die Daten zeigen:

    Verwenden Sie eine Tabelle, um alle Arten von Umschlagdaten darzustellen, einschließlich der relevanten Details wie Vermögenswerte, Beträge, Status, Transaktions-ID und Zeitfenster.

  • Die Geschichte wurde kürzlich übertragen:

    Es wird eine Rollliste mit den jüngsten Umschreibungen für jede Art geführt, um eine kurze und zeitnahe Darstellung zu gewährleisten.

Tests auf der Festplatte

Man schaltete manuell einen Schnitt um und der Prozess erkannte einen Schnitt um.

img

img

Ende:

Der bereitgestellte JavaScript-Code bietet eine leistungsfähige Lösung zur Überwachung der jüngsten Asset-Splittungen an Kryptowährungsbörsen. Seine dynamischen und Echtzeit-Eigenschaften machen ihn zu einem wertvollen Tool für Händler und Entwickler, die nach Vermögensbewegungen zwischen verschiedenen Wallets suchen. Dieser Code kann anhand spezifischer Bedürfnisse modifiziert und angepasst werden und bietet eine solide Basis für diejenigen, die ihre Kryptowährungs-Handelsstrategien verbessern oder zusätzliche Überwachungsfunktionen entwickeln möchten.

Dieser Artikel ist eine Idee für ein Design, das Ihnen eine informative und erfolgreiche Karriere in der Kryptowährung ermöglicht.


Mehr

98-K-Band-Tracking_LongKleine Träume Lehrer ist die Realität Version von mehr A-Träume Kleine Träume Lehrer am meisten liebe dich