Что такое Тик? Например, данные о транзакциях можно представить в виде реки, а Tick - это данные отрезка реки. Наилучшая гранулированность внутренних фьючерсов составляет два раза в секунду. Другими словами, внутренние фьючерсы отправляют до одного Tick в 500 миллисекунд.
Как большинство отечественных (в этой статье Китай) программ получают Tick?
Тогда за 500 миллисекунд часто происходит более одной сделки, и конкретная ситуация в ней является полностью черным ящиком.
Большинство торговых платформ на рынке используют режим обратного вызова, что означает, что в идеальной ситуации в 500 миллисекунд существует не больше одного Tick. В реальной ситуации на Bar/onTick лучше не пропустить Tick. почему? Потому что вам нужно иметь дело со всей логикой кода в функции onBar/onTick, что занимает много времени. Хотите вы этого или нет, ваша логика стратегии должна быть прервана, вы должны использовать состояние бездействия, как это:
Более совершенный механизм
ФМЗ количественная торговая платформа не использует этот механизм обратного вызова, но использует основной функциональный механизм, который не прерывает логику стратегии, позволяя пользователям контролировать поток стратегии более естественно. Используя C ++ и Golang в качестве базового уровня стратегии, верхний уровень стратегии использует JavaScript / Python для решения логических проблем. В сочетании с механизмом запуска событий, стратегия также может быть использована для обработки рынка с самой быстрой скоростью в первый раз.
Не говорите, что язык сценариев медленный, если вы не используете его для обучения нейронной сети, даже если это было, он может быть использован в любом случае после добавления Jit горячей компиляции. Стратегия начального уровня здесь не написана, и говорить о синтезе фьючерсов высокочастотного Tick. Например, если мы подключаемся к фьючерсной компании, мы можем только получить рынок этой фьючерсной компании. Скорость и качество нашего приема связаны с нашей собственной сетью, а также связаны с нагрузкой фьючерсной компании
Итак, как мы можем получить более точные данные о фьючерсах Tick быстрее? В рамках модели стратегии FMZ Quant
Демонстрация кода
Если вы не используете этот код на платформе FMZ Quant, вы можете ссылаться только на принцип. При добавлении биржи можно добавить множество фьючерсных компаний для одновременной обработки рынка.
Код следующий:
Эффект демо
Как показано выше, в 21:24:44 данные первой фьючерсной компании являются более ранними, чем второй. Добавление двух фьючерсных компаний может показать эффект, если вы добавите более 5 фьючерсных компаний для слияния вместе, то у вас в основном нет возможности пропустить Tick; если вы разрабатываете высокочастотную торговую стратегию, вы решили очень важный и решающий шаг, а именно скорость и стабильность получения Tick.
Получить полный код:
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
}
}
}