Przejdź do treści

Praca z niestandardowymi oknami w cTrader Algo

W tym artykule i odpowiadającym mu filmie porozmawiamy o pracy z niestandardowymi oknami podczas tworzenia algorytmów cTrader. Wyjaśnimy, czym są niestandardowe okna i jak mogą być używane w Twoich cBotach i wskaźnikach. Stworzymy również przykład użycia niestandardowego okna w cBocie.

Przykład niestandardowego okna

Teraz przełączymy się do aplikacji Algo, aby zobaczyć ilustrację tego, jak niestandardowe okna mogą być używane w Twoich cBotach i wskaźnikach. Stworzymy nowy wskaźnik; w nim po prostu użyjemy gotowego przykładu z dokumentacji.

Skopiuj i wklej kod z dokumentacji do okna edytora kodu. Następnie skompiluj wskaźnik i dodaj instancję do wykresu.

Gdy tylko wskaźnik zostanie dodany, powinniśmy zobaczyć wyskakujące okno niestandardowe. To okno zawiera złożony formularz wyświetlający informacje o symbolu, do którego wykresu wskaźnik jest obecnie dołączony. Ten formularz to świetny przykład tego, co można osiągnąć za pomocą okien niestandardowych.

Okna niestandardowe a WPF i WinForms

Istnieje kilka powodów, dla których korzystanie z okien niestandardowych jest lepsze niż korzystanie z WPF lub WinForms. Okna niestandardowe cTrader mają już natywny styl, który pasuje do wyglądu i stylu cTrader. Okna WinForms i WPF wymagają specjalnej obsługi i zaawansowanych umiejętności programowania, ponieważ działają w różnych wątkach. Takich problemów można całkowicie uniknąć, korzystając z okien niestandardowych cTrader.

Tworzenie okna niestandardowego

Teraz pokażemy, jak można utworzyć okno niestandardowe od podstaw. Utworzymy nowy wskaźnik i nazwiemy go „Custom Window Example". W tym przykładzie dodamy okno niestandardowe, a następnie dodamy do niego niestandardowe kontrolki. Samo okno zostanie zadeklarowane w metodzie Initialize(); aby wyświetlić okno, wywołamy metodę 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();
}

Aby zobaczyć okno, możemy skompilować wskaźnik i dodać go do wykresu.

Dodawanie kontrolek do okna

Teraz dodamy niestandardowe kontrolki do okna. Te kontrolki będą miały formę pola tekstowego zawierającego tekst.

 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();

Ponownie skompilujemy wskaźnik i dodamy nową instancję, aby zobaczyć, jak wyglądają nasze niestandardowe kontrolki.

Modyfikowanie właściwości okna

 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();

Ponownie skompilujemy nasz wskaźnik i dodamy instancję. Teraz obszar naszego okna to prostokąt o szerokości i wysokości 800 pikseli.

Następna zmiana będzie polegać na dodaniu zakresu, w którym można zmienić rozmiar okna. Aby to zrobić, dodamy parametry MinHeight, MaxHeight, MinWidth i 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();

Ponownie skompilujemy wskaźnik, a po dodaniu instancji możemy spróbować zmienić jego rozmiar. Zmiana rozmiaru jest możliwa tylko w określonym zakresie szerokości i wysokości.

Możemy również zmienić kolor tła okna i sprawić, że nie będzie można zmieniać jego rozmiaru.

 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
};

Po wykonaniu zwykłych czynności (ponownej kompilacji wskaźnika i dodaniu instancji) okno powinno mieć nowy kolor tła.

Podsumowanie

Okna niestandardowe cTrader są elastyczne i można je w dużym stopniu dostosowywać. Oprócz wymienionych powyżej właściwości możesz również zmieniać marginesy i wypełnienie, widoczność okien niestandardowych oraz to, czy są aktywne w określonych warunkach. Okna niestandardowe cTrader udostępniają również metody ich wyświetlania, ukrywania i zamykania, a także kilka innych procedur obsługi zdarzeń.