Saltar a contenido

Registro de algoritmos

Si tiene una gran cartera de algoritmos que está distribuyendo a los usuarios, es posible que también desee ofrecer un panel o sistema personalizado que permita a estos usuarios gestionar fácilmente sus algoritmos en sus máquinas locales. Tal sistema sería especialmente valioso si ofrece varios productos que se complementan entre sí (por ejemplo, dos cBots y un indicador personalizado que deben instalarse todos para funcionar correctamente). Si un usuario omite la instalación de un producto requerido, podrá alertarle sobre este hecho.

Además, cuando un usuario tiene acceso a muchos algoritmos, a veces puede ser difícil hacer un seguimiento de todos ellos. Por ejemplo, un usuario puede eliminar accidentalmente un algoritmo valioso solo para darse cuenta más tarde de que ya no puede operarlo.

Para ayudarle a usted y a sus usuarios, la API de Algo expone la interfaz AlgoRegistry, que ofrece un medio conveniente para rastrear dinámicamente estadísticas sobre algoritmos actualmente instalados y desinstalados de diferentes tipos.

Trabajar con el registro de algoritmos

En el AlgoRegistry, cada algoritmo está representado por un AlgoType, que contiene el nombre único del algoritmo y su AlgoKind (como un AlgoKind.CustomIndicator).

Puede recuperar un algoritmo específico del registro llamando al siguiente método.

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

Para recuperar un recuento de algoritmos de un tipo particular, llame al siguiente método.

1
AlgoRegistry.GetCount(AlgoKind algoKind)

También puede agregar controladores personalizados a los siguientes eventos:

  • AlgoTypeInstalled - se activa cada vez que se instala un nuevo algoritmo.
  • AlgoTypeDeleted - se activa cada vez que se elimina un nuevo algoritmo.
  • AlgoTypeChanged - se activa cada vez que se modifica un algoritmo instalado.

AlgoRegistry en diferentes modos

AlgoRegistry funciona según lo previsto en backtesting y optimización. No funciona cuando se usa cTrader CLI.

Crear un plugin de ejemplo

El AlgoRegistry es perfecto para crear un plugin que mostrará información sobre los algoritmos directamente en la interfaz de usuario de cTrader. El siguiente plugin hace exactamente eso.

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

    }
}

Al construir nuestro plugin, deberíamos ver el siguiente bloque en el Panel de símbolo activo. Los datos en el bloque se actualizarán dinámicamente cada segundo.

Instalar un algoritmo a través de otro algoritmo

La interfaz AlgoRegistry permite a los desarrolladores crear algoritmos que pueden instalar otros algoritmos. Por ejemplo, puede codificar un cBot (al inicio) para que instale automáticamente otro cBot, un indicador o un plugin.

El siguiente cBot está codificado para instalar otro cBot:

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

Resumen

AlgoRegistry es una gran característica para los desarrolladores de plugins, pero también se puede usar con otros tipos de algoritmos. Por ejemplo, puede crear un indicador que haga referencia a otro indicador personalizado, en cuyo caso su algoritmo primero necesitaría verificar si el indicador requerido está instalado por el usuario. También recomendamos agregar el AlgoRegistry a sus algoritmos existentes para simplificar la gestión de indicadores personalizados y otros tipos de algoritmos.