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

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

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

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

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

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

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

How to break through the Tick receiving limit of commodity futures

더 발전된 메커니즘

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

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

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

How to break through the Tick receiving limit of commodity futures

코드 데모

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

How to break through the Tick receiving limit of commodity futures

코드는 다음과 같습니다.

How to break through the Tick receiving limit of commodity futures

데모 효과

How to break through the Tick receiving limit of commodity futures

위와 같이, 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
        }
    }
}   



더 많은 내용