Apprendre à laisser une ancienne stratégie d'accueil de l'interface de citations websocket

Auteur:La bonté, Créé: 2019-10-08 14:56:58, Mis à jour: 2023-11-06 19:41:28

img

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 APIrestLa plupart des stratégies sont basées sur le protocole.restLes 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.restl'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 template class library.

  • Exécution d'une opération Hook pour les cotations boursières ayant pour fonction:exchange.GetTicker.

Ainsi, sans modifier le code de la stratégie, laissez la stratégie utilisant les donnéeswebsocketl'interface du marché.

Le langage d'écriture de code utilise le langage de programmation JavaScript.

Stratégie d'analyse

Par exemple, lorsque nous avons besoin de modifier une stratégie classique Icebreaker

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.tickIl utilise principalement les propriétés deBuy, Sell, etLastdans letickerLes donnéestickerles données sont obtenues par la fonction API de la plateforme FMZ Quant:exchange.GetTickerL'objectif est clair maintenant, nous pouvons remplacer leexchange.GetTickerfonction avecHookopération (c'est-à-dire le remplacer par une autre version).

Cependant, nous ne pouvons pas le réécrire dans le code de stratégie icebreaker, cela affectera la logique de la stratégie, nous voulons l'accrochage en douceur à la prise web!

Donc nous avons besoin du prochain protagoniste pour faire ses débuts.

La fonction template class library et la fonction init fonctionnent ensemble

Nous créons une bibliothèque de classes de modèles nommée: SeamlessConnWS

img

Ensuite, définissez 2 paramètres à laSeamlessConnWS template.

  • Il est utilisé WebSocket
  • Le code de connexion est le code de connexion de l'application.

img

Ces deux fonctions sont utilisées pour contrôler l'utilisation de lawebsocketL'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.hookopération pour leexchange.GetTickerPar conséquent, nous devons activer le paramètreHook_GetTicker) de laGetTickerl'interface avec lewebsocket mode.

Une fois le modèle créé, nous pouvons écrire un accès spécifique aux échangeswebsocketLe code spécifique n'est pas décrit ici, vous pouvez vous référer à laSeamlessConnWSIl 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.initfonction 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 lewebsocketL'interface de marché de deux bourses, qui sont la Binance et Huobi.initLa fonction principale de la stratégie Icebreaker est de s'assurer que, lorsque l'appel de la stratégie IcebreakerSeamlessConnWSle modèle, leinitLa 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.GetTickerfonction avec le code de l'utilisation de lawebsocketL'interface de connexion de l'appareil à l'interface de connexion, permettant ainsi un accès sans heurts au marché des websockets.

SeamlessConnWSAdresse du modèle:https://www.fmz.com/strategy/167755

Comment l' utiliser

Après avoir copié leSeamlessConnWSDans votre bibliothèque de stratégies, vous pouvez simplement utiliser la stratégie Icebreaker pour la référencer, comme indiqué sur la figure:

img

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.

img

Ouvrez les paramètres de commande sur leSeamlessConnWS template.

img

Faites-le voir:

img

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.

img

Affichage sur le journal du robot:

img

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 lewebsocketl'interface du marché.

Cet exemple est uniquement pour la stratégie d'utilisation deexchange.GetTickerfonction d'interface de marché, autres interfaces de marché telles queexchange.GetDepth, exchange.GetTradesetexchange.GetRecordsPour le modèle standardSeamlessConnWS, vous pouvez essayer de l'étendre davantage.

Pour la mise en œuvre du lien spécifiquewebsocketdans le modèle, utiliser leDialPar 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 lewebsocketConnexion acceptée.

Merci de m'avoir lu.


Relationnée

Plus de