Ana içeriğe geç

WebSocket Sample

Genel Bakış

WebSocket Sample eklentisi, cTrader'da aşağıdaki temel işlevler aracılığıyla gerçek zamanlı veri entegrasyonunu sağlar:

  • Gerçek zamanlı veri akışları almak için cTrader'ı harici bir WebSocket sunucusuna bağlar.
  • Haberler veya işlem uyarıları gibi canlı içeriği özel bir metin bloğu kullanarak doğrudan Aktif Sembol Panelinde gösterir.
  • Alındığında paneli yeni mesajlarla otomatik olarak günceller, zamanında bilgi sağlar.

Eklenti, kullanıcı tarafından yapılandırılabilir bir panel aracılığıyla çalışır. cTrader Windows veya Mac çalışırken aktif kalır ve durdurulduğunda sistem kaynaklarını otomatik olarak serbest bırakır.

Eklenti oluşturma

Adım adım rehberlerimizde C# veya Python kullanarak eklentiler oluşturmayı öğrenin.

WebSocket Örnek eklenti kodu, herkese açık C# ve Python depolarımızda mevcuttur. Aynı kod, cTrader Windows veya Mac'teki algoritma oluşturma sihirbazında bir şablon olarak sağlanmıştır veya aşağıdaki kod parçasını kopyalayıp kullanabilirsiniz:

 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)

Özelleştirme seçenekleri

Eklenti, canlı metin içeriği sunmak için WebSocket ayarlarını kullanıcı arayüzü öğeleriyle birleştirir. Aşağıda, temel bileşenlerinin ve işlevlerinin bir dökümü bulunmaktadır:

Parametre Açıklama Olası değerler
Text Metin bloğundaki başlangıç içeriğini görüntüler. Starting news feed…
AddBlock Aktif Sembol Paneline bir blok ekler. asp.symboltab.addblock(news)
_textBlock.Text Metin bloğunu alınan WebSocket mesajıyla günceller. args.text
FontSize Metnin boyutunu ayarlar. 16, 18, 20, vb.
FontWeight Metnin kalınlığını tanımlar. normal, kalın, ekstra kalın, vb.
TextAlignment Metin bloğu içindeki metni hizalar. sol, orta, vb.
Padding Metin bloğunun etrafındaki boşluğu belirtir. (5, 5, 5, 5), (8, 8, 8, 8), vb.
aspBlock.Height Kullanıcı arayüzündeki özel bloğun yüksekliğini ayarlar. 300 piksel, 350 piksel, vb.
_targetUri Veri akışı için WebSocket uç noktasını sağlar. wss://marketdata.tradermade.com/feedadv
KeepAliveInterval WebSocket canlı tutma pingleri için aralığı tanımlar. (0, 1, 30) (saat, dakika, saniye)
_webSocketClient.Send WebSocket sunucusuna ilk abonelik mesajını gönderir. {userkey:..., symbol:eurusd}
UseDefaultCredentials WebSocket bağlantısı için kimlik doğrulama ayarını yapılandırır. true veya false

Not

WebSocket sunucusunun uygulamanızın beklediği protokolü ve mesaj formatlarını desteklediğinden emin olun.

Kullanım durumları

WebSocket Sample, cTrader'ı gerçek zamanlı veri akışlarıyla genişletmek için güçlü ve esnek bir yol sunar. Çeşitli işlem ihtiyaçlarına göre uyarlanmış geniş bir entegrasyon yelpazesini destekler. Aşağıda, eklentinin işlem deneyimini nasıl geliştirebileceğini gösteren pratik kullanım durumları bulunmaktadır.

Kullanım durumu Senaryo Değer
Haber ajansı akışları Gerçek zamanlı ekonomik haberleri, piyasayı hareketlendiren manşetleri ve son dakika olaylarını doğrudan platformda görüntüleyin. Piyasa hareketlerini etkileyebilecek son dakika haberlerinden haberdar olmanızı sağlar.
Kripto borsa verileri Kripto varlıklar için canlı işlem güncellemelerini, fiyat göstergelerini, emir defteri değişikliklerini veya volatilite uyarılarını yayınlayın. Kripto piyasası koşulları ve ani fiyat hareketleri hakkında gerçek zamanlı farkındalığı artırır.
Volatilite ve makro metrikler Aktif Sembol Panelinde hedef enstrümanlar için gerçek zamanlı volatilite seviyelerini veya olağandışı aktivite göstergelerini görüntüleyin. Makro düzeyde farkındalığı destekler ve piyasa aşırılıkları sırasında işlem fırsatlarını belirlemeye yardımcı olur.
Kantitatif model çıktı görüntüleyici Dinamik model çıktısını görüntüleyin (EURUSD'de momentum artışı gibi). Kantitatif analizi, işlem kararlarıyla görsel olarak erişilebilir bir şekilde birleştirir.
Harici işlem sinyali akışları WebSocket üzerinden yönlendirilen harici hizmetler makine öğrenimi (ML) modellerinden otomatik sinyalleri yayınlayın. Algoritmik stratejileri veya üçüncü taraf botları takip eden kullanıcılar için anında sinyal teslimi sağlar.

Özet

Bu eklenti örneği, WebSocket bağlantısı kullanarak gerçek zamanlı harici içeriğin cTrader'a nasıl entegre edileceğini gösterir. Örnek, Aktif Sembol Panelinde canlı bir haber akışını gösterirken, aynı yaklaşım sinyalleri, uyarıları, analizleri ve daha fazlasını destekler.

Daha fazla geliştirme ayrıntısı için eklenti belgelerimize bakın.