avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Strategi Percepatan Aliran Data: Praktik Teknologi Protobuf pada Platform FMZ

Dibuat di: 2025-08-08 16:09:52, diperbarui pada: 2025-08-11 11:59:09
comments   0
hits   368

[TOC]

ringkasan

Dengan pesatnya pertumbuhan volume perdagangan mata uang kripto, efisiensi dan stabilitas push data real-time menjadi krusial. Solusi push WebSocket berbasis Protocol Buffers (protobuf) yang baru diluncurkan oleh MEXC Exchange menawarkan efisiensi transmisi yang lebih tinggi dan latensi yang lebih rendah dibandingkan format JSON tradisional. Artikel ini merinci cara mengakses dan memproses data menggunakan antarmuka protobuf WebSocket baru MEXC pada platform perdagangan kuantitatif FMZ.

1. Latar Belakang Teknis

1.1 Pengantar Buffer Protokol

Protocol Buffers adalah metode serialisasi struktur data yang dikembangkan oleh Google, yang tidak bergantung pada bahasa pemrograman dan platform. Dibandingkan dengan format JSON, protobuf memiliki keunggulan sebagai berikut:

  • Ukuran data lebih kecil:Pengkodean biner menghemat 30-50% ruang dibandingkan dengan format teks
  • Kecepatan penguraian lebih cepat:Penguraian biner 3-10 kali lebih cepat daripada penguraian JSON
  • Pemeriksaan tipe yang kuat: pemeriksaan tipe waktu kompilasi untuk mengurangi kesalahan waktu proses
  • Kompatibilitas mundur: Mendukung penambahan dan penghapusan bidang tanpa memengaruhi kode yang ada

1.2 Ikhtisar Antarmuka WebSocket MEXC

Antarmuka push protobuf WebSocket yang baru ditambahkan dari MEXC terutama menyediakan aliran data berikut:

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

  • Private PrivateAccountV3Api PrivateDealsV3Api PrivateOrdersV3Api

  • Public PublicAggreBookTickerV3Api PublicAggreDealsV3Api PublicBookTickerV3Api …

2. Solusi integrasi platform FMZ

2.1 Persiapan Lingkungan

Implementasi antarmuka WebSocket MEXC protobuf pada platform FMZ memerlukan persiapan berikut:

  1. Dapatkan kunci API MEXC:Ajukan Kunci API dan Kunci Rahasia dari situs web resmi MEXC (hanya diperlukan untuk antarmuka pribadi)
  2. Siapkan file definisi protobuf: Dapatkan file .proto yang disediakan oleh MEXC

2.2 Proses Pembentukan Koneksi

Untuk membangunPublicAggreDealsV3ApiAmbil koneksi saluran sebagai contoh:

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 Penguraian Data Protobuf

Temukan file .proto yang diperlukan:

https://github.com/mexcdevelop // Anda dapat menemukan file .proto pertukaran di sini

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

Karena platform FMZ berbasis JavaScript, kita perlu menggunakan pustaka protobuf.js untuk menangani data biner:

Alamat pemuatan pustaka JS:

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

2.4 Langganan dan Pemrosesan Data

Data yang didorong oleh antarmuka WebSocket adalah data biner dan perlu didekodekan:

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. Contoh implementasi spesifik

3.1 Berlangganan data saluran 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 Uji Perdagangan Langsung

Strategi Percepatan Aliran Data: Praktik Teknologi Protobuf pada Platform FMZ

Seperti yang Anda lihat, data biner yang dikirim oleh antarmuka diterima, dan setelah didekode, data yang dapat dibaca dicetak:

{
    "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. Kesimpulan dan Prospek

4.1 Efek Implementasi

Dengan mengimplementasikan antarmuka WebSocket protobuf MEXC pada platform FMZ, kami memperoleh keuntungan berikut:

  1. Peningkatan efisiensi transmisi data: Secara signifikan mengurangi penggunaan bandwidth dibandingkan dengan format JSON
  2. Latensi berkurang: Parsing biner lebih cepat, mengurangi waktu pemrosesan
  3. Optimalisasi pemanfaatan sumber daya: Penggunaan CPU dan memori lebih sedikit

4.2 Skenario Aplikasi

Program ini sangat cocok untuk:

  • Strategi perdagangan frekuensi tinggi
  • Sistem arbitrase waktu nyata
  • Analisis data pasar
  • Sistem Pemantauan Risiko

4.3 Arah Optimasi Masa Depan

  1. Dukungan untuk lebih banyak tipe data: Memperluas dukungan untuk lebih banyak aliran data MEXC

Referensi

  1. Dokumentasi API resmi MEXC
  2. Dokumentasi resmi Protocol Buffers
  3. Panduan Pengembangan Platform Kuantitatif FMZ

Artikel ini ditulis berdasarkan spesifikasi antarmuka WebSocket protobuf terbaru dari bursa MEXC. Contoh kode telah diuji dan diverifikasi pada platform FMZ.