Zum Inhalt

WebSocket Sample

Übersicht

Das WebSocket Sample-Plugin ermöglicht die Echtzeit-Datenintegration in cTrader durch die folgenden Hauptfunktionen:

  • Verbindet cTrader mit einem externen WebSocket-Server, um Echtzeit-Datenströme zu empfangen.
  • Zeigt Live-Inhalte wie Nachrichten oder Handelswarnungen direkt im Bereich eines aktiven Symbols mithilfe eines benutzerdefinierten Textblocks an.
  • Aktualisiert das Panel automatisch mit neuen Nachrichten, wenn diese empfangen werden, und ermöglicht so zeitnahe Informationen.

Das Plugin arbeitet über ein benutzerkonfigurierbares Panel. Es bleibt aktiv, während cTrader Windows oder Mac läuft, und gibt automatisch Systemressourcen frei, wenn es gestoppt wird.

Plugin-Erstellung

Erfahren Sie, wie Sie Plugins erstellen, entweder mit C# oder Python, in unseren schrittweisen Anleitungen.

Der Code des WebSocket Sample-Plugins ist in unseren öffentlichen C#- und Python-Repositories verfügbar. Derselbe Code wird als Vorlage im Algorithmen-Erstellungsassistenten in cTrader Windows oder Mac bereitgestellt, oder Sie können einfach den folgenden Ausschnitt kopieren und verwenden:

 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)

Anpassungsoptionen

Das Plugin kombiniert WebSocket-Einstellungen mit UI-Elementen, um Live-Textinhalte bereitzustellen. Im Folgenden finden Sie eine Aufschlüsselung seiner Hauptkomponenten und ihrer Funktionen:

Parameter Beschreibung Mögliche Werte
Text Zeigt den anfänglichen Inhalt im Textblock an. Starting news feed…
AddBlock Fügt einen Block zum Bereich eines aktiven Symbols hinzu. asp.symboltab.addblock(news)
_textBlock.Text Aktualisiert den Textblock mit der empfangenen WebSocket-Nachricht. args.text
FontSize Legt die Größe des Textes fest. 16, 18, 20, etc.
FontWeight Definiert die Stärke des Textes. regular, bold, extrabold, etc.
TextAlignment Richtet den Text innerhalb des Textblocks aus. left, centre, etc.
Padding Gibt den Abstand um den Textblock herum an. (5, 5, 5, 5), (8, 8, 8, 8), etc.
aspBlock.Height Legt die Höhe des benutzerdefinierten Blocks in der Benutzeroberfläche fest. 300px, 350px, etc.
_targetUri Stellt den WebSocket-Endpunkt für den Daten-Feed bereit. wss://marketdata.tradermade.com/feedadv
KeepAliveInterval Definiert das Intervall für WebSocket-Keep-Alive-Pings. (0, 1, 30) (Stunden, Minuten, Sekunden)
_webSocketClient.Send Sendet die erste Abonnementnachricht an den WebSocket-Server. {userkey:..., symbol:eurusd}
UseDefaultCredentials Konfiguriert die Authentifizierungseinstellung für die WebSocket-Verbindung. true oder false

Hinweis

Stellen Sie sicher, dass der WebSocket-Server das Protokoll und die von Ihrer Implementierung erwarteten Nachrichtenformate unterstützt.

Anwendungsfälle

WebSocket Sample bietet eine leistungsstarke und flexible Möglichkeit, cTrader mit Echtzeit-Datenfeeds zu erweitern. Es unterstützt eine breite Palette von Integrationen, die auf verschiedene Handelsbedürfnisse zugeschnitten sind. Nachfolgend finden Sie praktische Anwendungsfälle, die zeigen, wie das Plugin das Handelserlebnis verbessern kann.

Anwendungsfall Szenario Wert
Newswire-Feeds Zeigen Sie Wirtschaftsnachrichten in Echtzeit, marktbewegende Schlagzeilen und aktuelle Ereignisse direkt in der Plattform an. Hält Sie über aktuelle Nachrichten auf dem Laufenden, die sich auf Marktbewegungen auswirken können.
Krypto-Börsendaten Streamen Sie Live-Handelsaktualisierungen, Preisticker, Orderbuchänderungen oder Alarmmeldungen zur Volatilität von Krypto-Assets. Verbessert das Echtzeit-Bewusstsein für Kryptomarktbedingungen und plötzliche Preisbewegungen.
Volatilitäts- und Makrokennzahlen Zeigen Sie Echtzeit-Volatilitätsniveaus oder Indikatoren für ungewöhnliche Aktivitäten für Zielinstrumente im Bereich eines aktiven Symbols an. Unterstützt das Bewusstsein auf Makroebene und hilft dabei, Handelsmöglichkeiten bei Marktextremen zu identifizieren.
Quant-Modell-Output-Viewer Zeigen Sie dynamische Modellausgaben an (z. B. Momentum-Anstieg bei EURUSD). Verbindet quantitative Analysen mit Handelsentscheidungen auf visuell zugängliche Weise.
Externe Handelssignal-Streams Streamen Sie automatisierte Signale von externen Diensten oder Machine-Learning-Modellen (ML), die über WebSocket geleitet werden. Ermöglicht die sofortige Signalübermittlung für Nutzer, die algorithmischen Strategien oder Drittanbieter-Bots folgen.

Zusammenfassung

Dieses Plugin-Beispiel zeigt, wie Sie externe Echtzeit-Inhalte über eine WebSocket-Verbindung in cTrader integrieren können. Während das Beispiel einen Live-Newsfeed im Bereich eines aktiven Symbols demonstriert, unterstützt derselbe Ansatz Signale, Alarmmeldungen, Analysen und mehr.

Weitere Entwicklungsdetails finden Sie in unserer Plugin-Dokumentation.