Przejdź do treści

WebSocket Sample

Przegląd

Wtyczka WebSocket Sample umożliwia integrację danych w czasie rzeczywistym w cTrader poprzez następujące kluczowe funkcjonalności:

  • Łączy cTrader z zewnętrznym serwerem WebSocket w celu odbierania strumieni danych w czasie rzeczywistym.
  • Wyświetla treści na żywo, takie jak wiadomości lub alerty handlowe, bezpośrednio w Panelu aktywnego symbolu przy użyciu niestandardowego bloku tekstowego.
  • Automatycznie aktualizuje panel nowymi wiadomościami po ich otrzymaniu, umożliwiając terminowe informowanie.

Wtyczka działa za pośrednictwem panelu konfigurowalnego przez użytkownika. Pozostaje aktywna, gdy cTrader Windows lub Mac jest uruchomiony i automatycznie zwalnia zasoby systemowe po zatrzymaniu.

Tworzenie wtyczki

Dowiedz się, jak tworzyć wtyczki, używając C# lub Pythona, w naszych krok po kroku przewodnikach.

Kod wtyczki WebSocket Sample jest dostępny w naszych publicznych repozytoriach C# i Python. Ten sam kod jest dostarczany jako szablon w kreatorze tworzenia algorytmu w cTrader Windows lub Mac, lub możesz po prostu skopiować i użyć poniższego fragmentu:

 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)

Opcje dostosowywania

Wtyczka łączy ustawienia WebSocket z elementami interfejsu użytkownika w celu dostarczania treści tekstowych na żywo. Poniżej znajduje się podział jej kluczowych komponentów i ich funkcji:

Parametr Opis Możliwe wartości
Text Wyświetla początkową treść w bloku tekstowym. Starting news feed…
AddBlock Dodaje blok do Panelu aktywnego symbolu. asp.symboltab.addblock(news)
_textBlock.Text Aktualizuje blok tekstowy otrzymaną wiadomością WebSocket. args.text
FontSize Ustawia rozmiar tekstu. 16, 18, 20 itd.
FontWeight Określa grubość tekstu. regular, bold, extrabold itd.
TextAlignment Wyrównuje tekst w bloku tekstowym. left, centre itd.
Padding Określa odstęp wokół bloku tekstowego. (5, 5, 5, 5), (8, 8, 8, 8) itd.
aspBlock.Height Ustawia wysokość niestandardowego bloku w interfejsie użytkownika. 300px, 350px itd.
_targetUri Dostarcza punkt końcowy WebSocket dla kanału danych. wss://marketdata.tradermade.com/feedadv
KeepAliveInterval Określa interwał dla pingów keep-alive WebSocket. (0, 1, 30) (godziny, minuty, sekundy)
_webSocketClient.Send Wysyła początkową wiadomość subskrypcji do serwera WebSocket. {userkey:..., symbol:eurusd}
UseDefaultCredentials Konfiguruje ustawienie uwierzytelniania dla połączenia WebSocket. true lub false

Uwaga

Upewnij się, że serwer WebSocket obsługuje protokół i formaty wiadomości oczekiwane przez Twoją implementację.

Przypadki użycia

WebSocket Sample zapewnia potężny i elastyczny sposób rozszerzania cTrader o kanały danych w czasie rzeczywistym. Obsługuje szeroki zakres integracji dostosowanych do różnych potrzeb handlowych. Poniżej przedstawiono praktyczne przypadki użycia, które pokazują, jak wtyczka może ulepszyć doświadczenie handlowe.

Przypadek użycia Scenariusz Wartość
Kanały informacyjne Przeglądaj w czasie rzeczywistym wiadomości ekonomiczne, nagłówki wpływające na rynek i przełomowe wydarzenia bezpośrednio na platformie. Informuje Cię na bieżąco o najświeższych wiadomościach, które mogą wpłynąć na ruchy rynkowe.
Dane z giełd kryptowalut Przesyłaj strumieniowo aktualizacje transakcji na żywo, tickery cenowe, zmiany w księdze zleceń lub alerty o zmienności aktywów kryptowalutowych. Zwiększa świadomość warunków rynkowych kryptowalut w czasie rzeczywistym i nagłych ruchów cenowych.
Zmienność i wskaźniki makro Wyświetlaj poziomy zmienności w czasie rzeczywistym lub wskaźniki nietypowej aktywności dla docelowych instrumentów w Panelu aktywnego symbolu. Wspiera świadomość na poziomie makro i pomaga identyfikować możliwości handlowe podczas ekstremalnych warunków rynkowych.
Przeglądarka wyników modeli ilościowych Przeglądaj dynamiczne wyniki modelu (takie jak wzrost momentum na EURUSD). Łączy analizę ilościową z decyzjami handlowymi w wizualnie dostępny sposób.
Zewnętrzne strumienie sygnałów handlowych Przesyłaj strumieniowo zautomatyzowane sygnały z zewnętrznych usług modeli uczenia maszynowego (ML) kierowanych przez WebSocket. Umożliwia natychmiastowe dostarczanie sygnałów dla użytkowników stosujących strategie algorytmiczne lub boty stron trzecich.

Podsumowanie

Ten przykład wtyczki pokazuje, jak zintegrować zewnętrzne treści w czasie rzeczywistym z cTrader przy użyciu połączenia WebSocket. Chociaż przykład demonstruje kanał informacyjny na żywo w Panelu aktywnego symbolu, to samo podejście obsługuje sygnały, alerty, analizy i więcej.

Aby uzyskać więcej szczegółów dotyczących rozwoju, zapoznaj się z naszą dokumentacją wtyczek.