Lewati ke isi

Registri algo

Jika Anda memiliki portofolio besar algo yang Anda distribusikan kepada pengguna, Anda mungkin ingin menawarkan panel atau sistem kustom yang memungkinkan pengguna ini untuk dengan mudah mengelola algo Anda di mesin lokal mereka. Sistem seperti itu akan sangat berharga jika Anda menawarkan beberapa produk yang saling melengkapi (misalnya, dua cBot dan indikator kustom yang semuanya perlu diinstal agar berfungsi dengan baik). Jika pengguna melewatkan instalasi produk yang diperlukan, Anda akan dapat memberi tahu mereka tentang fakta ini.

Selain itu, ketika pengguna memiliki akses ke banyak algoritma, terkadang sulit untuk melacak semuanya. Misalnya, pengguna mungkin secara tidak sengaja menghapus algoritma berharga hanya untuk kemudian menyadari bahwa mereka tidak lagi dapat mengoperasikannya.

Untuk membantu Anda dan pengguna Anda, Algo API mengekspos antarmuka AlgoRegistry, yang menawarkan cara yang nyaman untuk melacak statistik secara dinamis tentang algo yang saat ini diinstal dan tidak diinstal dari berbagai jenis.

Bekerja dengan registri algo

Dalam AlgoRegistry, setiap algo diwakili oleh AlgoType, yang berisi nama unik algoritma dan AlgoKind-nya (seperti AlgoKind.CustomIndicator).

Anda dapat mengambil algoritma tertentu dari registri dengan memanggil metode berikut.

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

Untuk mengambil jumlah algoritma dari jenis tertentu, panggil metode berikut.

1
AlgoRegistry.GetCount(AlgoKind algoKind)

Anda juga dapat menambahkan handler kustom ke event berikut:

  • AlgoTypeInstalled - dipicu setiap kali algo baru diinstal.
  • AlgoTypeDeleted - dipicu setiap kali algo baru dihapus.
  • AlgoTypeChanged - dipicu setiap kali algo yang diinstal dimodifikasi.

AlgoRegistry dalam mode berbeda

AlgoRegistry bekerja sebagaimana dimaksud dalam backtesting dan optimisasi. Ini tidak berfungsi saat menggunakan cTrader CLI.

Buat plugin contoh

AlgoRegistry sangat cocok untuk membuat plugin yang akan menampilkan informasi tentang algo langsung di UI cTrader. Plugin berikut melakukan hal itu.

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

    }
}

Setelah mem-build plugin kita, kita akan melihat blok berikut di Panel Simbol Aktif. Data dalam blok akan diperbarui secara dinamis setiap detik.

Instal algo melalui algo lain

Antarmuka AlgoRegistry memungkinkan pengembang untuk membuat algoritma yang dapat menginstal algoritma lain. Misalnya, Anda dapat mengkodekan cBot (saat mulai) untuk secara otomatis menginstal cBot lain, indikator, atau plugin.

cBot berikut dikodekan untuk menginstal cBot lain:

 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()
        {
        }
    }
}

Ringkasan

AlgoRegistry adalah fitur hebat untuk pengembang plugin tetapi juga dapat digunakan dengan jenis algo lainnya. Misalnya, Anda dapat membuat indikator yang merujuk pada indikator kustom lain, dalam hal ini algo Anda pertama-tama perlu memeriksa apakah indikator yang diperlukan diinstal oleh pengguna. Kami juga merekomendasikan untuk menambahkan AlgoRegistry ke algo Anda yang ada untuk menyederhanakan pengelolaan indikator kustom dan jenis algo lainnya.