Aller au contenu

WebSocket Sample

Présentation

Le plug-in WebSocket Sample permet l'intégration de données en temps réel dans cTrader grâce aux fonctionnalités clés suivantes :

  • Connecte cTrader à un serveur WebSocket externe pour recevoir des flux de données en temps réel.
  • Affiche du contenu en direct tel que des actualités ou des alertes de trading directement dans le Panneau de symbole actif à l'aide d'un bloc de texte personnalisé.
  • Met automatiquement à jour le panneau avec de nouveaux messages lorsqu'ils sont reçus, permettant une information opportune.

Le plug-in fonctionne via un panneau configurable par l'utilisateur. Il reste actif tant que cTrader Windows ou Mac est en cours d'exécution et libère automatiquement les ressources système lorsqu'il est arrêté.

Création de plug-in

Apprenez à créer des plug-ins, en utilisant C# ou Python, dans nos guides étape par étape.

Le code du plug-in WebSocket Sample est disponible dans nos dépôts publics C# et Python. Le même code est fourni comme modèle dans l'assistant de création d'algorithme dans cTrader Windows ou Mac, ou vous pouvez simplement copier et utiliser l'extrait ci-dessous :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class WebSocketSample : Plugin
    {
        // Declaring our TextBlock that will display the news contents
        private TextBlock _textBlock = new TextBlock
        {
            Text = "Starting news feed...",
            FontSize = 20,
            FontWeight = FontWeight.ExtraBold,
            TextAlignment = TextAlignment.Center,
            Padding = new Thickness(5, 5, 5, 5),
        };

        // _webSocketClientOptions allow us to define several settings
        // such as the keep-alive interval of the WebSocket connection
        private static WebSocketClientOptions _webSocketClientOptions = new WebSocketClientOptions 
        {
            KeepAliveInterval = new TimeSpan(0, 1, 30),
            UseDefaultCredentials = true,
        };

        // Passing our _webSocketClientOptions to the WebSocketClient
        // constructor
        private WebSocketClient _webSocketClient = new WebSocketClient(_webSocketClientOptions);

        // This API is entirely fictional
        private readonly Uri _targetUri = new Uri("ws://amazingnews.com:8000");

        protected override void OnStart()
        {
            // Connecting to the API and sending the initial message
            _webSocketClient.Connect(_targetUri);
            _webSocketClient.Send("Hello");

            // Declaring a custom handler for the TextReceived event
            _webSocketClient.TextReceived += NewsReceived;

            // Adding our TextBlock as a child of a custom
            // AspBlock
            var aspBlock = Asp.SymbolTab.AddBlock("News");
            aspBlock.Height = 300;
            aspBlock.Child = _textBlock;
        }

        protected override void OnStop()
        {
            // The WebSocketClient must be disposed of in OnStop,
            // otherwise it will consume system resources
            _webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);
        }

        private void NewsReceived(WebSocketClientTextReceivedEventArgs args) 
        {
            // Updading the text inside the TextBlock on every
            // piece of news received
            if (args.Text.Length != 0) 
            {
                _textBlock.Text = args.Text;
            }
        }
    }        
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import clr
clr.AddReference("cAlgo.API")

from cAlgo.API import *
from System import TimeSpan, Uri

TARGET_URI = Uri("ws://localhost:1337")

class WebSocketClientSample():
    def on_start(self):
        webSocketClientOptions = WebSocketClientOptions()
        webSocketClientOptions.KeepAliveInterval = TimeSpan(0, 1, 30)
        webSocketClientOptions.UseDefaultCredentials = True

        self.webSocketClient = WebSocketClient(webSocketClientOptions)

        # Connecting to the API and sending the initial message
        self.webSocketClient.Connect(TARGET_URI)
        self.webSocketClient.Send("Hello")

        # Declaring a custom handler for the TextReceived event
        self.webSocketClient.TextReceived += self.on_text_received

        # Adding our TextBlock as a child of a custom AspBlock
        aspBlock = api.Asp.SymbolTab.AddBlock("WebSocket Client Sample");
        aspBlock.Height = 300;

        self.textBlock = TextBlock()
        self.textBlock.Text = "Listening..."
        self.textBlock.FontSize = 20
        self.textBlock.FontWeight = FontWeight.ExtraBold
        self.textBlock.TextAlignment = TextAlignment.Center
        self.textBlock.Padding = Thickness(5, 5, 5, 5)

        aspBlock.Child = self.textBlock;

    def on_text_received(self, args):
        # Updading the text inside the TextBlock on every piece of text received
        if len(args.Text) > 0: 
            self.textBlock.Text = f"Received: {args.Text}"

    def on_stop(self):
        # The WebSocketClient must be disposed of in OnStop,  otherwise it will consume system resources
        self.webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure)

Options de personnalisation

Le plug-in combine les paramètres WebSocket avec des éléments d'interface utilisateur pour fournir du contenu textuel en direct. Voici une description de ses composants clés et de leurs fonctions :

Paramètre Description Valeurs possibles
Text Affiche le contenu initial dans le bloc de texte. Starting news feed…
AddBlock Ajoute un bloc au Panneau de symbole actif. asp.symboltab.addblock(news)
_textBlock.Text Met à jour le bloc de texte avec le message WebSocket reçu. args.text
FontSize Définit la taille du texte. 16, 18, 20, etc.
FontWeight Définit l'épaisseur du texte. regular, bold, extrabold, etc.
TextAlignment Aligne le texte dans le bloc de texte. left, centre, etc.
Padding Spécifie l'espace autour du bloc de texte. (5, 5, 5, 5), (8, 8, 8, 8), etc.
aspBlock.Height Définit la hauteur du bloc personnalisé dans l'interface utilisateur. 300px, 350px, etc.
_targetUri Fournit le point de terminaison WebSocket pour le flux de données. wss://marketdata.tradermade.com/feedadv
KeepAliveInterval Définit l'intervalle pour les pings de maintien de connexion WebSocket. (0, 1, 30) (heures, minutes, secondes)
_webSocketClient.Send Envoie le message d'abonnement initial au serveur WebSocket. {userkey:..., symbol:eurusd}
UseDefaultCredentials Configure le paramètre d'authentification pour la connexion WebSocket. true ou false

Remarque

Assurez-vous que le serveur WebSocket prend en charge le protocole et les formats de message attendus par votre implémentation.

Cas d'usage

WebSocket Sample offre un moyen puissant et flexible d'étendre cTrader avec des flux de données en temps réel. Il prend en charge un large éventail d'intégrations adaptées à divers besoins de trading. Vous trouverez ci-dessous des cas d'utilisation pratiques qui démontrent comment le plug-in peut améliorer l'expérience de trading.

Cas d'utilisation Scénario Valeur
Flux d'actualités Consultez les actualités économiques en temps réel, les gros titres qui influencent le marché et les événements de dernière minute directement dans la plateforme. Vous tient informé.e des dernières nouvelles susceptibles d'avoir un impact sur les mouvements du marché.
Données des plateformes d'échange de cryptomonnaies Diffusez en direct les mises à jour des transactions, les cotations de prix, les changements du carnet d'ordres ou les alertes de volatilité pour les actifs cryptographiques. Améliore la connaissance en temps réel des conditions du marché des cryptomonnaies et des mouvements de prix soudains.
Volatilité et indicateurs macroéconomiques Affichez les niveaux de volatilité en temps réel ou les indicateurs d'activité inhabituelle pour les instruments cibles dans le Panneau de symbole actif. Favorise la connaissance au niveau macroéconomique et aide à identifier les opportunités de trading lors d'extrêmes du marché.
Visualiseur de résultats de modèles quantitatifs Visualisez les résultats de modèles dynamiques (tels que l'augmentation de la dynamique sur EURUSD). Relie l'analyse quantitative aux décisions de trading de manière visuellement accessible.
Flux de signaux de trading externes Diffusez des signaux automatisés provenant de modèles d'apprentissage automatique (ML) de services externes acheminés via WebSocket. Permet la livraison immédiate de signaux pour les utilisateurs qui suivent des stratégies algorithmiques ou des bots tiers.

Résumé

Cet exemple de plug-in montre comment intégrer du contenu externe en temps réel dans cTrader à l'aide d'une connexion WebSocket. Bien que l'exemple démontre un flux d'actualités en direct dans le Panneau de symbole actif, la même approche prend en charge les signaux, les alertes, les analyses et bien plus encore.

Pour plus de détails sur le développement, consultez notre documentation sur les plug-ins.