avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Strategie zur Beschleunigung des Datenstroms: Praxis der Protobuf-Technologie auf der FMZ-Plattform

Erstellt in: 2025-08-08 16:09:52, aktualisiert am: 2025-08-11 11:59:09
comments   0
hits   368

[TOC]

Zusammenfassung

Mit dem rasanten Wachstum des Kryptowährungshandelsvolumens sind Effizienz und Stabilität von Echtzeit-Daten-Pushs entscheidend geworden. Die neu eingeführte WebSocket-Push-Lösung von MEXC Exchange basierend auf Protocol Buffers (protobuf) bietet eine höhere Übertragungseffizienz und geringere Latenz als herkömmliche JSON-Formate. Dieser Artikel beschreibt, wie Sie mit der neuen WebSocket-protobuf-Schnittstelle von MEXC auf der quantitativen Handelsplattform FMZ auf Daten zugreifen und diese verarbeiten.

1. Technischer Hintergrund

1.1 Einführung in Protokollpuffer

Protocol Buffers ist eine von Google entwickelte sprach- und plattformunabhängige Methode zur Serialisierung von Datenstrukturen. Im Vergleich zum JSON-Format bietet Protobuf folgende Vorteile:

  • Kleinere Datenmenge: Die Binärkodierung spart 30-50 % Platz im Vergleich zum Textformat
  • Schnellere Analysegeschwindigkeit: Binäres Parsen ist 3-10 mal schneller als JSON-Parsing
  • Starke Typprüfung: Typprüfung zur Kompilierzeit, um Laufzeitfehler zu reduzieren
  • Abwärtskompatibilität: Unterstützt das Hinzufügen und Löschen von Feldern, ohne den vorhandenen Code zu beeinträchtigen

1.2 Übersicht über die MEXC WebSocket-Schnittstelle

Die neu hinzugefügte WebSocket-Protobuf-Push-Schnittstelle von MEXC bietet hauptsächlich die folgenden Datenströme:

https://www.mexc.com/zh-MY/api-docs/spot-v3/websocket-market-streams

  • Private PrivateAccountV3Api PrivateDealsV3Api PrivateOrdersV3Api

  • Public PublicAggreBookTickerV3Api PublicAggreDealsV3Api PublicBookTickerV3Api …

2. FMZ-Plattformintegrationslösung

2.1 Umweltvorbereitung

Die Implementierung der MEXC protobuf WebSocket-Schnittstelle auf der FMZ-Plattform erfordert die folgenden Vorbereitungen:

  1. Holen Sie sich den MEXC-API-Schlüssel:Beantragen Sie den API-Schlüssel und den Geheimschlüssel auf der offiziellen MEXC-Website (nur für die private Schnittstelle erforderlich)
  2. Bereiten Sie die Protobuf-Definitionsdatei vor: Holen Sie sich die von MEXC bereitgestellte .proto-Datei

2.2 Verbindungsaufbau

Um zu etablierenPublicAggreDealsV3ApiNehmen wir als Beispiel die Kanalverbindung:

function main() {
    var payload = {
        "method": "SUBSCRIPTION",
        "params": [
            "[email protected]@100ms@BTCUSDT"
        ]
    }

    var conn = Dial("wss://wbs-api.mexc.com/ws|payload=" + JSON.stringify(payload))
    while (true) {
        var ret = conn.read()
        if (ret) {
            Log(ret)
        }
    }
}

2.3 Protobuf-Datenanalyse

Suchen Sie die erforderliche .proto-Datei:

https://github.com/mexcdevelop // Die .proto-Dateien der Börse finden Sie hier

syntax = "proto3";
                    
                    
                    
option java_package = "com.mxc.push.common.protobuf";
option optimize_for = SPEED;
option java_multiple_files = true;
option java_outer_classname = "PushDataV3ApiWrapperProto";
                    
message PublicAggreDealsV3Api {

  repeated PublicAggreDealsV3ApiItem deals  = 1;
  string eventType = 2;
}
                    
message PublicAggreDealsV3ApiItem {
  string price = 1;
  string quantity = 2;
  int32 tradeType = 3;
  int64 time = 4;
}
                    
message PushDataV3ApiWrapper {
  string channel = 1;
  oneof body {
    PublicAggreDealsV3Api publicAggreDeals = 314;
  }
  
  optional string symbol = 3;
  optional string symbolId = 4;
  optional int64 createTime = 5;
  optional int64 sendTime = 6;                      
}

Da die FMZ-Plattform auf JavaScript basiert, müssen wir zur Verarbeitung binärer Daten die Bibliothek protobuf.js verwenden:

Ladeadresse der JS-Bibliothek:

https://cdnjs.cloudflare.com/ajax/libs/protobufjs/7.5.3/protobuf.js

2.4 Datenerfassung und -verarbeitung

Die von der WebSocket-Schnittstelle übertragenen Daten sind Binärdaten und müssen dekodiert werden:

while (true) {
    var ret = conn.read()
    if (ret) {
        const uint8arrayData = new Uint8Array(ret)
        const message = PushDataV3ApiWrapper.decode(uint8arrayData)
    
        data = PushDataV3ApiWrapper.toObject(message, {
          longs: String,
          enums: String,
          bytes: String,
          defaults: true,
          arrays: true,
          objects: true
        })
        Log("data:", data)
    }
    LogStatus(_D(), data)
}

3. Konkretes Implementierungsbeispiel

3.1 Abonnieren Sie die PublicAggreDealsV3Api-Kanaldaten

let strPushDataV3ApiWrapper = `syntax = "proto3";



option java_package = "com.mxc.push.common.protobuf";
option optimize_for = SPEED;
option java_multiple_files = true;
option java_outer_classname = "PushDataV3ApiWrapperProto";

message PublicAggreDealsV3Api {

  repeated PublicAggreDealsV3ApiItem deals  = 1;
  string eventType = 2;
}

message PublicAggreDealsV3ApiItem {
  string price = 1;
  string quantity = 2;
  int32 tradeType = 3;
  int64 time = 4;
}

message PushDataV3ApiWrapper {
  string channel = 1;
  oneof body {
    PublicAggreDealsV3Api publicAggreDeals = 314;
  }
  
  optional string symbol = 3;
  optional string symbolId = 4;
  optional int64 createTime = 5;
  optional int64 sendTime = 6;                      
}`

let code = HttpQuery("https://cdnjs.cloudflare.com/ajax/libs/protobufjs/7.5.3/protobuf.js")
let exports = {}
let module = { exports }
new Function("module", "exports", code)(module, exports)
let protobuf = module.exports

function main() {
    const PushDataV3ApiWrapper = protobuf.parse(strPushDataV3ApiWrapper).root.lookupType("PushDataV3ApiWrapper")

    var payload = {
        "method": "SUBSCRIPTION",
        "params": [
            "[email protected]@100ms@BTCUSDT"
        ]
    }
    
    // proxy=socks5://x.x.x.x:xxxx
    var conn = Dial("wss://wbs-api.mexc.com/ws|payload=" + JSON.stringify(payload))
    
    var data = null 
    while (true) {
        var ret = conn.read()
        if (ret) {
            const uint8arrayData = new Uint8Array(ret)
            const message = PushDataV3ApiWrapper.decode(uint8arrayData)
        
            data = PushDataV3ApiWrapper.toObject(message, {
              longs: String,
              enums: String,
              bytes: String,
              defaults: true,
              arrays: true,
              objects: true
            })
            Log("data:", data)
        }
        LogStatus(_D(), data)
    }
}   

3.2 Live-Trading-Test

Strategie zur Beschleunigung des Datenstroms: Praxis der Protobuf-Technologie auf der FMZ-Plattform

Wie Sie sehen, werden die von der Schnittstelle gesendeten Binärdaten empfangen und nach der Dekodierung werden die lesbaren Daten ausgedruckt:

{
    "channel":"[email protected]@100ms@BTCUSDT",
    "symbol":"BTCUSDT",
    "sendTime":"1754487330985",
    "publicAggreDeals":{
        "deals":[
            {"price":"113897.97","quantity":"0.00003103","tradeType":2,"time":"1754487330933"},
            {"price":"113897.97","quantity":"0.00095331","tradeType":2,"time":"1754487330934"},
            {"price":"113897.97","quantity":"0.00154766","tradeType":2,"time":"1754487330935"}
        ],
        "eventType":"[email protected]@100ms"
    }
}

4. Fazit und Ausblick

4.1 Implementierungseffekt

Durch die Implementierung der Protobuf-WebSocket-Schnittstelle von MEXC auf der FMZ-Plattform erzielen wir folgende Vorteile:

  1. Verbesserte Datenübertragungseffizienz: Reduziert die Bandbreitennutzung im Vergleich zum JSON-Format erheblich
  2. Reduzierte Latenz: Schnelleres binäres Parsen, wodurch die Verarbeitungszeit verkürzt wird
  3. Optimierung der Ressourcennutzung: Geringere CPU- und Speicherauslastung

4.2 Anwendungsszenarien

Dieses Programm eignet sich besonders für:

  • Hochfrequenzhandelsstrategien
  • Echtzeit-Arbitrage-System
  • Marktdatenanalyse
  • Risikoüberwachungssystem

4.3 Zukünftige Optimierungsrichtungen

  1. Unterstützung für mehr Datentypen: Erweitern Sie die Unterstützung für weitere MEXC-Datenströme

Verweise

  1. Offizielle API-Dokumentation von MEXC
  2. Offizielle Dokumentation zu Protocol Buffers
  3. FMZ Leitfaden zur quantitativen Plattformentwicklung

Dieser Artikel basiert auf der neuesten WebSocket-Protobuf-Schnittstellenspezifikation der MEXC-Börse. Die Codebeispiele wurden auf der FMZ-Plattform getestet und verifiziert.