Przejdź do treści

Rejestr algorytmów

Jeśli masz duże portfolio algorytmów, które dystrybuujesz użytkownikom, możesz również zaoferować niestandardowy panel lub system, który pozwoli tym użytkownikom łatwo zarządzać Twoimi algorytmami na ich lokalnych komputerach. Taki system byłby szczególnie cenny, jeśli oferujesz kilka produktów, które wzajemnie się uzupełniają (na przykład dwa cBoty i wskaźnik niestandardowy, które wszystkie muszą być zainstalowane, aby działać prawidłowo). Jeśli użytkownik pominie instalację wymaganego produktu, będziesz mógł go o tym poinformować.

Ponadto, gdy użytkownik ma dostęp do wielu algorytmów, czasami może być trudno śledzić je wszystkie. Na przykład użytkownik może przypadkowo usunąć cenny algorytm, aby później zdać sobie sprawę, że nie może już go obsługiwać.

Aby pomóc Tobie i Twoim użytkownikom, Algo API udostępnia interfejs AlgoRegistry, który oferuje wygodny sposób dynamicznego śledzenia statystyk dotyczących aktualnie zainstalowanych i odinstalowanych algorytmów różnych typów.

Praca z rejestrem algorytmów

W AlgoRegistry każdy algorytm jest reprezentowany przez AlgoType, który zawiera unikalną nazwę algorytmu i jego AlgoKind (taki jak AlgoKind.CustomIndicator).

Możesz pobrać konkretny algorytm z rejestru, wywołując następującą metodę.

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

Aby pobrać liczbę algorytmów określonego rodzaju, wywołaj następującą metodę.

1
AlgoRegistry.GetCount(AlgoKind algoKind)

Możesz również dodać niestandardowe procedury obsługi do następujących zdarzeń:

  • AlgoTypeInstalled - wyzwalane za każdym razem, gdy zostanie zainstalowany nowy algorytm.
  • AlgoTypeDeleted - wyzwalane za każdym razem, gdy zostanie usunięty nowy algorytm.
  • AlgoTypeChanged - wyzwalane za każdym razem, gdy zainstalowany algorytm zostanie zmodyfikowany.

AlgoRegistry w różnych trybach

AlgoRegistry działa zgodnie z przeznaczeniem w backtestingu i optymalizacji. Nie działa podczas korzystania z cTrader CLI.

Utwórz przykładową wtyczkę

AlgoRegistry idealnie nadaje się do tworzenia wtyczki, która będzie wyświetlać informacje o algorytmach bezpośrednio w interfejsie użytkownika cTradera. Następująca wtyczka robi właśnie to.

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

    }
}

Po zbudowaniu naszej wtyczki powinniśmy zobaczyć następujący blok w Panelu aktywnego symbolu. Dane w bloku będą dynamicznie aktualizowane co sekundę.

Zainstaluj algorytm za pomocą innego algorytmu

Interfejs AlgoRegistry umożliwia programistom tworzenie algorytmów, które mogą instalować inne algorytmy. Na przykład możesz zakodować cBota (przy starcie), aby automatycznie zainstalował innego cBota, wskaźnik lub wtyczkę.

Następujący cBot jest zakodowany tak, aby zainstalować innego cBota:

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

Podsumowanie

AlgoRegistry to świetna funkcja dla programistów wtyczek, ale może być również używana z innymi typami algorytmów. Na przykład możesz utworzyć wskaźnik, który odwołuje się do innego wskaźnika niestandardowego, w takim przypadku Twój algorytm musiałby najpierw sprawdzić, czy wymagany wskaźnik jest zainstalowany przez użytkownika. Zalecamy również dodanie AlgoRegistry do istniejących algorytmów, aby uprościć zarządzanie wskaźnikami niestandardowymi i innymi typami algorytmów.