avatar of 发明者量化-小小梦 发明者量化-小小梦
フォロー ダイレクトメッセージ
4
フォロー
1271
フォロワー

データストリーム高速化戦略:FMZプラットフォームにおけるProtobufテクノロジーの実践

作成日:: 2025-08-08 16:09:52, 更新日:: 2025-08-11 11:59:09
comments   0
hits   368

[TOC]

まとめ

暗号通貨取引量の急速な増加に伴い、リアルタイムデータプッシュの効率性と安定性が極めて重要になっています。MEXC Exchangeが新たにリリースしたプロトコルバッファ(protobuf)ベースのWebSocketプッシュソリューションは、従来のJSON形式よりも高い転送効率と低レイテンシを実現します。この記事では、FMZクオンツ取引プラットフォーム上でMEXCの新しいWebSocket protobufインターフェースを使用してデータにアクセスし、処理する方法について詳しく説明します。

1. 技術的背景

1.1 プロトコルバッファの概要

Protocol Buffersは、Googleが開発した、言語やプラットフォームに依存しないデータ構造のシリアル化手法です。JSON形式と比較して、Protobufには以下の利点があります。

  • データサイズが小さい: バイナリエンコードはテキスト形式に比べて30~50%のスペースを節約します
  • 解析速度の高速化: バイナリ解析はJSON解析より3~10倍高速です
  • 強力な型チェック: 実行時エラーを減らすためのコンパイル時の型チェック
  • 下位互換性: 既存のコードに影響を与えずにフィールドの追加と削除をサポートします

1.2 MEXC WebSocketインターフェースの概要

MEXC に新しく追加された WebSocket protobuf プッシュ インターフェイスは、主に次のデータ ストリームを提供します。

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

  • Private PrivateAccountV3Api PrivateDealsV3Api PrivateOrdersV3Api

  • Public PublicAggreBookTickerV3Api PublicAggreDealsV3Api PublicBookTickerV3Api …

2. FMZプラットフォーム統合ソリューション

2.1 環境整備

FMZ プラットフォームで MEXC protobuf WebSocket インターフェイスを実装するには、次の準備が必要です。

  1. MEXC APIキーを取得する:MEXC公式サイトからAPIキーとシークレットキーを申請する(プライベートインターフェースのみ必要)
  2. protobuf定義ファイルを準備する: MEXCが提供する.protoファイルを取得する

2.2 接続確立プロセス

確立するPublicAggreDealsV3Apiチャネル接続を例に挙げます。

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 Protobufデータ解析

必要な .proto ファイルを見つけます。

https://github.com/mexcdevelop // 取引所の.protoファイルはここにあります

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

FMZ プラットフォームは JavaScript に基づいているため、バイナリ データを処理するには protobuf.js ライブラリを使用する必要があります。

JSライブラリの読み込みアドレス:

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

2.4 データのサブスクリプションと処理

WebSocket インターフェースによってプッシュされるデータはバイナリ データであり、デコードする必要があります。

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. 具体的な実装例

3.1 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 ライブ取引テスト

データストリーム高速化戦略:FMZプラットフォームにおけるProtobufテクノロジーの実践

ご覧のとおり、インターフェースによってプッシュされたバイナリ データが受信され、デコード後に読み取り可能なデータが出力されます。

{
    "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. 結論と展望

4.1 実施効果

MEXC の protobuf WebSocket インターフェイスを FMZ プラットフォームに実装すると、次の利点が得られます。

  1. データ伝送効率の向上: JSON形式に比べて帯域幅の使用量を大幅に削減します
  2. 遅延の低減: バイナリ解析の高速化により処理時間が短縮されます
  3. リソース利用の最適化: CPUとメモリの使用量が少ない

4.2 アプリケーションシナリオ

このプログラムは特に次の方に適しています:

  • 高頻度取引戦略
  • リアルタイム裁定取引システム
  • 市場データ分析
  • リスク監視システム

4.3 将来の最適化の方向性

  1. より多くのデータ型のサポート: より多くのMEXCデータストリームのサポートを拡張

参考資料

  1. MEXC公式APIドキュメント
  2. プロトコルバッファの公式ドキュメント
  3. FMZ 定量プラットフォーム開発ガイド

この記事は、MEXCエクスチェンジの最新のWebSocket protobufインターフェース仕様に基づいて作成されています。コード例はFMZプラットフォームでテストおよび検証されています。