Tecnologia real do FMZ Quant - Como quebrar os limites para a obtenção de tiques

Autora:Ninabadass, Criado: 2022-03-31 11:14:14, Atualizado: 2022-03-31 14:02:25

Em uma estratégia de negociação de futuros de commodities de alta frequência, a velocidade de recepção das cotações do mercado Tick tem uma influência decisiva no resultado de lucro da estratégia. No entanto, a maioria das estruturas de negociação no mercado usam o mecanismo de modo callback. Porque na função onBar/onTick, você tem que lidar com toda a lógica de código, o que é uma perda de tempo; quer você queira ou não, sua lógica de estratégia deve ser interrompida, e você deve usar um 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 não adota o mecanismo de callback para trás, mas adota o mecanismo de entrada de função main que não interrompe a lógica de estratégia, para que os usuários possam controlar o fluxo de estratégia de forma mais natural; use C ++ e Golang como a camada subjacente de estratégia estável e use Javascript / Python na camada superior para lidar com problemas de lógica. Combinado com o mecanismo de desencadeamento de eventos, a estratégia também pode processar TAQ na velocidade mais rápida na primeira vez. Por exemplo, quando acessamos uma empresa de futuros, só podemos receber o TAQ dessa empresa de futuros. A velocidade e a qualidade do TAQ que obtemos está relacionada à nossa própria rede, e também está relacionada à carga da máquina front-end da empresa de futuros. Então, como podemos obter dados mais precisos de ticks futuros mais rápido?

Sob o modelo de estratégia, você pode facilmente operar as contas de N diferentes empresas de futuros, mesclar o seu TAQ, e colocar ordens na velocidade mais rápida. Em circunstâncias normais, podemos obter dois tiques por segundo das empresas de futuros, mas pela tecnologia de fusão TAQ, tomando MA801 como exemplo, podemos obter um máximo de 6 tiques não repetitivos por segundo.

img

Vamos direto ao código (o código só pode ser operado no bot, não no backtest), e o uso da função IO pode se referir a:https://www.fmz.cn/api#io函数

Quando um bot adiciona uma plataforma, N empresas de futuros podem ser adicionadas para processar a fusão simultânea do TAQ; aqui adicionamos temporariamente dois e demonstramos isso:

Código seguinte:

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:

img

Pode-se ver que às 21:24:44, os dados da primeira empresa de futuros chegam antes da segunda, e o resultado pode ser visto adicionando duas empresas de futuros. Se você usá-lo para desenvolver estratégias de negociação de alta frequência, você resolveu um passo muito importante e decisivo, ou seja, a velocidade, estabilidade e confiabilidade de obter Tick.

FMZ Quant (ex-BotVS) é uma plataforma especialmente criada para desenvolvedores que têm requisitos críticos de estabilidade e velocidade de estratégia.


Mais.