跳转至

WebSocket Sample

概述

WebSocket Sample插件通过以下关键功能实现cTrader中的实时数据集成:

  • 将cTrader连接到外部WebSocket服务器以接收实时数据流。
  • 使用自定义文本块在活跃交易品种面板中直接显示实时内容,如新闻或交易警报。
  • 在收到新消息时自动更新面板,实现及时信息。

该插件通过用户可配置的面板运行。 它在 cTrader Windows 或 Mac 运行时保持活动状态,并在停止时自动释放系统资源。

插件创建

了解如何通过我们的分步指南创建、编辑和构建插件,无论是从模板还是从头开始。

您可以在GitHub上找到WebSocket Sample插件的代码,或直接复制下方代码。

示例代码
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;
            }
        }
    }        
}

自定义选项

该插件将WebSocket设置与UI元素结合,以提供实时文本内容。 以下是其关键组件及其功能的详细说明:

参数 描述 可选值
Text 在文本块中显示初始内容。 Starting news feed…
AddBlock 将模块添加到活跃交易品种面板。 asp.symboltab.addblock(news)
_textBlock.Text 使用接收到的WebSocket消息更新文本块。 args.text
FontSize 设置文本的大小。 16, 18, 20, 等。
FontWeight 定义文本的粗细。 regular, bold, extrabold, 等。
TextAlignment 在文本块中对齐文本。 left, centre, 等。
Padding 指定文本块周围的间距。 (5, 5, 5, 5), (8, 8, 8, 8), 等。
aspBlock.Height 设置用户界面中自定义块的高度。 300px, 350px, 等。
_targetUri 提供数据源的WebSocket端点。 wss://marketdata.tradermade.com/feedadv
KeepAliveInterval 定义WebSocket保持连接ping的间隔。 (0, 1, 30) (小时, 分钟, 秒)
_webSocketClient.Send 向WebSocket服务器发送初始订阅消息。 {userkey:..., symbol:eurusd}
UseDefaultCredentials 配置WebSocket连接的身份验证设置。 truefalse

注意

确保WebSocket服务器支持您的实现所期望的协议和消息格式。

用例

WebSocket Sample 提供了一种强大而灵活的方式来通过实时数据源扩展 cTrader。 它支持针对各种交易需求量身定制的广泛集成。 以下是展示该插件如何增强交易体验的实际用例。

使用场景 场景
新闻源推送 在平台内直接查看实时经济新闻、市场动向头条和突发事件。 让您了解可能影响市场走势的突发新闻。
加密货币交易所数据 实时推送加密货币资产的交易更新、价格跳动点、订单簿变化或波动提醒。 增强对加密货币市场状况和价格突然波动的实时了解。
波动性和宏观指标 在活跃交易品种面板中显示目标工具的实时波动水平或异常活动指标。 支持宏观层面的了解,并帮助在市场极端情况下识别交易机会。
量化模型输出查看器 查看动态模型输出(例如 EURUSD 的动量增加)。 以视觉上可访问的方式将量化分析与交易决策联系起来。
外部交易信号流 通过 WebSocket 路由的外部服务机器学习 (ML) 模型流式传输自动化信号。 为遵循算法策略或第三方机器人的用户提供即时信号传递。

总结

此插件示例展示了如何使用 WebSocket 连接将实时外部内容集成到 cTrader 中。 虽然示例展示了活跃交易品种面板中的实时新闻推送,但相同的方法也支持信号、提醒、分析等更多内容。

有关进一步的开发细节,请参阅我们的插件文档