WebSocket Sample¶
Ikhtisar ¶
Plugin WebSocket Sample memungkinkan integrasi data real-time di cTrader melalui fungsionalitas utama berikut:
- Menghubungkan cTrader ke server WebSocket eksternal untuk menerima aliran data real-time.
- Menampilkan konten langsung seperti berita atau peringatan trading langsung di Panel Simbol Aktif menggunakan blok teks khusus.
- Memperbarui panel secara otomatis dengan pesan baru saat diterima, memungkinkan informasi yang tepat waktu.

Plugin ini beroperasi melalui panel yang dapat dikonfigurasi oleh pengguna. Tetap aktif saat cTrader Windows atau Mac berjalan dan secara otomatis melepaskan sumber daya sistem saat dihentikan.
Pembuatan Plugin ¶
Pelajari cara membuat, mengedit, dan membangun plugin dari template atau dari awal dalam panduan langkah demi langkah kami.
Anda dapat menemukan kode plugin WebSocket Sample di GitHub, atau cukup salin di bawah ini.
Sampel kode
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;
}
}
}
}
Opsi Kustomisasi ¶
Plugin ini menggabungkan pengaturan WebSocket dengan elemen UI untuk menyampaikan konten teks langsung. Berikut adalah rincian komponen utama dan fungsinya:
| Parameter | Deskripsi | Nilai yang Mungkin |
|---|---|---|
Text | Menampilkan konten awal di blok teks. | Starting news feed… |
AddBlock | Menambahkan blok ke Panel Simbol Aktif. | asp.symboltab.addblock(news) |
_textBlock.Text | Memperbarui blok teks dengan pesan WebSocket yang diterima. | args.text |
FontSize | Menetapkan ukuran teks. | 16, 18, 20, dst. |
FontWeight | Menentukan ketebalan teks. | regular, bold, extrabold, dst. |
TextAlignment | Meratakan teks dalam blok teks. | left, centre, dst. |
Padding | Menentukan jarak di sekitar blok teks. | (5, 5, 5, 5), (8, 8, 8, 8), dst. |
aspBlock.Height | Menetapkan tinggi blok khusus di antarmuka pengguna. | 300px, 350px, dst. |
_targetUri | Menyediakan endpoint WebSocket untuk umpan data. | wss://marketdata.tradermade.com/feedadv |
KeepAliveInterval | Menentukan interval untuk ping keep-alive WebSocket. | (0, 1, 30) (jam, menit, detik) |
_webSocketClient.Send | Mengirim pesan langganan awal ke server WebSocket. | {userkey:..., symbol:eurusd} |
UseDefaultCredentials | Mengonfigurasi pengaturan otentikasi untuk koneksi WebSocket. | true atau false |
Catatan
Pastikan server WebSocket mendukung protokol dan format pesan yang diharapkan oleh implementasi Anda.
Kasus Penggunaan ¶
WebSocket Sample menyediakan cara yang kuat dan fleksibel untuk memperluas cTrader dengan umpan data real-time. Mendukung berbagai integrasi yang disesuaikan dengan berbagai kebutuhan trading. Berikut adalah kasus penggunaan praktis yang menunjukkan bagaimana plugin dapat meningkatkan pengalaman trading.
| Kasus Penggunaan | Skenario | Nilai |
|---|---|---|
| Umpan berita | Lihat berita ekonomi real-time, headline yang menggerakkan pasar, dan peristiwa terkini langsung di platform. | Menginformasikan Anda tentang berita terkini yang mungkin memengaruhi pergerakan pasar. |
| Data bursa kripto | Stream pembaruan trading live, ticker harga, perubahan order book, atau peringatan volatilitas untuk aset kripto. | Meningkatkan kesadaran real-time tentang kondisi pasar kripto dan pergerakan harga mendadak. |
| Metrik volatilitas dan makro | Tampilkan level volatilitas real-time atau indikator aktivitas tidak biasa untuk instrumen target di Panel Simbol Aktif. | Mendukung kesadaran tingkat makro dan membantu mengidentifikasi peluang trading selama kondisi pasar ekstrem. |
| Penampil output model kuantitatif | Lihat output model dinamis (seperti peningkatan momentum pada EURUSD). | Menghubungkan analisis kuantitatif dengan keputusan trading dengan cara yang mudah diakses secara visual. |
| Aliran sinyal perdagangan eksternal | Stream sinyal otomatis dari layanan eksternal model machine learning (ML) yang diarahkan melalui WebSocket. | Memungkinkan pengiriman sinyal segera bagi pengguna yang mengikuti strategi algoritmik atau bot pihak ketiga. |
Ringkasan ¶
Contoh plugin ini menunjukkan cara mengintegrasikan konten eksternal real-time ke cTrader menggunakan koneksi WebSocket. Sementara contoh ini menunjukkan feed berita live di Panel Simbol Aktif, pendekatan yang sama mendukung sinyal, peringatan, analitik, dan lainnya.
Untuk detail pengembangan lebih lanjut, lihat dokumentasi plugin kami.