어떻게 상품 선물의 틱 수신 한도를 돌파하는 방법

저자:루비, 2018-08-27 15:58:30, 창작, 업데이트:

티크란 게 뭐죠? 예를 들어, 거래 데이터는 강으로 상상할 수 있으며, 틱은 강의 한 부분의 데이터입니다. 국내 선물의 가장 미세한 곡선은 초당 두 번입니다. 다른 말로, 국내 선물은 500 밀리 초에 하나의 틱을 전송합니다.

대부분의 국내 (이 기사에서 중국을 의미) 소프트웨어는 어떻게 틱을 얻습니까?

그러면 종종 500 밀리 초에 하나 이상의 거래가 있으며, 그 특정 상황은 완전히 블랙 박스입니다. 특히 상품 선물의 고주파 거래 전략에서, 틱 시장의 수신 속도는 전략의 수익성에 결정적인 영향을 미칩니다.

시장의 대부분의 거래 프레임워크는 콜백 모드를 사용, 즉 이상적인 상황에서 최대 500 밀리 초에 하나의 Tick가 있다는 것을 의미합니다. onBar/onTick의 실제 상황 하에서는 Tick을 놓치지 않는 것이 좋습니다. 왜? 왜냐하면 당신은 많은 시간을 필요로하는 onBar/onTick 함수에서 전체 코드 논리를 처리해야 하기 때문입니다. 당신이 원하든 원하지 않든, 당신의 전략 논리는 중단되어야 합니다, 당신은 이렇게 무활 상태를 사용해야합니다:

img

더 발전된 메커니즘

FMZ 양적 거래 플랫폼은 이러한 역으로 호출 메커니즘을 채택하지 않고 전략 논리를 중단하지 않는 주요 기능 메커니즘을 채택하여 사용자가 전략 흐름을 더 자연스럽게 제어 할 수 있습니다. C ++ 및 골랑을 전략 기본 수준으로 사용하여 전략의 상위 수준은 논리 문제를 처리하기 위해 자바스크립트 / 파이썬을 사용합니다. 이벤트 트리거 메커니즘과 결합하여 전략은 또한 처음으로 가장 빠른 속도로 시장을 처리하는 데 사용할 수 있습니다.

스크립트 언어가 느린다고 말하지 마십시오. 신경 네트워크 훈련에 사용하지 않는 한, 심지어는 그랬더라도, Jit 핫 컴파일 추가 후 언제든지 사용할 수 있습니다. 엔트리 레벨 전략은 여기에 작성되지 않으며, 미래에 대한 합성에 대해 이야기하십시오. 예를 들어, 우리가 미래에 대한 회사에 연결하면, 우리는 이 미래에 대한 회사의 시장만을받을 수 있습니다. 우리의 수신의 속도와 품질은 우리 자신의 네트워크와 관련이 있으며, 미래에 대한 회사의 프론트 엔드 기계의 부하와도 관련이 있습니다.

그래서, 어떻게 하면 더 정확한 선물 틱 데이터를 더 빨리 얻을 수 있습니까? FMZ Quant의 전략 모델 하에서, 당신은 쉽게 다른 선물 회사의 계좌를 운영하고, 가장 빠른 속도로 주문을 처리하기 위해 그들의 가격을 결합 할 수 있습니다. 정상적인 상황 하에서는, 우리는 선물 회사에서 초당 두 개의 틱을 얻을 수 있습니다. 하지만, 예를 들어 MA801을 사용하여 시장 결합 기술을 통해, 우리는 초당 최대 6 번과 반복 없이 틱을 얻을 수 있습니다.

img

코드 데모

이 코드는 실제 시장에서만 사용할 수 있으며 백테스트 할 수 없습니다. FMZ 퀀트 플랫폼에서 사용하지 않으면 원칙만을 참조 할 수 있습니다. 거래소를 추가 할 때 시장의 동시 융합 처리를 수행하기 위해 많은 선물 회사가 추가 될 수 있습니다. 여기에 두 개의 거래소를 추가하여 표시하십시오.

img

코드는 다음과 같습니다.

img

데모 효과

img

위와 같이, 21:24:44에서 첫 번째 선물 회사의 데이터는 두 번째보다 먼저 나타납니다. 두 개의 선물 회사를 추가하면 합병하기 위해 5 개 이상의 선물 회사를 추가하면 기본적으로 티크를 놓칠 가능성이 없습니다.

전체 코드를 얻으세요:

function main() {
    log("Prepare to connect to the exchange and subscribe to the market")
    //step 1:All futures front-end machines are starting to subscribe to the variety
    _.each(exchanges, function(e){
        /*Waiting to connect to the exchange. The strategy is running without 
          interruption, and it is not the logic of the event callback. */
        while(!e.IO("status"))Sleep(1000);
        /*Use _C function to troubleshoot network errors. If subscribe to the market just 
        after connecting to exchanges, there may be a CTP unprepared error. */
        _C(e.SetContractType, "MA801")
        /*Switch the market receiving mode to the immediate return mode instead of the 
          event trigger mode. Refer to the API documentation on FMZ website. */
        e.IO("mode", 0)
    })
    Log("start fusing the data")
    //step 2: the important part begins
    var preVolume = 0
    while (true) {
        var ts = new Date().getTime()
        //Return if any exchanges occur tick event
        var ret = exchange.IO("wait_any")
        //Reset Volume at the right time
        if (ret.Nano/1000000 - ts > 60000) {
            preVolume = 0
        }
        //Target the exchange where the event occurred
        var e = exchanges[ret.Index]
        //Get ticker,  because of switching mode as return before, so here is the updated market, and GetTicker won't fail
        //Only the Tick with increasing volume is displayed. It no need to compare actual process, just process it.
        var ticker = e.GetTicker()
        if (ticker.Volume >= preVolume){
            Log(ret,ticker.Last, ticker.Volume)
            preVolume = ticker.Volume
        }
    }
}   



더 많은