Il y a beaucoup de stratégies intéressantes sur la page carrée (https://www.fmz.com/squareÀ l'époque, la plupart des échanges de crypto-monnaie utilisaient l'interface APIrest
La plupart des stratégies sont basées sur le protocole.rest
Les taux d'intérêt de l'échange de devises sont en général plus élevés que ceux de l'échange de devises.rest
l'interface a échoué dans un proche avenir, ce qui entraîne une stratégie qui ne peut pas fonctionner correctement.
Tant que la stratégie est modifiée, l'ajout de support pour l'interface websocket nécessite quelques modifications au code de la stratégie, ce qui est généralement assez gênant (la difficulté de changer la stratégie est beaucoup plus élevée que de la réécrire).
Comment pouvons-nous ne pas changer le code de stratégie, mais utiliser l'interface de cotation du marché websocket?
Voici la flexibilité complète de la plateforme FMZ Quant, nous pouvons utiliser:
Utilisez la stratégie
Exécution d'une opération exchange.GetTicker
.
Ainsi, sans modifier le code de la stratégie, laissez la stratégie utilisant les donnéeswebsocket
l'interface du marché.
Le langage d'écriture de code utilise le langage de programmation JavaScript.
Par exemple, lorsque nous avons besoin de modifier une stratégie classique
Adresse stratégique:https://www.fmz.com/strategy/9929
L'objectif de cette stratégie est d'améliorer la qualité de l'information et de la communication.tick
Il utilise principalement les propriétés deBuy
, Sell
, etLast
dans leticker
Les donnéesticker
les données sont obtenues par la fonction API de la plateforme FMZ Quant:exchange.GetTicker
L'objectif est clair maintenant, nous pouvons remplacer leexchange.GetTicker
fonction avecHook
opération (c'est-à-dire le remplacer par une autre version).
Cependant, nous ne pouvons pas le réécrire dans le code de stratégie
Donc nous avons besoin du prochain protagoniste pour faire ses débuts.
Nous créons une bibliothèque de classes de modèles nommée:
Ensuite, définissez 2 paramètres à laSeamlessConnWS
template.
Ces deux fonctions sont utilisées pour contrôler l'utilisation de lawebsocket
L'interface de commande de l'interface de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande de commande.hook
opération pour leexchange.GetTicker
Par conséquent, nous devons activer le paramètreHook_GetTicker
) de laGetTicker
l'interface avec lewebsocket
mode.
Une fois le modèle créé, nous pouvons écrire un accès spécifique aux échangeswebsocket
Le code spécifique n'est pas décrit ici, vous pouvez vous référer à laSeamlessConnWS
Il est nécessaire de mentionner une chose, c'est que le code (déjà open source) et la documentation officielle de l'API FMZ Quant.init
fonction dans le modèle et les variables globales_DictConnectCreater
, _ConnMap
:
Partie du code:
var _DictConnectCreater = {
"Huobi" : WSConnecter_Huobi,
"Binance" : WSConnecter_Binance,
}
var _ConnMap = {}
function init () {
if (IsUsedWebSocket) {
var connectCreater = null
if (exchanges.length != 1) {
Log("Switching to the ws interface only for the "exchange" exchange object (ie, the first added exchange object)")
}
var isFound = false
for (var name in _DictConnectCreater) {
if (exchange.GetName() == name) {
connectCreater = _DictConnectCreater[name]
isFound = true
}
}
if (!isFound) {
throw "Did not find an implementation"
}
if (Hook_GetTicker) {
var symbol = exchange.GetCurrency()
_ConnMap.GetTicker = connectCreater("GetTicker", symbol)
exchange.GetTicker = function () {
return _C(_ConnMap.GetTicker.Read)
}
}
// ...
}
}
On peut voir que ce modèle implémente uniquement lewebsocket
L'interface de marché de deux bourses, qui sont la Binance et Huobi.init
La fonction principale de la stratégie Icebreaker est de s'assurer que, lorsque l'appel de la stratégie IcebreakerSeamlessConnWS
le modèle, leinit
La première étape de l'exécution de cette fonction est la réalisation des progrès réels du marché.
Nous pouvons remplacer le contenu de laexchange.GetTicker
fonction avec le code de l'utilisation de lawebsocket
L'interface de connexion de l'appareil à l'interface de connexion, permettant ainsi un accès sans heurts au marché des websockets.
SeamlessConnWS
Adresse du modèle:https://www.fmz.com/strategy/167755
Après avoir copié leSeamlessConnWS
Dans votre bibliothèque de stratégies, vous pouvez simplement utiliser la stratégie
Assurez-vous de cliquer sur vérifier le modèle, et le bouton d'enregistrement.
Créez un robot en temps réel, l'échange choisit la paire de trading.
Ouvrez les paramètres de commande sur leSeamlessConnWS
template.
Faites-le voir:
Afin de voir facilement les données poussées, à la ligne 157, nous avons spécifiquement ajouté un code de journal d'impression, il produira les données poussées par l'échange.
Affichage sur le journal du robot:
De cette façon, nous n'avons pas besoin de modifier aucune ligne du code de stratégie, et atteint un accrochage sans heurts avec lewebsocket
l'interface du marché.
Cet exemple est uniquement pour la stratégie d'utilisation deexchange.GetTicker
fonction d'interface de marché, autres interfaces de marché telles queexchange.GetDepth
, exchange.GetTrades
etexchange.GetRecords
Pour le modèle standardSeamlessConnWS
, vous pouvez essayer de l'étendre davantage.
Pour la mise en œuvre du lien spécifiquewebsocket
dans le modèle, utiliser leDial
Par exemple, vous pouvez spécifier le paramètre -2 à l'écran de commande.read()
fonction, qui renvoie uniquement les dernières données dans le tampon que lewebsocket
Connexion acceptée.
Merci de m'avoir lu.