resumen
Con el rápido crecimiento del volumen de operaciones de criptomonedas, la eficiencia y la estabilidad del envío de datos en tiempo real se han vuelto cruciales. La nueva solución WebSocket push de MEXC Exchange, basada en Protocol Buffers (protobuf), ofrece mayor eficiencia de transmisión y menor latencia que los formatos JSON tradicionales. Este artículo detalla cómo acceder y procesar datos utilizando la nueva interfaz WebSocket protobuf de MEXC en la plataforma de trading cuantitativo FMZ.
1. Antecedentes técnicos
1.1 Introducción a los buffers de protocolo
Protocol Buffers es un método independiente del lenguaje y de la plataforma para serializar estructuras de datos, desarrollado por Google. Comparado con el formato JSON, protobuf ofrece las siguientes ventajas:
- Tamaño de datos más pequeño:La codificación binaria ahorra entre un 30 y un 50 % de espacio en comparación con el formato de texto.
- Velocidad de análisis más rápida:El análisis binario es de 3 a 10 veces más rápido que el análisis JSON
- Comprobación de tipos fuerte: verificación de tipos en tiempo de compilación para reducir errores de ejecución
- Compatibilidad con versiones anteriores:Admite agregar y eliminar campos sin afectar el código existente
1.2 Descripción general de la interfaz WebSocket de MEXC
La interfaz push protobuf WebSocket recientemente agregada de MEXC proporciona principalmente los siguientes flujos de datos:
https://www.mexc.com/zh-MY/api-docs/spot-v3/websocket-market-streams
-
Private
PrivateAccountV3Api
PrivateDealsV3Api
PrivateOrdersV3Api -
Public
PublicAggreBookTickerV3Api
PublicAggreDealsV3Api
PublicBookTickerV3Api
...
2. Solución de integración de la plataforma FMZ
2.1 Preparación ambiental
La implementación de la interfaz WebSocket protobuf MEXC en la plataforma FMZ requiere los siguientes preparativos:
- Obtenga la clave API de MEXC:Solicite la clave API y la clave secreta desde el sitio web oficial de MEXC (solo se requiere para la interfaz privada)
- Preparar el archivo de definición de protobuf: Obtenga el archivo .proto proporcionado por MEXC
2.2 Proceso de establecimiento de la conexión
Para establecerPublicAggreDealsV3ApiTomemos como ejemplo la conexión del canal:
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 Análisis de datos de Protobuf
Encuentre el archivo .proto requerido:
https://github.com/mexcdevelop // Puedes encontrar los archivos .proto del intercambio aquí
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;
}
Dado que la plataforma FMZ se basa en JavaScript, necesitamos usar la biblioteca protobuf.js para manejar datos binarios:
Dirección de carga de la biblioteca JS:
https://cdnjs.cloudflare.com/ajax/libs/protobufjs/7.5.3/protobuf.js
2.4 Suscripción y procesamiento de datos
Los datos enviados por la interfaz WebSocket son datos binarios y necesitan ser decodificados:
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. Ejemplo de implementación específica
3.1 Suscribirse a los datos del canal PublicAggreDealsV3Api
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 Prueba de trading en vivo
Como puede ver, se reciben los datos binarios enviados por la interfaz y, después de la decodificación, se imprimen los datos legibles:
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. Conclusión y perspectivas
4.1 Efecto de implementación
Al implementar la interfaz WebSocket protobuf de MEXC en la plataforma FMZ, obtenemos las siguientes ventajas:
- Eficiencia de transmisión de datos mejorada:Reduce significativamente el uso del ancho de banda en comparación con el formato JSON
- Latencia reducida:Análisis binario más rápido, lo que reduce el tiempo de procesamiento
- Optimización de la utilización de recursos:Menos uso de CPU y memoria
4.2 Escenarios de aplicación
Este programa es especialmente adecuado para:
- Estrategias de trading de alta frecuencia
- Sistema de arbitraje en tiempo real
- Análisis de datos de mercado
- Sistema de Monitoreo de Riesgos
4.3 Direcciones de optimización futuras
- Soporte para más tipos de datos:Ampliar el soporte para más flujos de datos MEXC
Información de referencia
- Documentación oficial de la API de MEXC
- Documentación oficial de Protocol Buffers
- Guía de desarrollo de la plataforma cuantitativa FMZ
Este artículo se basa en la última especificación de la interfaz protobuf de WebSocket del intercambio MEXC. Los ejemplos de código se han probado y verificado en la plataforma FMZ.
- 1

