avatar of 发明者量化-小小梦 发明者量化-小小梦
집중하다 사신
4
집중하다
1271
수행원

데이터 스트림 속도 향상 전략: FMZ 플랫폼에서의 Protobuf 기술 실습

만든 날짜: 2025-08-08 16:09:52, 업데이트 날짜: 2025-08-11 11:59:09
comments   0
hits   368

[TOC]

요약

암호화폐 거래량이 급증함에 따라 실시간 데이터 푸시의 효율성과 안정성이 매우 중요해졌습니다. MEXC 거래소에서 새롭게 출시한 프로토콜 버퍼(protobuf) 기반 웹소켓 푸시 솔루션은 기존 JSON 형식보다 높은 전송 효율성과 낮은 지연 시간을 제공합니다. 본 문서에서는 FMZ 양적 거래 플랫폼에서 MEXC의 새로운 웹소켓 protobuf 인터페이스를 사용하여 데이터에 액세스하고 처리하는 방법을 자세히 설명합니다.

1. 기술적 배경

1.1 프로토콜 버퍼 소개

Protocol Buffers는 Google에서 개발한 언어 및 플랫폼 독립적인 데이터 구조 직렬화 방법입니다. JSON 형식과 비교했을 때, protobuf는 다음과 같은 장점을 가지고 있습니다.

  • 더 작은 데이터 크기: 이진 인코딩은 텍스트 형식에 비해 30-50%의 공간을 절약합니다.
  • 더 빠른 파싱 속도: 바이너리 파싱은 JSON 파싱보다 3~10배 더 빠릅니다.
  • 강력한 유형 검사: 런타임 오류를 줄이기 위한 컴파일 타임 유형 검사
  • 이전 버전과의 호환성: 기존 코드에 영향을 주지 않고 필드 추가 및 삭제를 지원합니다.

1.2 MEXC WebSocket 인터페이스 개요

MEXC의 새로 추가된 WebSocket 프로토콜 버퍼 푸시 인터페이스는 주로 다음과 같은 데이터 스트림을 제공합니다.

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 구현 효과

FMZ 플랫폼에 MEXC의 protobuf WebSocket 인터페이스를 구현하면 다음과 같은 이점을 얻을 수 있습니다.

  1. 향상된 데이터 전송 효율성: JSON 형식에 비해 대역폭 사용량이 크게 줄어듭니다.
  2. 지연 시간 감소: 바이너리 파싱 속도가 빨라 처리 시간이 단축됩니다.
  3. 자원 활용 최적화: CPU 및 메모리 사용량 감소

4.2 응용 프로그램 시나리오

이 프로그램은 특히 다음과 같은 사람에게 적합합니다:

  • 고빈도 거래 전략
  • 실시간 차익거래 시스템
  • 시장 데이터 분석
  • 위험 모니터링 시스템

4.3 향후 최적화 방향

  1. 더 많은 데이터 유형 지원: 더 많은 MEXC 데이터 스트림에 대한 지원 확장

참고 자료

  1. MEXC 공식 API 문서
  2. Protocol Buffers 공식 문서
  3. FMZ 양적 플랫폼 개발 가이드

이 문서는 MEXC 거래소의 최신 WebSocket 프로토콜 버퍼 인터페이스 사양을 기반으로 작성되었습니다. 코드 예제는 FMZ 플랫폼에서 테스트 및 검증되었습니다.