Type/to search
8
Follow
1364
Followers
データストリーム高速化戦略:FMZプラットフォームにおけるProtobufテクノロジーの実践
Discussions
Created 2025-08-08 16:09:52  Updated 2025-08-11 11:59:09
 0
 747

まとめ

暗号通貨取引量の急速な増加に伴い、リアルタイムデータプッシュの効率性と安定性が極めて重要になっています。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チャネル接続を例に挙げます。

javascript
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ファイルはここにあります

javascript
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 インターフェースによってプッシュされるデータはバイナリ データであり、デコードする必要があります。

javascript
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 チャネルデータを購読する

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

img

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

json
{ "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プラットフォームでテストおよび検証されています。

Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)