Sur la plateforme de trading quantitative InventorPlace de la stratégieIl existe de nombreuses stratégies intéressantes sur Internet. À cette époque, la plupart des échanges de devises numériques utilisaientrest
L’interface API du protocole, de nombreuses stratégies sont basées surrest
Interface, parfois les mises à jour du marché sont lentes. De plus, certains échanges sont récemment apparusrest
Une défaillance de l’interface rend la stratégie inutilisable. Si la politique est modifiée, ajoutezwebsocket
La prise en charge de l’interface nécessite certaines modifications du code de stratégie, ce qui est généralement gênant (changer la stratégie est beaucoup plus difficile que la réécrire).
Comment puis-je utiliser la même stratégie sans la changer ?websocket
Qu’en est-il de l’interface du marché ?
Cela démontre pleinement la puissante flexibilité de la plateforme de trading quantitative Inventor. Nous pouvons :
exchange.GetTicker
Fonction Opération Hook pour obtenir des informations sur le marché.Cela permet de contrôler la stratégie parwebsocket
Les données pilotées par l’interface du marché sont en cours d’exécution.
Langage de codage utiliséJavaScript
langue.
Par exemple, nous voulons modifier une ancienne stratégie classique « Icebreaker »
Examinons d’abord le code de la stratégie et constatons que la stratégie est déterminée par les conditions du marché des ticks et utilise principalementticker
Dans les donnéesBuy
、Sell
、Last
Ces attributs,ticker
Les données sont obtenues à partir de la fonction API de la plateforme FMZ :exchange.GetTicker
Obtenir. De cette façon, l’objectif est clair.exchange.GetTicker
fonctionHook
L’opération (c’est-à-dire la réécrire avec une autre version et la remplacer) est tout ce qui est nécessaire.
Cependant, nous ne pouvons pas réécrire la stratégie Icebreaker car cela affecterait la stratégie. Ce que nous voulons, c’est une connexion transparente ! !
Le prochain protagoniste doit donc apparaître.
init
Coordination des fonctionsNous créons une « bibliothèque de modèles » et la nommons :SeamlessConnWS, effacez le code initial.
Alors donneSeamlessConnWSLe modèle définit 2 paramètres
Utilisé pour contrôler s’il faut activer ou désactiverwebsocket
Fonction d’interface, contrôle et spécifie l’ouverture d’une interface de marché spécifique. Dans cet exemple, en raison de l’espace limité, seulexchange.GetTicker
L’interface effectue des opérations de hook. Ainsi, les paramètres ne sont activés queGetTicker
L’interface est le paramètre de contrôle du mode websocket : Hook_GetTicker.
Une fois le modèle créé, vous pouvez écrire l’échange spécifique auquel accéder dans le modèlewebsocket
Interface, abonnez-vous à certains devis, puis attendez que l’échange envoie des données. Le code spécifique ne sera pas répété ici. Vous pouvez vous référer au code SeamlessConnWS (accessible au public) et à la documentation de l’API. Ce que vous devez regarder, c’est le modèleinit
Fonctions et variables globales_DictConnectCreater
、_ConnMap
:
Code:
var _DictConnectCreater = {
"Huobi" : WSConnecter_Huobi,
"Binance" : WSConnecter_Binance,
}
var _ConnMap = {}
function init () {
if (IsUsedWebSocket) {
var connectCreater = null
if (exchanges.length != 1) {
Log("切换为ws接口只针对 exchange 交易所对象(即第一个添加的交易所对象)")
}
var isFound = false
for (var name in _DictConnectCreater) {
if (exchange.GetName() == name) {
connectCreater = _DictConnectCreater[name]
isFound = true
}
}
if (!isFound) {
throw "没有找到实现"
}
if (Hook_GetTicker) {
var symbol = exchange.GetCurrency()
_ConnMap.GetTicker = connectCreater("GetTicker", symbol)
exchange.GetTicker = function () {
return _C(_ConnMap.GetTicker.Read)
}
}
// ...
}
}
Vous pouvez voir que ce modèle n’implémente que 2 échanges.websocket
Les interfaces du marché sont Binance Spot et Huobi Spot.init
La fonction est de permettre à la stratégie « Icebreaker » de référencerSeamlessConnWSUne fois le modèle créé, lorsque le disque réel est exécuté, la première chose qui sera exécutée estinit
Fonction qui peut automatiquementexchange.GetTicker
Remplacez le contenu de la fonction parwebsocket
Implémentation du code d’interface pour obtenir une connexion transparentewebsocket
Citations.
Adresse du modèle SeamlessConnWS
C’est très simple ! PaquetSeamlessConnWSAprès avoir copié le modèle dans votre propre bibliothèque de stratégies, il vous suffit de le référencer dans la stratégie « Icebreaker », comme indiqué dans la figure :
Vérifiez, enregistrez et c’est terminé.
Créez un robot de stratégie « Icebreaker » en temps réel et sélectionnez Binance comme bourse .
OuvrirSeamlessConnWSParamètres de contrôle sur le modèle.
Exécutez-le :
Afin de faciliter la visualisation des données poussées, j’ai ajouté un code de journal d’impression à la ligne 157, qui affichera les données poussées par l’échange.
Le journal du robot montre :
De cette manière, il n’est pas nécessaire de modifier une seule ligne de code de stratégie et une intégration transparente de l’interface et de la stratégie du marché WebSocket est obtenue.
Cet exemple est uniquement destiné à être utiliséexchange.GetTicker
La stratégie de la fonction d’interface de marché est expliquée. D’autres interfaces de marché telles queexchange.GetDepth
、exchange.GetTrades
、exchange.GetRecords
C’est la même routine ! Pour le modèle d’échantillonSeamlessConnWS, qui peut être encore étendu.
Pour des liens spécifiques dans les modèleswebsocket
L’implémentation utiliseDial
Fonction (voir la documentation API Fonction Dial), qui peut être ajustée selon les besoins. Par exemple, vous pouvez donnerread()
Paramètres spécifiés par la fonction-2
, c’est-à-dire, ne renvoie quewebsocket
La connexion reçoit les dernières données dans sa mémoire tampon.
Merci d’avoir lu