Il existe des différences significatives entre les CTP de produits à terme et les APIs de devises numériques, et il n'est pas facile de copier l'expérience de ceux qui sont familiers avec les transactions de devises numériques et ceux qui ne le sont pas.
Données historiques
L'interface CTP ne fournit pas de marchés historiques, les marchés historiques devant être résolus par les négociants. Si une non-arrivée ou une rupture de la ligne de destination entraîne une perte de données de marché, le CTP ne fournit pas de mécanisme de compensation de marché.
Les accords sont différents
L'API de la crypto-monnaie est généralement le protocole REST et le protocole websocket, le CTP est enveloppé dans la logique du réseau et utilise le protocole FTD basé sur le protocole TCP pour communiquer en arrière-plan avec le CTP. Il existe trois modes:
Toutes les transactions et commandes effectuées dans le protocole CTP ne sont notifiées qu'après un changement, tandis que les commandes, les comptes et les détentions sont des requêtes actives. Les trois modèles ci-dessus peuvent être trouvés sous une forme similaire dans l'API de la monnaie numérique.
La précision des données varie
La profondeur du protocole CTP n'est qu'un achat et une vente, les frais de transaction sont coûteux, les crypto-monnaies sont généralement disponibles en pleine profondeur ou 200 fichiers. Le CTP ne pousse pas les transactions réelles, il ne peut être rétrocuté que par la modification des stocks, tandis que l'API de l'échange de crypto-monnaie peut obtenir des transactions réelles.
Les restrictions d'accès sont différentes
Les échanges de crypto-monnaie sont généralement limités à 1 seconde et 10 fois. Il n'y a pas non plus de exigences particulières pour la plupart des retraits d'ordres. Les CTP limitent strictement les demandes qui nécessitent une initiative, généralement 2s une fois plus sûre, et il y a également des exigences pour le nombre de retraits.
La stabilité
Le protocole CTP est très stable et présente peu d'erreurs et de problèmes de réseau. Les monnaies numériques devraient être moins limitées, avoir de longues durées de transaction, et les situations de maintenance, de décalage de données, d'erreurs de réseau sont courantes.
Les meilleures pratiques en matière de protocole CTP
Les interfaces de mode CTP par défaut pour l'acquisition de transactions telles que GetTicker, GetDepth et GetRecords ont toutes des données mises en cache afin d'obtenir les données les plus récentes. La stratégie peut donc être utilisée sans sommeil. Lorsqu'une transaction change, les tickers, la profondeur et les enregistrements sont mis à jour.
Si vous souhaitez obtenir des données à chaque fois que vous souhaitez obtenir des transactions, même des données anciennes, vous pouvez passer au mode de mise à jour instantanée des transactions exchange.IO. (exchange.IO. (exchange.IO. (exchange.IO. (exchange.IO. (exchange.IO. (exchange.IO. (exchange.IO. (exchange.IO. (exchange.IO. (exchange.IO.
Lors de l'opération d'un seul contrat, il est possible d'utiliser le mode par défaut; mais s'il s'agit de plusieurs contrats, il est possible qu'un contrat n'ait pas de mise à jour de marché, ce qui entraîne un blocage de l'accès à l'interface de marché, et que les autres contrats n'aient pas de mises à jour de marché. 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.
Les modifications apportées par la case tick: {Event: tick tick, Index: index de l'échange (ajouté dans l'ordre par le robot d'échange), Nano: temps d'événement en nanosecondes, Symbol: nom du contrat} Push des commandes: {Event: orderpush, Index: indice de l'échange, Nano: temps d'événement en nanosecondes, Order: information de l'ordre (obtenu avec GetOrder) }
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")){ //判断链接状态
exchange.IO("mode", 0)
_C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。
_C(exchange.SetContractType, "rb888")//订阅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)
}
}
}