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:
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
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é.
Le code est le suivant:
Effets de démonstration
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
}
}
}