Comment dépasser la limite de réception Tick des contrats à terme sur matières premières

Auteur:le rubis, Créé: 2018-08-27 15:58:30, Mis à jour:

Qu'est-ce que le Tick? Par exemple, les données de transaction peuvent être imaginées comme une rivière, et Tick est les données d'une section de la rivière.

Comment la plupart des logiciels domestiques (c'est-à-dire chinois dans cet article) obtiennent Tick?

Dans ce cas, il y a souvent plus d'une transaction en 500 millisecondes, et la situation spécifique en elle est complètement une boîte noire.

La plupart des cadres de trading sur le marché utilisent un mode de rappel, ce qui signifie qu'il y a au maximum un Tick en 500 millisecondes dans une situation idéale. Dans la situation réelle onBar/onTick, il est bon de ne pas manquer Tick. pourquoi? Parce que vous devez gérer toute la logique de code dans la fonction onBar/onTick, ce qui coûte beaucoup de temps. Que vous le vouliez ou non, votre logique de stratégie doit être interrompue, vous devez utiliser l'état inactif, comme ceci:

img

Mécanisme plus avancé

La plateforme de trading quantitative FMZ n'adopte pas ce mécanisme de rétroaction, mais adopte le mécanisme de fonctionnement principal qui n'interrompt pas la logique de la stratégie, permettant aux utilisateurs de contrôler le flux de la stratégie de manière plus naturelle.

Ne dites pas que le langage de scripting est lent, à moins que vous ne l'utilisiez pour la formation des réseaux neuronaux, même si c'était le cas, il peut être utilisé à n'importe quelle occasion après avoir ajouté la compilation chaude Jit. La stratégie d'entrée de gamme n'est pas écrite ici, et nous parlons de la synthèse des futures à haute fréquence Tick. Par exemple, si nous nous connectons à une société de futures, nous ne pouvons recevoir que le marché de cette société de futures. La vitesse et la qualité de notre réception sont liées à notre propre réseau, et également liées à la charge de la machine front-end de la société de futures.

Alors, comment pouvons-nous obtenir des données plus précises sur les contrats à terme plus rapidement? Dans le modèle de stratégie de FMZ Quant, vous pouvez facilement exploiter les comptes de différentes sociétés de contrats à terme et combiner leurs prix pour traiter les commandes à la vitesse la plus rapide. Dans des circonstances normales, nous pouvons obtenir deux tics par seconde de la société de contrats à terme, mais grâce à la technologie de combinaison du marché, en prenant le MA801 à titre d'exemple, nous pouvons obtenir un tick jusqu'à six fois par seconde et sans répétition.

img

Démo de code

Si vous ne l'utilisez pas sur la plateforme FMZ Quant, vous pouvez vous référer uniquement au principe. Lors de l'ajout de l'échange, de nombreuses sociétés à terme peuvent être ajoutées pour effectuer le traitement simultané de la fusion du marché.

img

Le code est le suivant:

img

Effets de démonstration

img

Comme indiqué ci-dessus, à 21:24:44, les données de la première société de contrats à terme sont antérieures à la deuxième. L'ajout de deux sociétés de contrats à terme peut montrer l'effet, si vous ajoutez plus de 5 sociétés de contrats à terme pour fusionner, alors vous n'avez essentiellement aucune possibilité de manquer Tick; si vous développez une stratégie de trading à haute fréquence, vous avez résolu une étape très importante et décisive, à savoir la vitesse et la stabilité de la réception de Tick.

Obtenez le code complet:

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



Plus de