En una estrategia de negociación de futuros de materias primas de alta frecuencia, la velocidad de recepción de las cotizaciones del mercado Tick tiene una influencia decisiva en el resultado de ganancia de la estrategia. Sin embargo, la mayoría de los marcos de negociación en el mercado utilizan el mecanismo de modo de devolución de llamada. Porque en la función onBar/onTick, tienes que lidiar con toda la lógica del código, que es una pérdida de tiempo; lo quieras o no, tu lógica de estrategia debe ser interrumpida, y debes usar un modo de máquina de estado, como:
var state = STATE_IDLE;
function onTick() {
if (state == STATE_IDLE) {
// do something...
} else if (state == ....) {
// do something
}
}
FFMZ Quant no adopta el mecanismo de devolución de llamada hacia atrás, sino que adopta el mecanismo de entrada de función
Bajo el modelo de estrategia, usted puede fácilmente operar las cuentas de N diferentes empresas de futuros, fusionar su TAQ, y colocar órdenes a la velocidad más rápida. En circunstancias normales, podemos obtener dos ticks por segundo de las compañías de futuros, pero con la tecnología de fusión TAQ, tomando MA801 como ejemplo, podemos obtener un máximo de 6 ticks no repetitivos por segundo.
Vamos directamente al código (el código solo se puede operar en el bot, no en el backtest), y el uso de la función IO puede referirse a:https://www.fmz.cn/api#io函数
Cuando un bot agrega una plataforma, se pueden agregar N compañías de futuros para procesar la fusión simultánea de TAQ; aquí agregamos temporalmente dos y demostramos esto:
Código como sigue:
function main() {
Log("Prepare to access the platform and subscribe to TAQ")
// Step 1: all futures front-end processors are subscribing for symbols
_.each(exchanges, function(e) {
// wait to access the platform, and yes, the strategy runs continuously for 365 days, and it can run even after the market is closed, and it is not the logic of event callback
good mistake
while (!e.IO("status")) Sleep(1000);
// Use the _C retry function to eliminate network errors, and subscribe to TAQ just access to the platform; there may be an error that CTP is not ready
_C(e.SetContractType, "MA801")
// Switch the TAQ receiving mode to immediate return mode instead of event trigger mode, please refer to the API documentation
e.IO("mode", 0)
})
Log("Start to merge data...")
// Step 2: here comes the important part
var preVolume = 0
while (true) {
var ts = new Date().getTime()
// If any platform has tick event, return
var e = exchange.IO("wait_any")
// Reset Volume at a proper time
if (e.Nano/1000000 - ts > 60000) {
preVolume = 0
}
if (e.Event == 'tick' && e.Ticker.Volume >= preVolume) {
Log(ret, e.Ticker.Last, e.Ticker.Volume)
preVolume = e.Ticker.Volume
}
}
}
Resultado:
Se puede ver que a las 21:24:44, los datos de la primera compañía de futuros llegan antes que la segunda, y el resultado se puede ver agregando dos compañías de futuros. Si lo utilizas para desarrollar estrategias de trading de alta frecuencia, has resuelto un paso muy importante y decisivo, es decir, la velocidad, estabilidad y fiabilidad de obtener Tick.
FMZ Quant (antiguo BotVS) es una plataforma especialmente creada para desarrolladores que tienen requisitos críticos en la estabilidad y velocidad de la estrategia. La tecnología de protocolo de la capa subyacente se desarrolla de forma independiente, que puede operarse bajo microcomputadoras de chip único Linux / Windows / Mac / ARM o incluso teléfonos móviles, y su velocidad de pedido es extremadamente rápida. La reacción a TAQ es rápida, y es la mejor opción para desarrollar estrategias de alta frecuencia.