avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Stratégie d'accélération du flux de données : pratique technologique Protobuf sur la plateforme FMZ

Créé le: 2025-08-08 16:09:52, Mis à jour le: 2025-08-11 11:59:09
comments   0
hits   368

[TOC]

résumé

Avec la croissance rapide du volume des échanges de cryptomonnaies, l’efficacité et la stabilité de la transmission de données en temps réel sont devenues cruciales. La nouvelle solution WebSocket de MEXC Exchange, basée sur les tampons de protocole (protobuf), offre une meilleure efficacité de transmission et une latence plus faible que les formats JSON traditionnels. Cet article explique comment accéder aux données et les traiter grâce à la nouvelle interface WebSocket protobuf de MEXC sur la plateforme de trading quantitatif FMZ.

1. Contexte technique

1.1 Introduction aux tampons de protocole

Protocol Buffers est une méthode de sérialisation des structures de données, indépendante du langage et de la plateforme, développée par Google. Comparé au format JSON, protobuf présente les avantages suivants :

  • Taille de données plus petite:L’encodage binaire permet d’économiser 30 à 50 % d’espace par rapport au format texte
  • Vitesse d’analyse plus rapide:L’analyse binaire est 3 à 10 fois plus rapide que l’analyse JSON
  • Vérification de type forte: vérification de type au moment de la compilation pour réduire les erreurs d’exécution
  • Rétrocompatibilité: Prend en charge l’ajout et la suppression de champs sans affecter le code existant

1.2 Présentation de l’interface WebSocket MEXC

L’interface push protobuf WebSocket nouvellement ajoutée de MEXC fournit principalement les flux de données suivants :

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

  • Private PrivateAccountV3Api PrivateDealsV3Api PrivateOrdersV3Api

  • Public PublicAggreBookTickerV3Api PublicAggreDealsV3Api PublicBookTickerV3Api …

2. Solution d’intégration de la plateforme FMZ

2.1 Préparation environnementale

L’implémentation de l’interface WebSocket du protocole MEXC sur la plate-forme FMZ nécessite les préparations suivantes :

  1. Obtenez la clé API MEXC:Demandez une clé API et une clé secrète sur le site officiel du MEXC (requis uniquement pour l’interface privée)
  2. Préparer le fichier de définition protobuf: Obtenez le fichier .proto fourni par MEXC

2.2 Processus d’établissement de la connexion

Pour établirPublicAggreDealsV3ApiPrenons l’exemple de la connexion des canaux :

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 Analyse des données Protobuf

Recherchez le fichier .proto requis :

https://github.com/mexcdevelop // Vous pouvez trouver les fichiers .proto de l’échange ici

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

Étant donné que la plateforme FMZ est basée sur JavaScript, nous devons utiliser la bibliothèque protobuf.js pour gérer les données binaires :

Adresse de chargement de la bibliothèque JS :

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

2.4 Abonnement et traitement des données

Les données poussées par l’interface WebSocket sont des données binaires et doivent être décodées :

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. Exemple de mise en œuvre spécifique

3.1 Abonnez-vous aux données du 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 Test de trading en direct

Stratégie d’accélération du flux de données : pratique technologique Protobuf sur la plateforme FMZ

Comme vous pouvez le voir, les données binaires poussées par l’interface sont reçues et, après décodage, les données lisibles sont imprimées :

{
    "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. Conclusion et perspectives

4.1 Effet de la mise en œuvre

En implémentant l’interface WebSocket protobuf de MEXC sur la plateforme FMZ, nous obtenons les avantages suivants :

  1. Amélioration de l’efficacité de la transmission des données:Réduit considérablement l’utilisation de la bande passante par rapport au format JSON
  2. Latence réduite: Analyse binaire plus rapide, réduisant le temps de traitement
  3. Optimisation de l’utilisation des ressources:Moins d’utilisation du processeur et de la mémoire

4.2 Scénarios d’application

Ce programme est particulièrement adapté pour :

  • Stratégies de trading à haute fréquence
  • Système d’arbitrage en temps réel
  • Analyse des données de marché
  • Système de surveillance des risques

4.3 Orientations d’optimisation futures

  1. Prise en charge de davantage de types de données:Étendre la prise en charge de davantage de flux de données MEXC

À lire

  1. Documentation officielle de l’API MEXC
  2. Documentation officielle de Protocol Buffers
  3. Guide de développement de la plateforme quantitative FMZ

Cet article s’appuie sur la dernière spécification de l’interface WebSocket protobuf de la plateforme d’échange MEXC. Les exemples de code ont été testés et vérifiés sur la plateforme FMZ.