Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l'interface du marché WebSocket

Créé le: 2019-09-26 15:47:53, Mis à jour le: 2024-12-17 20:38:08
comments   3
hits   3049

Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket

Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket

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 utilisaientrestL’interface API du protocole, de nombreuses stratégies sont basées surrestInterface, parfois les mises à jour du marché sont lentes. De plus, certains échanges sont récemment apparusrestUne défaillance de l’interface rend la stratégie inutilisable. Si la politique est modifiée, ajoutezwebsocketLa 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 ?websocketQu’en est-il de l’interface du marché ? Cela démontre pleinement la puissante flexibilité de la plateforme de trading quantitative Inventor. Nous pouvons :

  • 1. Utilisez la stratégie « Bibliothèque de modèles ».
  • 2. Ouiexchange.GetTicker Fonction Opération Hook pour obtenir des informations sur le marché.

Cela permet de contrôler la stratégie parwebsocketLes données pilotées par l’interface du marché sont en cours d’exécution. Langage de codage utiliséJavaScriptlangue.

Stratégie analytique

Par exemple, nous voulons modifier une ancienne stratégie classique « Icebreaker »

Adresse de la politique

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 principalementtickerDans les donnéesBuySellLastCes attributs,tickerLes 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.GetTickerfonctionHookL’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.

Fonction de bibliothèque de modèles etinitCoordination des fonctions

Nous créons une « bibliothèque de modèles » et la nommons :SeamlessConnWS, effacez le code initial.

Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket

Alors donneSeamlessConnWSLe modèle définit 2 paramètres

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket

Utilisé pour contrôler s’il faut activer ou désactiverwebsocketFonction 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.GetTickerL’interface effectue des opérations de hook. Ainsi, les paramètres ne sont activés queGetTickerL’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èlewebsocketInterface, 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èleinitFonctions 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.websocketLes interfaces du marché sont Binance Spot et Huobi Spot.initLa 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 estinitFonction qui peut automatiquementexchange.GetTickerRemplacez le contenu de la fonction parwebsocketImplémentation du code d’interface pour obtenir une connexion transparentewebsocketCitations.

Adresse du modèle SeamlessConnWS

Comment l’utiliser

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 :

Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket

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 Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket . OuvrirSeamlessConnWSParamètres de contrôle sur le modèle. Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket

Exécutez-le : Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket

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. Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket

Le journal du robot montre : Je vous apprends étape par étape comment connecter de manière transparente une ancienne stratégie à l’interface du marché WebSocket

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.GetTickerLa stratégie de la fonction d’interface de marché est expliquée. D’autres interfaces de marché telles queexchange.GetDepthexchange.GetTradesexchange.GetRecordsC’est la même routine ! Pour le modèle d’échantillonSeamlessConnWS, qui peut être encore étendu.

Pour des liens spécifiques dans les modèleswebsocketL’implémentation utiliseDialFonction (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 quewebsocketLa connexion reçoit les dernières données dans sa mémoire tampon.

Merci d’avoir lu