¿Qué es Tick? Por ejemplo, los datos de transacción se pueden imaginar como un río, y Tick es los datos de una sección del río.
¿Cómo obtiene Tick la mayoría de los programas domésticos (en este artículo, China)?
Entonces a menudo hay más de una transacción en 500 milisegundos, y la situación específica en ella es completamente una caja negra.
La mayoría de los marcos de negociación en el mercado utilizan un modo de devolución de llamada, lo que significa que hay como máximo un Tick en 500 milisegundos en la situación ideal. En la situación real de onBar/onTick, es bueno no perder el Tick. ¿Por qué? Porque usted tiene que lidiar con toda la lógica de código en la función onBar/onTick, lo que cuesta mucho tiempo.
Mecanismo más avanzado
La plataforma de negociación cuantitativa FMZ no adopta este mecanismo de devolución de llamada hacia atrás, sino que adopta el mecanismo de función principal que no interrumpe la lógica de la estrategia, lo que permite a los usuarios controlar el flujo de la estrategia de manera más natural.
No digas que el lenguaje de scripting es lento, a menos que lo uses para el entrenamiento de redes neuronales, incluso si lo fuese, se puede usar en cualquier ocasión después de agregar Jit hot compilation. La estrategia de nivel de entrada no está escrita aquí, y hablemos sobre la síntesis de futuros de alta frecuencia Tick. Por ejemplo, si nos conectamos a una compañía de futuros, solo podemos recibir el mercado de esta compañía de futuros. La velocidad y calidad de nuestra recepción están relacionadas con nuestra propia red, y también están relacionadas con la carga de la máquina front-end de la compañía de futuros.
Entonces, ¿cómo podemos obtener datos de ticks de futuros más precisos más rápido? Bajo el modelo de estrategia de FMZ Quant
Demo de código
Este código sólo se puede utilizar en el mercado real y no puede ser probado. Al agregar el intercambio, se pueden agregar muchas compañías de futuros para llevar a cabo el procesamiento simultáneo de la fusión del mercado.
El código es el siguiente:
Efecto demo
Como se muestra anteriormente, a las 21:24:44, los datos de la primera compañía de futuros son anteriores a la segunda. Agregar dos compañías de futuros puede mostrar el efecto, si agrega más de 5 compañías de futuros para fusionarse, entonces básicamente no tiene posibilidad de perder Tick; si está desarrollando una estrategia de negociación de alta frecuencia, ha resuelto un paso muy importante y decisivo, a saber, la velocidad y estabilidad de la recepción de Tick.
Obtenga el código completo:
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
}
}
}