L'échange d'API de crypto-monnaie et le CTP de futures de matières premières présentent des différences significatives.
L'interface CTP ne fournit pas de cotation historique du marché, et la cotation historique du marché doit être résolue par l'intermédiaire de l'agence de cotation du marché. Si les données du marché sont perdues en raison de l'échec de la connexion, la CTP ne fournit pas de mécanisme de reconstitution du marché. Les cotations historiques du marché ne peuvent être obtenues que par l'intermédiaire d'une agence tierce. La plupart des échanges de crypto-monnaie fournissent généralement une interface pour obtenir la ligne K et l'historique des transactions.
L'API d'échange de crypto-monnaie est généralement unREST
etwebsocket
Le CTP encapsule en interne la logique liée au réseau et communique avec le fond CTP en utilisant le protocole FTD basé sur le protocole TCP. Divisé en trois modes:
Mode de réponse à la demande: le client lance une demande, et l'arrière-plan du CTP reçoit et répond à la demande.
Mode de communication diffusée: après que le client se soit abonné à la cotation du marché du contrat, le CTP pousse les cotations du marché à travers la diffusion.
Mode de communication privée: après que le client a commandé un contrat, les informations de commande, le retour de transaction, etc. sont envoyés par le CTP point à point.
Toutes les transactions de devis et d'ordres de l'accord CTP seront notifiées après les modifications, tandis que les commandes, les comptes et les positions d'enquête sont activement interrogés.
La profondeur du protocole CTP ne sont que le dernier prix d'achat et de vente, les cotations de marché plus profondes telles que cinq couches de prix d'achat et de vente sont coûteuses, vous devez payer de l'argent supplémentaire à l'échange de contrats à terme pour l'obtenir. d'autre part, L'échange de crypto-monnaie peut généralement obtenir la pleine profondeur jusqu'à 200 couches de prix d'achat et de vente.
En outre, CTP ne pousse pas les cotations de transactions réelles, il ne peut être inversé que par des changements de position, et l'API d'échange de crypto-monnaie peut obtenir des cotations de transactions détaillées réelles.
Les échanges de crypto-monnaie sont généralement limités à 10 ticks par seconde. Il n'y a pas d'exigences spéciales pour les retraits de commandes. CTP a des restrictions strictes sur les demandes qui doivent être envoyées activement. Généralement, une fois par 2 secondes est assez sûr, et il y a aussi des exigences pour le nombre de retraits.
Le protocole CTP est très stable et il n'y a presque pas d'erreurs ou de problèmes de réseau.
CTP mode par défaut pour obtenir l'interface de marché tels queGetTicker
, GetDepth
, GetRecords
Les données sont mises en cache pour obtenir les données les plus récentes, si il n'y a pas de données va attendre jusqu'à ce qu'il y ait des données, donc la stratégie ne peut pas utiliserSleep
Lorsqu'il y a un changement de cotation sur le marché,ticker
, depth
, etrecords
L'interface appelée est alors réglée pour attendre le mode de mise à jour, la prochaine fois que la même interface est appelée, elle attend que de nouvelles données soient renvoyées.
Certains contrats de négociation impopulaires ou le prix atteint le prix limité quotidien se produiront pendant une longue période sans aucune activité de négociation, ce qui est normal pour la stratégie de rester bloqué pendant une longue période.
Si vous voulez obtenir les données à chaque fois que vous obtenez la cotation du marché, même les anciennes données, vous pouvez passer au marché immédiatement mettre à jour le modeexchange.IO ("mode", 0)
À ce stade, la stratégie ne peut pas être écrite comme un moteur d'événement.SLeep
Certains stratégies à basse fréquence peuvent utiliser ce mode, et la conception de la stratégie est simple.exchange.IO("mode", 1)
pour revenir au mode cache par défaut.
Lors de l'exploitation d'un seul contrat, l'utilisation du mode par défaut sera correcte. Cependant, s'il y a plusieurs contrats de négociation, il est possible qu'un contrat n'ait pas été mis à jour, ce qui entraîne un blocage de l'interface du marché et que d'autres mises à jour du marché des devises de contrats de négociation ne soient pas disponibles. Pour résoudre ce problème, vous pouvez utiliser le mode de mise à jour immédiate, mais il n'est pas pratique d'écrire une stratégie à haute fréquence. À ce stade, vous pouvez utiliser le mode push d'événement pour obtenir le push des ordres et des devis.exchange.IO("wait")
Si plusieurs objets d'échange sont ajoutés, c'est une situation rare dans le commerce à terme des matières premières, vous pouvez utiliserexchange.IO ("wait_any")
, et le retourindex
indiquera l'indice de l'échange retourné.
Cote de marchétick
Appuyez sur le bouton de changement:
{Event:"tick", Index: exchange index (in the order of robot exchange added), Nano: event nanosecond time, Symbol: contract name}
Commande Pousse:
{Event:"order", Index: Exchange Index, Nano: Event Nanosecond Time, Order: Order Information (consistent with GetOrder)}
À ce stade, la structure de la stratégie peut être écrite comme suit:
function on_tick(symbol){
Log("symbol update")
exchange.SetContractType(symbol)
Log(exchange.GetTicker())
}
function on_order(order){
Log("order update", order)
}
function main(){
while(true){
if(exchange.IO("status")){ //Determine the link status
exchange.IO("mode", 0)
_C (exchange.SetContractType, "MA888") // subscribe to the MA, only the first time is the real request to send a subscription, the following are just program switch, won't consume any time.
_C(exchange.SetContractType, "rb888") // Subscribe rb
While(True){
Var e = exchange.IO("wait")
If(e){
If(e.event == "tick"){
On_tick(e.Symbol)
}else if(e.event == "order"){
On_order(e.Order)
}
}
}
}else{
Sleep(10*1000)
}
}
}