리소스 로딩... 로딩...

FMZ 퀀트의 실제 기술 - 틱을 얻는 한계를 깨는 방법

저자:니나바다스, 창작: 2022-03-31 11:14:14, 업데이트: 2022-03-31 14:02:25

재화 선물의 고주파 거래 전략에서, 틱 시장 코팅의 수신 속도는 전략의 수익 결과에 결정적인 영향을 미친다. 그러나 시장의 대부분의 거래 프레임워크는 콜백 모드 메커니즘을 사용합니다. 왜냐하면 onBar/onTick 함수에서는 전체 코드 로직을 처리해야 하기 때문에, 이는 시간 낭비입니다. 당신이 그것을 원하든 원하지 않든, 당신의 전략 로직은 중단되어야 하며, 당신은 상태 기계 모드를 사용해야 합니다.

var state = STATE_IDLE;
function onTick() {
  if (state == STATE_IDLE) {
    // do something...
  } else if (state == ....) {
    // do something
  }
}

FFMZ 퀀트는 역으로 호출 메커니즘을 채택하지 않고 전략 논리를 중단하지 않는 main 함수 입력 메커니즘을 채택하여 사용자가 전략 흐름을 더 자연스럽게 제어 할 수 있습니다. 안정적인 전략 하층으로 C ++ 및 Golang을 사용하며 논리 문제를 해결하기 위해 상층에서 Javascript / Python을 사용하십시오. NNS 훈련을 위해 사용하지 않는 한 스크립트 언어가 느린다고 생각하지 마십시오. NNS 훈련을 사용하더라도 Jit 핫 컴파일을 추가 한 후에는 모든 경우에 충분합니다. Chrome는 IE를 즉시 이기고 있습니다. 이벤트 트리거 메커니즘과 결합, 전략 또한 가장 빠른 속도로 첫 번째 시간에 처리 할 수 있습니다. 예를 들어, 우리가 미래에셋 회사에 접속할 때, 우리는 이 미래에셋 회사의 TAQ만을 받을 수 있습니다. 우리가 얻는 TAQ의 속도와 품질은 우리 자신의 네트워크와 관련이 있고, 미래에셋 회사의 프론트엔드 기계의 부하와도 관련이 있습니다. 그렇다면, 어떻게 더 정확한 미래에셋 틱 데이터를 더 빨리 얻을 수 있습니까?

전략 모델에 따라, 당신은 쉽게 N개의 다른 선물 회사의 계좌를 운영하고, 그들의 TAQ를 통합하고, 가장 빠른 속도로 주문을 할 수 있습니다. 정상적인 상황에서는 미래에셋 회사로부터 초당 2개의 틱을 받을 수 있지만, TAQ 합병 기술을 통해, 예를 들어 MA801을 이용하면 초당 최대 6개의 반복되지 않는 틱을 얻을 수 있습니다.

img

바로 코드로 넘어가자 (코드는 배트에서만 작동할 수 있고 백테스트에서는 작동할 수 없다) IO 함수의 사용은 다음을 가리킬 수 있습니다:https://www.fmz.cn/api#io函数

봇이 플랫폼을 추가할 때, N 개의 선물 회사가 추가되어 TAQ의 동시 합병을 처리할 수 있습니다. 여기서 우리는 일시적으로 두 개를 추가하고 이것을 보여줍니다.

코드는 다음과 같습니다.

function main() {
    Log("Prepare to access the platform and subscribe to TAQ")
    // Step 1: all futures front-end processors are subscribing for symbols 
    _.each(exchanges, function(e) {
        // wait to access the platform, and yes, the strategy runs continuously for 365 days, and it can run even after the market is closed, and it is not the logic of event callback
good mistake
        while (!e.IO("status")) Sleep(1000);
        // Use the _C retry function to eliminate network errors, and subscribe to TAQ just access to the platform; there may be an error that CTP is not ready
        _C(e.SetContractType, "MA801")
        // Switch the TAQ receiving mode to immediate return mode instead of event trigger mode, please refer to the API documentation
        e.IO("mode", 0)
    })
    Log("Start to merge data...")
    // Step 2: here comes the important part
    var preVolume = 0
    while (true) {
        var ts = new Date().getTime()
        // If any platform has tick event, return 
        var e = exchange.IO("wait_any")
        // Reset Volume at a proper time 
        if (e.Nano/1000000 - ts > 60000) {
            preVolume = 0
        }

        if (e.Event == 'tick' && e.Ticker.Volume >= preVolume) {
            Log(ret, e.Ticker.Last, e.Ticker.Volume)
            preVolume = e.Ticker.Volume
        }
    }
}

결과는 다음과 같습니다.

img

21:24:44에 첫 번째 선물 회사의 데이터가 두 번째보다 먼저 도착한다는 것을 볼 수 있습니다. 두 개의 선물 회사를 더하면 결과를 볼 수 있습니다. 당신은 기본적으로 틱을 놓칠 기회가 없습니다. 당신은 높은 주파수 거래 전략을 개발하는 데 사용할 경우, 당신은 매우 중요하고 결정적인 단계를 해결, 즉, 속도, 안정성 및 신뢰성 틱을 얻는.

FMZ 퀀트 (옛 BotVS) 는 전략 안정성과 속도에 대한 중요한 요구사항을 가진 개발자를 위해 특별히 만들어진 플랫폼이다. 하층 프로토콜 기술은 독립적으로 개발되었으며, 리눅스/윈도우/맥/ARM 싱글 칩 마이크로 컴퓨터 또는 모바일 폰에서도 작동 할 수 있으며 주문 속도는 매우 빠르다. TAQ에 대한 반응은 빠르며 고주파 전략을 개발하는 데 가장 좋은 선택이다.


더 많은