Перейти к содержанию

Работа с пользовательскими окнами в cTrader Algo

В этой статье и соответствующем видео мы расскажем о работе с пользовательскими окнами при создании алгоритмов cTrader. Мы объясним, что такое пользовательские окна и как их можно использовать в ваших сиБотах и индикаторах. Мы также создадим пример использования пользовательского окна в сиБоте.

Пример пользовательского окна

Теперь мы переключимся на приложение Algo, чтобы увидеть иллюстрацию того, как пользовательские окна могут использоваться в ваших сиБотах и индикаторах. Мы создадим новый индикатор; в нем мы просто используем готовый пример из документации.

Скопируйте и вставьте код из документации в окно редактора кода. Затем соберите индикатор и добавьте экземпляр на график.

Как только индикатор будет добавлен, мы должны увидеть всплывающее пользовательское окно. Это окно содержит сложную форму, отображающую информацию об инструменте, к графику которого в данный момент прикреплен индикатор. Эта форма является отличным примером того, чего можно достичь с помощью пользовательских окон.

Пользовательские окна против WPF и WinForms

Существует несколько причин, по которым использование пользовательских окон лучше, чем использование WPF или WinForms. Пользовательские окна cTrader уже имеют встроенный стиль, соответствующий внешнему виду cTrader. Окна WinForms и WPF требуют специальной обработки и продвинутых навыков программирования, поскольку они работают в разных потоках. Таких проблем полностью удается избежать при использовании пользовательских окон cTrader.

Создание пользовательского окна

Теперь мы продемонстрируем, как можно создать пользовательское окно с нуля. Мы создадим новый индикатор и назовем его "Custom Window Example". В этом примере мы добавим пользовательское окно, а затем добавим в него некоторые пользовательские элементы управления. Само окно будет объявлено в методе 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 пикселей.

Следующее изменение — добавление диапазона, в котором можно изменять размер окна. Для этого мы добавим параметры MinHeight, MaxHeight, MinWidth и MaxWidth.

 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 также предоставляют методы для их отображения, скрытия и закрытия в дополнение к нескольким другим обработчикам событий.