avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Estrategia para acelerar el flujo de datos: Práctica de la tecnología Protobuf en la plataforma FMZ

Creado el: 2025-08-08 16:09:52, Actualizado el: 2025-08-11 11:59:09
comments   0
hits   368

[TOC]

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:

  1. 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)
  2. 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:

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í

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:

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

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

Estrategia para acelerar el flujo de datos: Práctica de la tecnología Protobuf en la plataforma FMZ

Como puede ver, se reciben los datos binarios enviados por la interfaz y, después de la decodificación, se imprimen los datos legibles:

{
    "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:

  1. Eficiencia de transmisión de datos mejorada:Reduce significativamente el uso del ancho de banda en comparación con el formato JSON
  2. Latencia reducida:Análisis binario más rápido, lo que reduce el tiempo de procesamiento
  3. 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

  1. Soporte para más tipos de datos:Ampliar el soporte para más flujos de datos MEXC

Información de referencia

  1. Documentación oficial de la API de MEXC
  2. Documentación oficial de Protocol Buffers
  3. 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.