跳转至

插件在 cTrader UI 中的放置

插件可以在 cTrader UI 的各个区域添加自定义元素,例如活跃交易品种面板 (ASP)、交易看板 (TW)、图表和自定义框架、自定义窗口和主菜单区域。 本指南演示了如何使用这些选项,并建议了相关的用例。

一分钟了解插件放置!

  • 通过扩展 cTrader UI,您可以将第三方服务无缝集成到交易终端中。
  • 单个插件可以在 UI 的不同区域执行不同的功能,从而允许您自定义 cTrader 的外观和感觉。
  • 您可以配置插件创建的自定义元素,使它们可以从 cTrader UI 中的原始位置分离并重新附加。
  • 某些想法可能更适合 UI 的特定区域。 您可以尝试不同的放置方式,以发现最适合的方案。

ASP

ASP 位于图表显示的右侧。 插件可以使用以下选项添加一个或多个自定义元素:

  • 作为 AspTab。 使用此选项时,插件会在 SymbolDoM 等选项卡旁边显示自定义元素。
  • 作为 AspBlock。 使用此选项时,插件会在 Symbol 选项卡中以新的可折叠和可展开部分显示自定义元素,并具有可自定义的标题和位置。

以下是同一插件作为块和选项卡的外观。

用例

以下是一些在 ASP 块中显示自定义元素的插件想法:

  • 一个用于计算给定交易品种保护级别的小型计算器。
  • 一个显示当前活跃交易品种附加信息的网格。

以下想法在嵌入为 ASP 选项卡时效果最佳:

  • 一个包含所有当前开仓头寸自定义分析的列表。
  • 一个财经新闻网站的 WebView。

要将自定义元素添加为 ASP 块,请使用 Asp.SymbolTab.AddBlock(string title) 方法。

1
2
3
var child = ... // Insert the contents you want the block to have here
AspBlock aspBlock = Asp.SymbolTab.AddBlock("Cool Plugin");
aspBlock.Child = child; 

要将自定义元素添加为 ASP 选项卡,请使用 Asp.AddTab(string title) 方法。

1
2
3
var child = ... // Insert the contents you want the tab to have here
AspTab pluginTab = Asp.AddTab("Another Cool Plugin");
pluginTab.Child = child;

要确定块或选项卡在 ASP 中的显示顺序,请分别使用 AspBlockAspTabIndex 属性。

警告

请注意,任何自定义选项卡都不能放置在 Symbol 选项卡之前。 您也不能将您的块嵌入到 Symbol 选项卡中的 New Order 部分之上。 因此,嵌入到 ASP 中的块的最小可能索引为 1。

交易看板

交易看板位于图表区域的正下方。 您可以在那里添加自定义元素作为单独的选项卡。

以下是插件添加到显示时的外观。

用例

以下想法适合在交易看板显示中展示。

  • 一个显示用户当前账户各种统计数据的自定义分析套件。
  • 一个面向交易的网络论坛的 WebView。

要将自定义元素添加为交易看板显示中的新选项卡,请使用 Trade Watch.AddTab(string title) 方法。

1
2
3
var child = ... // Insert the contents you want the plugin to have here
Trade WatchTab Trade WatchTab = Trade Watch.AddTab("Yet Another Cool Plugin");
Trade WatchTab.Child = child;

与 ASP 块和选项卡类似,您可以使用 Trade WatchTabIndex 属性来定义其相对于交易看板显示中其他选项卡的位置。

注意

所有放置在交易看板显示中的自定义选项卡仅在终端首次启动时出现在 cTrader UI 中包含的默认选项卡的最右侧。 随后,这些选项卡的 Index 必须为 1 或更大;索引仅确定插件选项卡相对于其他插件选项卡的相对位置。

图表和自定义框架

您还可以选择在单独的图表框架中显示自定义元素,实质上将其作为新图表添加到当前图表视图中。 此外,插件可以为任何可用的交易品种和图表框架打开任意数量的图表。

以下是带有 WebView 的自定义图表框架与常规图表并排的外观。

用例

以下想法在嵌入自定义框架时效果最佳:

  • 另一个图表服务的 WebView。
  • 一个大规模的自定义交易面板。
  • 一个生成式 AI 服务的 WebView,交易者可以在决定如何应对市场波动时咨询该服务。

要添加新的自定义框架,请使用 ChartManager.AddCustomFrame(string title) 方法。

1
2
3
var child = ... // Insert the contents you want the plugin to have here
var newCustomFrame = ChartManager.AddCustomFrame("Best Plugin");
newCustomFrame.Child = child;

要让您的插件打开新图表,请使用 ChartManager.AddChartFrame(string symbolName, TimeFrame timeFrame) 方法。

1
var newChart = ChartManager.AddChartFrame("EURUSD", TimeFrame.Day2);

注意

一旦插件添加了新的自定义框架或图表,cTrader 将切换到多图模式,即使之前启用了单图模式或自由图表模式。

主菜单

插件可以编码添加到主菜单 UI 的自定义部分,除了现有的部分如交易、算法、跟单和分析。 任何添加的自定义部分可以包含网站、仪表板、按钮、工具等。

以下是一个简单插件的代码,它将 cTrader 商店 自定义部分添加到主菜单,其中包含 cTrader 商店 网站:

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

namespace cAlgo
{
    [Plugin(AccessRights = AccessRights.None)]
    public class CTraderStorePlugin : Plugin
    {
        private MainMenuOwnCustomItem _storeItem;

        private const string StoreIconSvg = @"
        <svg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
          <path fill='white' d='M7 7V6a5 5 0 0 1 10 0v1h2a1 1 0 0 1 1 1l-1 11a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2L4 8a1 1 0 0 1 1-1h2zm2 0h6V6a3 3 0 0 0-6 0v1z' />
        </svg>";

        protected override void OnStart()
        {
            _storeItem = MainMenu.AddItem("cTrader Store", new SvgIcon(StoreIconSvg));

            var webView = new WebView();
            webView.Loaded += _ =>
            {
                webView.NavigateAsync("http://ctrader.com");
            };

            _storeItem.Child = webView;

            MainMenu.SelectedItemChanged += OnSelectedItemChanged;
        }

        private void OnSelectedItemChanged(MainMenuSelectedItemChangedEventArgs args)
        {
            if (args.NewItem == _storeItem)
            {
                MainMenu.IsExpanded = true;
            }
        }

        protected override void OnStop()
        {
            MainMenu.SelectedItemChanged -= OnSelectedItemChanged;

            if (_storeItem != null)
            {
                MainMenu.RemoveItem(_storeItem);
                _storeItem = null;
            }
        }
    }
}

选择 cTrader 商店 导航到自定义部分,显示其内容如下所示。

多位置放置

以下插件同时将自定义元素添加到 cTrader UI 的多个位置:

  • 该插件在 ASP 块中显示所有当前开仓头寸的佣金总和。
  • 在交易看板显示中,该插件显示所有开仓头寸的累计交易量。
  • 该插件还在自定义图表框架中显示 ctrader.com 的 WebView。
 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
74
75
76
77
78
79
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 PluginPlacementTest : Plugin
    {

        private TextBlock _commissionsText;
        private TextBlock _volumeText;
        private WebView _cTraderWebView;

        protected override void OnStart()
        {
            _cTraderWebView = new WebView();
            _cTraderWebView.Loaded += ShowWebsite;

            _commissionsText = new TextBlock
            {
                Text = ShowCommissions(),
                FontSize = 100,
                TextAlignment = TextAlignment.Center,
                FontWeight = FontWeight.ExtraBold,
            };

            _volumeText = new TextBlock
            {
                Text = ShowVolume(),
                FontSize = 100,
                TextAlignment = TextAlignment.Center,
                FontWeight = FontWeight.ExtraBold,
            };

            ChartManager.AddCustomFrame("cTrader.com").Child = _cTraderWebView;
            Asp.SymbolTab.AddBlock("Commissions").Child = _commissionsText;
            TradeWatch.AddTab("Volume").Child = _volumeText;
            Timer.Start(TimeSpan.FromSeconds(0.5));

        }

        protected void ShowWebsite(WebViewLoadedEventArgs args)
        {
            _cTraderWebView.NavigateAsync("https://ctrader.com");
        }

        protected string ShowCommissions()
        {
            double commissionsCounter = 0;
            foreach (var position in Positions)
            {
                commissionsCounter += position.Commissions;
            }
            return commissionsCounter.ToString();
        }

        protected string ShowVolume() 
        {
            double volumeCounter = 0;
            foreach (var position in Positions) 
            {
                volumeCounter += position.VolumeInUnits;
            }
            return volumeCounter.ToString();
        }

        protected override void OnTimer()
        {
            _commissionsText.Text = ShowCommissions();
            _volumeText.Text = ShowVolume();
        }
    }
}

总结

cTrader 提供了多种通过插件放置自定义元素的选项。 您可以使用它们自定义 cTrader UI,使平台真正属于您。

Image title