La véritable technologie de FMZ Quant - Comment briser les limites pour obtenir des tiques

Auteur:Je suis désolée., Créé: 2021-03-31 11:14:14, Mis à jour: 2021-03-31 14:02:25

Dans une stratégie de négociation à haute fréquence de contrats à terme sur matières premières, la vitesse de réception des cotations du marché Tick a une influence déterminante sur le résultat de la stratégie. Cependant, la plupart des frameworks de trading sur le marché utilisent le mécanisme de mode callback. Parce que dans la fonction onBar/onTick, vous devez gérer toute la logique du code, ce qui est une perte de temps; que vous le vouliez ou non, votre logique de stratégie doit être interrompue, et vous devez utiliser un mode machine d'état, tel que:

var state = STATE_IDLE;
function onTick() {
  if (state == STATE_IDLE) {
    // do something...
  } else if (state == ....) {
    // do something
  }
}

FFMZ Quant n'adopte pas le mécanisme de rappel à l'envers, mais adopte le mécanisme d'entrée de fonction main qui n'interrompt pas la logique de stratégie, afin que les utilisateurs puissent contrôler le flux de stratégie de manière plus naturelle; utilisez C ++ et Golang comme sous-couche de stratégie stable, et utilisez Javascript / Python sur la couche supérieure pour traiter les problèmes de logique. Ne pensez pas que le langage de script est lent, sauf si vous l'utilisez pour la formation NNS; même si vous utilisez la formation NNS, après avoir ajouté Jit compilation à chaud, ce sera suffisant pour n'importe quelle occasion; Chrome bat IE instantanément en est un exemple. Combinée avec le mécanisme de déclenchement d'événements, la stratégie peut également traiter TAQ à la vitesse la plus rapide la première fois. Par exemple, lorsque nous accédons à une société de contrats à terme, nous ne pouvons recevoir que le TAQ de cette société de contrats à terme. La vitesse et la qualité du TAQ que nous obtenons sont liées à notre propre réseau, et également liées à la charge de la machine front-end de la société de contrats à terme.

Sous le modèle de stratégie, vous pouvez facilement gérer les comptes de N différentes sociétés de contrats à terme, fusionner leur TAQ, et passer des commandes à la vitesse la plus rapide. Dans des circonstances normales, nous pouvons obtenir deux tiques par seconde des sociétés de contrats à terme, mais par la technologie de fusion TAQ, prenant MA801 comme exemple, nous pouvons obtenir un maximum de 6 tiques non répétitives par seconde.

img

Passons directement au code (le code ne peut être utilisé que dans le bot, pas dans le backtest), et l'utilisation de la fonction IO peut faire référence à:https://www.fmz.cn/api#io函数

Lorsqu'un bot ajoute une plateforme, N sociétés à terme peuvent être ajoutées pour traiter la fusion simultanée de TAQ; ici, nous en ajoutons temporairement deux et démontrons ceci:

Le code suivant:

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
        }
    }
}

Résultat:

img

On peut voir qu'à 21:24:44, les données de la première société de contrats à terme arrivent avant la deuxième, et le résultat peut être vu en ajoutant deux sociétés de contrats à terme. Si vous l'utilisez pour développer des stratégies de trading à haute fréquence, vous avez résolu une étape très importante et décisive, à savoir la vitesse, la stabilité et la fiabilité de l'obtention de Tick.

FMZ Quant (anciennement BotVS) est une plateforme spécialement créée pour les développeurs qui ont des exigences critiques en matière de stabilité et de vitesse de la stratégie.


Plus de