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:
- 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)
- 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:
javascript
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
javascript
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:
javascript
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
javascript
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
Wie Sie sehen, werden die von der Schnittstelle gesendeten Binärdaten empfangen und nach der Dekodierung werden die lesbaren Daten ausgedruckt:
json
{
"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:
- Verbesserte Datenübertragungseffizienz: Reduziert die Bandbreitennutzung im Vergleich zum JSON-Format erheblich
- Reduzierte Latenz: Schnelleres binäres Parsen, wodurch die Verarbeitungszeit verkürzt wird
- 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
- Unterstützung für mehr Datentypen: Erweitern Sie die Unterstützung für weitere MEXC-Datenströme
Verweise
- Offizielle API-Dokumentation von MEXC
- Offizielle Dokumentation zu Protocol Buffers
- 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.
- 1

