Bỏ qua

Sổ đăng ký thuật toán

Nếu bạn có một danh mục lớn các thuật toán mà bạn đang phân phối cho người dùng, bạn có thể muốn cung cấp một bảng điều khiển hoặc hệ thống tùy chỉnh cho phép những người dùng này dễ dàng quản lý các thuật toán của bạn trên máy cục bộ của họ. Một hệ thống như vậy sẽ đặc biệt có giá trị nếu bạn cung cấp một số sản phẩm bổ sung cho nhau (ví dụ, hai cBot và một chỉ báo tùy chỉnh cần được cài đặt để hoạt động đúng cách). Nếu người dùng bỏ qua việc cài đặt một sản phẩm cần thiết, bạn sẽ có thể cảnh báo họ về điều này.

Ngoài ra, khi người dùng có quyền truy cập vào nhiều thuật toán, đôi khi có thể khó theo dõi tất cả chúng. Ví dụ, người dùng có thể vô tình xóa một thuật toán có giá trị chỉ để sau đó nhận ra rằng họ không thể vận hành nó nữa.

Để giúp bạn và người dùng của bạn, Algo API cung cấp giao diện AlgoRegistry, cung cấp một phương tiện thuận tiện để theo dõi động các thống kê về các thuật toán đã cài đặt và chưa cài đặt của các loại khác nhau.

Làm việc với sổ đăng ký thuật toán

Trong AlgoRegistry, mỗi thuật toán được đại diện bởi một AlgoType, chứa tên duy nhất của thuật toán và AlgoKind của nó (chẳng hạn như AlgoKind.CustomIndicator).

Bạn có thể truy xuất một thuật toán cụ thể từ sổ đăng ký bằng cách gọi phương thức sau.

1
AlgoRegistry.Get(string name, AlgoKind algoKind);

Để truy xuất số lượng thuật toán của một loại cụ thể, hãy gọi phương thức sau.

1
AlgoRegistry.GetCount(AlgoKind algoKind)

Bạn cũng có thể thêm các trình xử lý tùy chỉnh cho các sự kiện sau:

  • AlgoTypeInstalled - được kích hoạt mỗi khi một thuật toán mới được cài đặt.
  • AlgoTypeDeleted - được kích hoạt mỗi khi một thuật toán mới bị xóa.
  • AlgoTypeChanged - được kích hoạt mỗi khi một thuật toán đã cài đặt được sửa đổi.

AlgoRegistry trong các chế độ khác nhau

AlgoRegistry hoạt động như dự định trong backtesting và tối ưu hóa. Nó không hoạt động khi sử dụng cTrader CLI.

Tạo một plugin ví dụ

AlgoRegistry là lý tưởng để tạo một plugin sẽ hiển thị thông tin về các thuật toán trực tiếp trong giao diện người dùng cTrader. Plugin sau đây làm điều đó.

 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
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 AlgoStatsPlugin : Plugin
    {
        private TextBlock _customIndicatorsBlock = new TextBlock
        {
            FontSize = 12,
            FontWeight = FontWeight.Bold,
            TextAlignment = TextAlignment.Left,
            Padding = new Thickness(5, 5, 5, 5),
        };

        private TextBlock _indicatorsBlock = new TextBlock
        {
            FontSize = 12,
            FontWeight = FontWeight.Bold,
            TextAlignment = TextAlignment.Left,
            Padding = new Thickness(5, 5, 5, 5),
        };

        private TextBlock _robotsBlock = new TextBlock
        {
            FontSize = 12,
            FontWeight = FontWeight.Bold,
            TextAlignment = TextAlignment.Left,
            Padding = new Thickness(5, 5, 5, 5),
        };

        private TextBlock _pluginsBlock = new TextBlock
        {
            FontSize = 12,
            FontWeight = FontWeight.Bold,
            TextAlignment = TextAlignment.Left,
            Padding = new Thickness(5, 5, 5, 5),
        };

        private Grid _grid = new Grid(4, 1);

        protected override void OnStart()
        {
            var aspBlock = Asp.SymbolTab.AddBlock("Algo Registry");
            aspBlock.IsExpanded = true;
            aspBlock.Height = 200;

            _grid.AddChild(_robotsBlock, 0, 0);
            _grid.AddChild(_indicatorsBlock, 1, 0);
            _grid.AddChild(_customIndicatorsBlock, 2, 0);
            _grid.AddChild(_pluginsBlock, 3, 0);

            aspBlock.Child = _grid;

            Timer.Start(TimeSpan.FromSeconds(1));
        }

        protected override void OnTimer() 
        {
            _robotsBlock.Text = $"cBots: {AlgoRegistry.GetCount(AlgoKind.Robot)}";
            _customIndicatorsBlock.Text = $"Custom indicators: {AlgoRegistry.GetCount(AlgoKind.CustomIndicator)}";
            _indicatorsBlock.Text = $"Indicators: {AlgoRegistry.GetCount(AlgoKind.StandardIndicator)}";
            _pluginsBlock.Text = $"Plugins: {AlgoRegistry.GetCount(AlgoKind.Plugin)}";
        }

    }
}

Sau khi xây dựng plugin của chúng ta, chúng ta sẽ thấy khối sau trong Bảng ký hiệu đang hoạt động. Dữ liệu trong khối sẽ được cập nhật động mỗi giây.

Cài đặt một thuật toán thông qua một thuật toán khác

Giao diện AlgoRegistry cho phép các nhà phát triển tạo ra các thuật toán có thể cài đặt các thuật toán khác. Ví dụ, bạn có thể lập trình một cBot (khi bắt đầu) để tự động cài đặt một cBot khác, một chỉ báo hoặc một plugin.

cBot sau đây được lập trình để cài đặt một cBot khác:

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

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class Installation : Robot
    {
        protected override void OnStart()
        {
            InstallationResult result = AlgoRegistry.Install("https://ctrader.com/algos/download/4392/");
            Print(result.Succeeded);
        }

        protected override void OnTick()
        {
        }

        protected override void OnStop()
        {
        }
    }
}

Tổng quan

AlgoRegistry là một tính năng tuyệt vời cho các nhà phát triển plugin nhưng nó cũng có thể được sử dụng với các loại thuật toán khác. Ví dụ, bạn có thể tạo một chỉ báo tham chiếu đến một chỉ báo tùy chỉnh khác, trong trường hợp này thuật toán của bạn trước tiên cần kiểm tra xem chỉ báo cần thiết đã được cài đặt bởi người dùng chưa. Chúng tôi cũng khuyên bạn nên thêm AlgoRegistry vào các thuật toán hiện có của bạn để đơn giản hóa việc quản lý các chỉ báo tùy chỉnh và các loại thuật toán khác.