如何创建自定义框架插件
交易者通常希望将包含重要交易和技术分析信息的网站尽可能靠近图表。 插件使他们能够通过自定义框架实现这一目标。
在本文及其对应的视频中,我们将向您展示如何使用插件创建可以容纳网站和文本框的自定义框架。
创建显示网站的自定义框架
我们将在图表区域中创建一个自定义框架来容纳一个网站。
转到 Algo 应用程序并切换到插件选项卡。 点击新建按钮以创建新插件。 勾选空白选项。 为您的插件命名,例如“我的自定义框架示例”,然后点击创建按钮。

当代码编辑器出现时,初始化一个 WebView 对象。
| _cTraderWebView = new WebView();
|
订阅 WebView 加载事件。
| _cTraderWebView.Loaded += _cTraderWebView_Loaded;
|
当 WebView 加载时,将 cTrader 论坛设置为网站。
| private void _cTraderWebView_Loaded(WebViewLoadedEventArgs args)
{
_cTraderWebView.NavigateAsync("https://ctrader.com/forum");
}
|
初始化一个自定义图表框架。
| var webViewFrame = ChartManager.AddCustomFrame("Forum");
|
将 WebView 分配为自定义图表框架的子项。
| webViewFrame.Child = _cTraderWebView;
|
将自定义图表框架设置为多图模式。
| webViewFrame.ChartContainer.Mode = ChartMode.Multi;
|
将其附加到图表中。
您可以复制以下完整代码:
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 | using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo.Plugins
{
[Plugin(AccessRights = AccessRights.None)]
public class MyCustomFrameExample : Plugin
{
WebView _cTraderWebView = new WebView();
protected override void OnStart()
{
_cTraderWebView.Loaded += _cTraderWebView_Loaded;
var webViewFrame = ChartManager.AddCustomFrame("Forum");
webViewFrame.Child = _cTraderWebView;
webViewFrame.ChartContainer.Mode = ChartMode.Multi;
webViewFrame.Attach();
}
private void _cTraderWebView_Loaded(WebViewLoadedEventArgs args)
{
_cTraderWebView.NavigateAsync("https://ctrader.com/forum");
}
protected override void OnStop()
{
// Handle Plugin stop here
}
}
}
|
要构建我们的插件,请使用 Ctrl+B 快捷键或点击构建按钮。
要查看结果,请转到交易应用程序。 在我们的案例中,cTrader 论坛网页现在显示在图表区域中的自定义框架中。

管理自定义框架
包含 cTrader 论坛网站的自定义框架可以像 cTrader 中的任何图表框架一样进行管理。 它可以分离并重新附加到图表区域,调整大小,交换或替换为其他图表。
更改网站 URL
我们将用另一个网页替换 cTrader 论坛网站。
返回 Algo 应用程序并编辑插件代码。 将 cTrader 论坛 URL (https://ctrader.com/forum) 替换为 Spotware URL (https://www.spotware.com)。
这应该是最终的代码行:
| _cTraderWebView.NavigateAsync("https://www.spotware.com");
|
再次构建插件并转到 Trade 应用程序以查看更改。 现在,Spotware 网站显示在自定义框架中。

添加多个框架
我们将更新插件代码以添加两个自定义框架,每个框架显示一个网站。 添加一个新的 WebView 对象并重复上一个示例中的代码步骤和行。
1
2
3
4
5
6
7
8
9
10
11
12
13 | WebView _cTraderWebView = new WebView();
WebView _cTraderWebViewSite = new WebView();
_cTraderWebViewSite.Loaded += _cTraderWebViewSite_Loaded;
var webViewFrameSite = ChartManager.AddCustomFrame("Site");
webViewFrameSite.Child = _cTraderWebViewSite;
webViewFrameSite.ChartContainer.Mode = ChartMode.Multi;
webViewFrameSite.Attach();
private void _cTraderWebViewSite_Loaded(WebViewLoadedEventArgs args)
{
_cTraderWebViewSite.NavigateAsync("https://www.spotware.com");
}
|
您可以复制以下完整代码:
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 | using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo.Plugins
{
[Plugin(AccessRights = AccessRights.None)]
public class MyCustomFrameExample : Plugin
{
WebView _cTraderWebView = new WebView();
WebView _cTraderWebViewSite = new WebView();
protected override void OnStart()
{
_cTraderWebView.Loaded += _cTraderWebView_Loaded;
var webViewFrame = ChartManager.AddCustomFrame("Forum");
webViewFrame.Child = _cTraderWebView;
webViewFrame.ChartContainer.Mode = ChartMode.Multi;
webViewFrame.Attach();
_cTraderWebViewSite.Loaded += _cTraderWebViewSite_Loaded;
var webViewFrameSite = ChartManager.AddCustomFrame("Site");
webViewFrameSite.Child = _cTraderWebViewSite;
webViewFrameSite.ChartContainer.Mode = ChartMode.Multi;
webViewFrameSite.Attach();
}
private void _cTraderWebView_Loaded(WebViewLoadedEventArgs args)
{
_cTraderWebView.NavigateAsync("https://www.ctrader.com/forum");
}
private void _cTraderWebViewSite_Loaded(WebViewLoadedEventArgs args)
{
_cTraderWebViewSite.NavigateAsync("https://www.spotware.com");
}
protected override void OnStop()
{
// Handle Plugin stop here
}
}
}
|
构建插件。 当您返回 Algo 应用程序时,您应该看到两个网站(cTrader 论坛和 Spotware)分别显示在各自的框架中。

创建文本框
除了包含网页的图表框架外,插件还允许您添加包含其他对象的自定义框架。 例如,您可以添加一个包含文本框的框架。
删除所有 WebView 代码行,并添加以下文本框代码行:
| var webViewFrame = ChartManager.AddCustomFrame("Hello World");
var txtHelloWorld = new TextBlock
{
Text = "Hello World"
};
webViewFrame.Child = txtHelloWorld;
webViewFrame.ChartContainer.Mode = ChartMode.Single;
webViewFrame.Attach();
|
您可以复制下面的完整代码。
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 | using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo.Plugins
{
[Plugin(AccessRights = AccessRights.None)]
public class MyCustomFrameExample : Plugin
{
protected override void OnStart()
{
var webViewFrame = ChartManager.AddCustomFrame("Hello World");
var txtHelloWorld = new TextBlock
{
Text = "Hello World"
};
webViewFrame.Child = txtHelloWorld;
webViewFrame.ChartContainer.Mode = ChartMode.Single;
webViewFrame.Attach();
}
protected override void OnStop()
{
// Handle Plugin stop here
}
}
}
|
构建插件并在 Trade 应用程序中查看结果。 这次,您应该在图表区域中看到一个包含 Hello World 文本的框。

总结
您现在应该熟练使用插件将网页、文本框和其他有用元素整合到图表区域中。