티크란 게 뭐죠? 예를 들어, 거래 데이터는 강으로 상상할 수 있으며, 틱은 강의 한 부분의 데이터입니다. 국내 선물의 가장 미세한 곡선은 초당 두 번입니다. 다른 말로, 국내 선물은 500 밀리 초에 하나의 틱을 전송합니다.
대부분의 국내 (이 기사에서 중국을 의미) 소프트웨어는 어떻게 틱을 얻습니까?
그러면 종종 500 밀리 초에 하나 이상의 거래가 있으며, 그 특정 상황은 완전히 블랙 박스입니다. 특히 상품 선물의 고주파 거래 전략에서, 틱 시장의 수신 속도는 전략의 수익성에 결정적인 영향을 미칩니다.
시장의 대부분의 거래 프레임워크는 콜백 모드를 사용, 즉 이상적인 상황에서 최대 500 밀리 초에 하나의 Tick가 있다는 것을 의미합니다. onBar/onTick의 실제 상황 하에서는 Tick을 놓치지 않는 것이 좋습니다. 왜? 왜냐하면 당신은 많은 시간을 필요로하는 onBar/onTick 함수에서 전체 코드 논리를 처리해야 하기 때문입니다. 당신이 원하든 원하지 않든, 당신의 전략 논리는 중단되어야 합니다, 당신은 이렇게 무활 상태를 사용해야합니다:
더 발전된 메커니즘
FMZ 양적 거래 플랫폼은 이러한 역으로 호출 메커니즘을 채택하지 않고 전략 논리를 중단하지 않는 주요 기능 메커니즘을 채택하여 사용자가 전략 흐름을 더 자연스럽게 제어 할 수 있습니다. C ++ 및 골랑을 전략 기본 수준으로 사용하여 전략의 상위 수준은 논리 문제를 처리하기 위해 자바스크립트 / 파이썬을 사용합니다. 이벤트 트리거 메커니즘과 결합하여 전략은 또한 처음으로 가장 빠른 속도로 시장을 처리하는 데 사용할 수 있습니다.
스크립트 언어가 느린다고 말하지 마십시오. 신경 네트워크 훈련에 사용하지 않는 한, 심지어는 그랬더라도, Jit 핫 컴파일 추가 후 언제든지 사용할 수 있습니다. 엔트리 레벨 전략은 여기에 작성되지 않으며, 미래에 대한 합성에 대해 이야기하십시오. 예를 들어, 우리가 미래에 대한 회사에 연결하면, 우리는 이 미래에 대한 회사의 시장만을받을 수 있습니다. 우리의 수신의 속도와 품질은 우리 자신의 네트워크와 관련이 있으며, 미래에 대한 회사의 프론트 엔드 기계의 부하와도 관련이 있습니다.
그래서, 어떻게 하면 더 정확한 선물 틱 데이터를 더 빨리 얻을 수 있습니까? FMZ Quant
코드 데모
이 코드는 실제 시장에서만 사용할 수 있으며 백테스트 할 수 없습니다. FMZ 퀀트 플랫폼에서 사용하지 않으면 원칙만을 참조 할 수 있습니다. 거래소를 추가 할 때 시장의 동시 융합 처리를 수행하기 위해 많은 선물 회사가 추가 될 수 있습니다. 여기에 두 개의 거래소를 추가하여 표시하십시오.
코드는 다음과 같습니다.
데모 효과
위와 같이, 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
}
}
}