跳转至

在 cTrader Algo 中使用自定义窗口

在本文及其对应的视频中,我们将讨论在创建 cTrader 算法时如何使用自定义窗口。 我们将解释什么是自定义窗口以及如何在您的 cBot 和指标中使用它们。 我们还将创建一个在 cBot 中使用自定义窗口的示例。

自定义窗口示例

我们现在将切换到 Algo 应用程序,以查看如何在您的 cBot 和指标中使用自定义窗口的示例。 我们将创建一个新指标;在其中,我们将简单地使用 文档 中的一个现成示例。

将文档中的代码复制并粘贴到代码编辑器窗口中。 然后,构建指标并将其 实例 添加到图表中。

一旦添加了指标,我们应该会看到一个自定义窗口弹出。 此窗口包含一个复杂的表单,显示有关指标当前附加到的图表交易品种的信息。 此表单是自定义窗口可以实现功能的一个很好的示例。

自定义窗口 vs. WPF 和 WinForms

使用自定义窗口比使用 WPFWinForms 更好的原因有几个。 cTrader 自定义窗口已经具有与 cTrader 外观和感觉相匹配的本地样式。 WinForms 和 WPF 窗口需要特殊处理和高级编程技能,因为它们运行在不同的线程上。 使用 cTrader 自定义窗口时,这些问题完全避免了。

创建自定义窗口

我们现在将演示如何从零开始创建自定义窗口。 我们将创建一个新指标并将其命名为“自定义窗口示例”。 在此示例中,我们将添加一个自定义窗口,然后向其添加一些自定义控件。 窗口本身将在 Initialize() 方法中声明;要显示窗口,我们将调用 window.Show() 方法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void Initialize()
{
    var window = new Window
    {
        Title = "My Window",
        WindowStartupLocation = WindowStartupLocation.CenterScreen,
        Topmost = true
    };

    window.Show();
}

要查看窗口,我们可以构建指标并将其添加到图表中。

向窗口添加控件

我们现在将向窗口添加自定义控件。 这些控件将采用包含一些文本的文本框的形式。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
var window = new Window
{
    Child = new TextBlock 
    {
        Text = "Hi, This is my Window!",
        VerticalAlignment = VerticalAlignment.Center,
        HorizontalAlignment = HorizontalAlignment.Center,
        FontSize = 20,
        FontWeight = FontWeight.UltraBold
    },
    Title = "My Window",
    WindowStartupLocation = WindowStartupLocation.CenterScreen,
    Topmost = true
};             

window.Show();

我们将重新构建指标并添加一个新实例,以查看我们的自定义控件的外观。

修改窗口属性

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
var window = new Window
{
    Child = new TextBlock 
    {
        Text = "Hi, This is my Window!",
        VerticalAlignment = VerticalAlignment.Center,
        HorizontalAlignment = HorizontalAlignment.Center,
        FontSize = 20,
        FontWeight = FontWeight.UltraBold
    },
    Title = "My Window",
    WindowStartupLocation = WindowStartupLocation.CenterScreen,
    Topmost = true,
    Width = 800,
    Height = 800
};             

window.Show();

我们将再次重建我们的指标并添加一个实例。 现在我们的窗口区域是一个宽度和高度均为800像素的矩形。

接下来的更改是添加一个窗口可以调整大小的区间。 为此,我们将添加 MinHeightMaxHeightMinWidthMaxWidth 参数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
var window = new Window
{
    Child = new TextBlock 
    {
        Text = "Hi, This is my Window!",
        VerticalAlignment = VerticalAlignment.Center,
        HorizontalAlignment = HorizontalAlignment.Center,
        FontSize = 20,
        FontWeight = FontWeight.UltraBold
    },
    Title = "My Window",
    WindowStartupLocation = WindowStartupLocation.CenterScreen,
    Topmost = true,
    Width = 800,
    Height = 800,
    MinHeight = 600,
    MaxHeight = 800,
    MinWidth = 600,
    MaxWidth = 800
};             

window.Show();

我们将重建指标,并在添加实例后,尝试调整其大小。 调整大小只能在指定的宽度和高度区间内进行。

我们还可以更改窗口的背景颜色并使其不可调整大小。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
var window = new Window
{
    Child = new TextBlock 
    {
        Text = "Hi, This is my Window!",
        VerticalAlignment = VerticalAlignment.Center,
        HorizontalAlignment = HorizontalAlignment.Center,
        FontSize = 20,
        FontWeight = FontWeight.UltraBold
    },
    Title = "My Window",
    WindowStartupLocation = WindowStartupLocation.CenterScreen,
    Topmost = true,
    Width = 800,
    Height = 800,
    MinHeight = 600,
    MaxHeight = 800,
    MinWidth = 600,
    MaxWidth = 800,
    BackgroundColor = Color.Black,
    ResizeMode = ResizeMode.NoResize
};

在我们执行常规操作(重建指标并添加实例)后,窗口应具有新的背景颜色。

总结

cTrader 自定义窗口非常灵活,可以进行高度定制。 除了上述属性外,您还可以更改边距和填充、自定义窗口的可见性以及它们是否在某些条件下处于活动状态。 cTrader 自定义窗口还提供了显示、隐藏和关闭它们的方法,以及多个其他事件处理程序。