Vai al contenuto

WebSocket Sample

Panoramica

Il plugin WebSocket Sample abilita l'integrazione di dati in tempo reale in cTrader attraverso le seguenti funzionalità chiave:

  • Collega cTrader a un server WebSocket esterno per ricevere flussi di dati in tempo reale.
  • Visualizza contenuti live come notizie o avvisi di trading direttamente nel Pannello del simbolo attivo utilizzando un blocco di testo personalizzato.
  • Aggiorna automaticamente il pannello con nuovi messaggi quando vengono ricevuti, consentendo informazioni tempestive.

Il plugin funziona attraverso un pannello configurabile dall'utente. Rimane attivo mentre cTrader Windows o Mac è in esecuzione e rilascia automaticamente le risorse di sistema quando viene arrestato.

Creazione del plugin

Scopri come creare plugin, utilizzando C# o Python, nelle nostre guide passo dopo passo.

Il codice del plugin WebSocket Sample è disponibile nei nostri repository pubblici C# e Python. Lo stesso codice è fornito come modello nella procedura guidata di creazione dell'algoritmo in cTrader Windows o Mac, oppure puoi semplicemente copiare e utilizzare lo snippet qui sotto:

 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)

Opzioni di personalizzazione

Il plugin combina le impostazioni WebSocket con elementi dell'interfaccia utente per fornire contenuti di testo live. Di seguito è riportata una suddivisione dei suoi componenti chiave e delle loro funzioni:

Parametro Descrizione Valori possibili
Text Visualizza il contenuto iniziale nel blocco di testo. Starting news feed…
AddBlock Aggiunge un blocco al Pannello del simbolo attivo. asp.symboltab.addblock(news)
_textBlock.Text Aggiorna il blocco di testo con il messaggio WebSocket ricevuto. args.text
FontSize Imposta la dimensione del testo. 16, 18, 20, ecc.
FontWeight Definisce lo spessore del testo. regular, bold, extrabold, ecc.
TextAlignment Allinea il testo all'interno del blocco di testo. left, centre, ecc.
Padding Specifica lo spazio attorno al blocco di testo. (5, 5, 5, 5), (8, 8, 8, 8), ecc.
aspBlock.Height Imposta l'altezza del blocco personalizzato nell'interfaccia utente. 300px, 350px, ecc.
_targetUri Fornisce l'endpoint WebSocket per il feed di dati. wss://marketdata.tradermade.com/feedadv
KeepAliveInterval Definisce l'intervallo per i ping keep-alive di WebSocket. (0, 1, 30) (ore, minuti, secondi)
_webSocketClient.Send Invia il messaggio di sottoscrizione iniziale al server WebSocket. {userkey:..., symbol:eurusd}
UseDefaultCredentials Configura l'impostazione di autenticazione per la connessione WebSocket. true o false

Nota

Assicurati che il server WebSocket supporti il protocollo e i formati di messaggio previsti dalla tua implementazione.

Casi d'uso

WebSocket Sample fornisce un modo potente e flessibile per estendere cTrader con feed di dati in tempo reale. Supporta un'ampia gamma di integrazioni personalizzate per varie esigenze di trading. Di seguito sono riportati casi d'uso pratici che dimostrano come il plugin può migliorare l'esperienza di trading.

Caso d'uso Scenario Valore
Feed newswire Visualizza notizie economiche in tempo reale, titoli che muovono il mercato ed eventi in corso direttamente nella piattaforma. Ti tiene informato sulle ultime notizie che potrebbero influenzare i movimenti di mercato.
Dati sugli exchange di criptovalute Trasmetti in streaming aggiornamenti live sulle operazioni, ticker dei prezzi, modifiche al book degli ordini o avvisi sulla volatilità per gli asset crypto. Migliora la consapevolezza in tempo reale delle condizioni del mercato crypto e dei movimenti improvvisi dei prezzi.
Metriche di volatilità e macro Visualizza i livelli di volatilità in tempo reale o gli indicatori di attività insolita per gli strumenti target nel Pannello del simbolo attivo. Supporta la consapevolezza a livello macro e aiuta a identificare opportunità di trading durante gli estremi di mercato.
Visualizzatore di output del modello quantitativo Visualizza l'output dinamico del modello (come l'aumento del momentum su EURUSD). Collega l'analisi quantitativa alle decisioni di trading in modo visivamente accessibile.
Flussi di segnali di trading esterni Trasmetti in streaming segnali automatizzati da servizi esterni o modelli di machine learning (ML) instradati tramite WebSocket. Consente la consegna immediata dei segnali per gli utenti che seguono strategie algoritmiche o bot di terze parti.

Questo esempio di plugin mostra come integrare contenuti esterni in tempo reale in cTrader utilizzando una connessione WebSocket. Sebbene l'esempio dimostri un feed di notizie live nel Pannello del simbolo attivo, lo stesso approccio supporta segnali, avvisi, analisi e molto altro.

Per ulteriori dettagli sullo sviluppo, consulta la nostra documentazione sui plugin.