Ana içeriğe geç

cTrader Algo'da WebSockets ile çalışma

cTrader Algo API, trader'ların ve geliştiricilerin bir WebSocket bağlantısı aracılığıyla çeşitli web hizmetlerine ve kaynaklarına erişmesine olanak tanır. WebSocket protokolü, daha hızlı olduğu ve gerçek zamanlı veri aktarımını desteklediği için ağ erişimi için HTTP'den daha verimlidir.

Bu makalede ve ilgili videosunda, WebSockets aracılığıyla mesaj gönderip almayı öğreneceksiniz.

Bir cBot oluşturun

Örneğimizde, bir TraderMade akışına bağlanmayı ve gelen bilgileri cBot günlüğümüze yazdırmayı amaçlıyoruz.

İlk olarak, yeni bir cBot oluşturmak için Algo uygulamasına gidiyoruz. cBots sekmesinde, Yeni düğmesine tıklayın. cBot için Web Sockets Örneği gibi bir ad yazın ve ardından Oluştur'a tıklayın.

Artık cBot kodunu amaçlarımız doğrultusunda değiştirebiliriz. Yeni bir WebSocketClient tanımlayarak başlayalım.

1
private WebSocketClient _webSocketClient = new WebSocketClient();

Ardından, bağlanacağımız konum olan uç nokta Uri'mizi başlatıyoruz.

1
private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");

OnStart() yöntemini düzenlememiz, akış hizmetine bağlanmak için Uri'yi kullanmamız ve TextReceived olayına abone olmamız gerekiyor. Bu olay, bağlantı aracılığıyla uygulamamıza metin ulaştığında tetiklenir.

1
2
3
4
5
protected override void OnStart()
{
    _webSocketClient.Connect(_targetUri);
    _webSocketClient.TextReceived += _webSocketClient_TextReceived;
}

Alınan mesajı TextReceived içinde yazdırmak istiyoruz.

1
2
3
4
private void TextReceived(WebSocketClientTextReceivedEventArgs obj)
{
    Print(obj.Text);
}

Aşağıdaki kodun tamamını kopyalayabilirsiniz:

 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
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class WebSocketsExample : Robot
    {
        private WebSocketClient _webSocketClient = new WebSocketClient();
        private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");

        protected override void OnStart()
        {
            _webSocketClient.Connect(_targetUri);

            _webSocketClient.TextReceived += _webSocketClient_TextReceived;
        }

        private void _webSocketClient_TextReceived(WebSocketClientTextReceivedEventArgs obj)
        {
            Print(obj.Text);
        }

        protected override void OnTick()
        {
            // Handle price updates here
        }

        protected override void OnStop()
        {
            // Handle cBot stop here
        }
    }
}

cBot'u oluşturmak için Oluştur düğmesine tıklayın veya Ctrl+B kısayolunu kullanın.

cBot için Örnek ekle düğmesine tıklayın. Yerel seçeneğini belirleyin, bir sembol ve hesap seçin ve ardından Örnek ekle düğmesine tıklayın.

Günlükler sekmesine gidin. Bağlantıyı onaylayan bazı cBot mesajları görmelisiniz.

Sembol fiyat akışına abone olma

Algo uygulamasındaki Web Sockets Örneği cBot'umuz için kod düzenleyiciye geri dönüyoruz. Burada, yakın zamanda bağlandığımız hizmeti kullanarak bir sembol fiyat akışına abone olmak istiyoruz.

OnStart() yöntemimizde hizmete bir abonelik mesajı göndermek için kodu yazın.

1
2
3
var data = "{\"userKey\":\"wsI4foSciCjMyCuoc2xw\", \"symbol\":\"EURUSD\"}";

_webSocketClient.Send(data);

Not

Kod örneğini ve jetonu TraderMade web sitesinden edindik.

API Print() yönteminde kullanılamayan köşeli parantezleri değiştirmek için Print komutunu değiştirin.

1
Print(obj.Text.Replace("{", "").Replace("}","").ToString()); 

Son olarak, OnStop() yönteminde bağlantıyı kapatın.

1
_webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);

Aşağıdaki kodun tamamını kopyalayabilirsiniz:

 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
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class WebSocketsExample : Robot
    {
        private WebSocketClient _webSocketClient = new WebSocketClient();
        private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");

        protected override void OnStart()
        {
            _webSocketClient.Connect(_targetUri);

            _webSocketClient.TextReceived += _webSocketClient_TextReceived;

            var data = "{\"userKey\":\"wsI4foSciCjMyCuoc2xw\", \"symbol\":\"EURUSD\"}";

            _webSocketClient.Send(data);
        }

        private void _webSocketClient_TextReceived(WebSocketClientTextReceivedEventArgs obj)
        {
            Print(obj.Text.Replace("{", "").Replace("}", "").ToString());
        }

        protected override void OnTick()
        {
            // Handle price updates here
        }

        protected override void OnStop()
        {
            _webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);
        }
    }
}

cBot'u yeniden oluşturun ve ardından tekrar başlatın.

Daha önce yaptığınız gibi Günlükler sekmesine gidin. Artık sembol fiyatının gerçek zamanlı olarak aktarıldığını görmelisiniz.

Bu makale, cTrader'da bilgi veya mesaj gönderip almak için WebSockets'ı nasıl kullanacağınızı gösterdi.