avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Strategi Kelajuan Aliran Data: Amalan Teknologi Protobuf pada Platform FMZ

Dicipta dalam: 2025-08-08 16:09:52, dikemas kini pada: 2025-08-11 11:59:09
comments   0
hits   368

[TOC]

ringkasan

Dengan pertumbuhan pesat volum dagangan mata wang kripto, kecekapan dan kestabilan dorongan data masa nyata telah menjadi penting. Penyelesaian tolak WebSocket Exchange yang baru dilancarkan oleh MEXC Exchange berdasarkan Penampan Protokol (protobuf) menawarkan kecekapan penghantaran yang lebih tinggi dan kependaman yang lebih rendah daripada format JSON tradisional. Artikel ini memperincikan cara mengakses dan memproses data menggunakan antara muka protobuf WebSocket baharu MEXC pada platform dagangan kuantitatif FMZ.

1. Latar Belakang Teknikal

1.1 Pengenalan kepada Penampan Protokol

Penampan Protokol ialah kaedah bebas bahasa dan bebas platform untuk menyusun struktur data yang dibangunkan oleh Google. Berbanding dengan format JSON, protobuf mempunyai kelebihan berikut:

  • Saiz data yang lebih kecil: Pengekodan binari menjimatkan 30-50% ruang berbanding dengan format teks
  • Kelajuan penghuraian yang lebih pantas: Penghuraian binari adalah 3-10 kali lebih cepat daripada penghuraian JSON
  • Pemeriksaan jenis yang kuat: pemeriksaan jenis masa kompilasi untuk mengurangkan ralat masa jalan
  • Keserasian ke belakang: Menyokong menambah dan memadam medan tanpa menjejaskan kod sedia ada

1.2 Gambaran Keseluruhan Antara Muka WebSocket MEXC

Antara muka tolak protobuf WebSocket yang baru ditambah MEXC terutamanya 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. Penyelesaian integrasi platform FMZ

2.1 Penyediaan Alam Sekitar

Melaksanakan antara muka WebSocket protobuf MEXC pada platform FMZ memerlukan persediaan berikut:

  1. Dapatkan kunci API MEXC:Mohon Kunci API dan Kunci Rahsia dari laman web rasmi MEXC (hanya diperlukan untuk antara muka peribadi)
  2. Sediakan fail definisi protobuf: Dapatkan fail .proto yang disediakan oleh MEXC

2.2 Proses Penubuhan Sambungan

Untuk menubuhkanPublicAggreDealsV3ApiAmbil sambungan 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 Penghuraian Data Protobuf

Cari fail .proto yang diperlukan:

https://github.com/mexcdevelop // Anda boleh menemui fail .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;                      
}

Memandangkan platform FMZ adalah berdasarkan JavaScript, kami perlu menggunakan perpustakaan protobuf.js untuk mengendalikan data binari:

Alamat pemuatan perpustakaan JS:

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

2.4 Langganan dan Pemprosesan Data

Data yang ditolak oleh antara muka WebSocket ialah data binari dan perlu dinyahkodkan:

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 pelaksanaan khusus

3.1 Langgan 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 Ujian Dagangan Langsung

Strategi Kelajuan Aliran Data: Amalan Teknologi Protobuf pada Platform FMZ

Seperti yang anda lihat, data binari yang ditolak oleh antara muka diterima, dan selepas penyahkodan, data yang boleh 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 Tinjauan

4.1 Kesan Pelaksanaan

Dengan melaksanakan antara muka WebSocket protobuf MEXC pada platform FMZ, kami memperoleh kelebihan berikut:

  1. Kecekapan penghantaran data yang lebih baik: Mengurangkan penggunaan lebar jalur dengan ketara berbanding format JSON
  2. Latensi dikurangkan: Penghuraian binari yang lebih pantas, mengurangkan masa pemprosesan
  3. Pengoptimuman penggunaan sumber: Kurang penggunaan CPU dan memori

4.2 Senario Aplikasi

Program ini amat sesuai untuk:

  • Strategi perdagangan frekuensi tinggi
  • Sistem timbang tara masa nyata
  • Analisis data pasaran
  • Sistem Pemantauan Risiko

4.3 Arah Pengoptimuman Masa Depan

  1. Sokongan untuk lebih banyak jenis data: Kembangkan sokongan untuk lebih banyak aliran data MEXC

Rujukan

  1. Dokumentasi API rasmi MEXC
  2. Dokumentasi rasmi Penampan Protokol
  3. Panduan Pembangunan Platform Kuantitatif FMZ

Artikel ini ditulis berdasarkan spesifikasi antara muka protobuf WebSocket terkini bagi pertukaran MEXC. Contoh kod telah diuji dan disahkan pada platform FMZ.