Saltar a contenido

Cómo depurar un cBot

cTrader permite a los desarrolladores crear, modificar o trabajar con algoritmos a través de su editor integrado. Sin embargo, algunos desarrolladores ya están familiarizados con un entorno diferente o podrían preferir trabajar en un entorno de desarrollo integrado (IDE) profesional.

En este artículo y su correspondiente video, demostraremos cómo puede depurar un cBot en Visual Studio.

Abrir un cBot en Visual Studio

Vaya a la aplicación Algo en cTrader y navegue a la pestaña cBots. Para fines de demostración, vamos a depurar el Sample RSI cBot.

Localice Sample RSI cBot y haga clic en él. El editor de código debería aparecer a la derecha.

Haga clic en Editar en Visual Studio. Si tiene Visual Studio instalado en su máquina, debería abrir el código del cBot.

Habilitar la depuración en Visual Studio

Si el editor de código en Visual Studio no muestra automáticamente el código del cBot, tiene que localizar y hacer clic en el archivo C# (.cs) en la solución Sample RSI cBot.

Seleccione el modo de configuración Debug.

Ahora, tiene que modificar el código del cBot para permitir la depuración.

Comience estableciendo los AccessRights del cBot en FullAccess.

1
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess, AddIndicators = true)]

Adjunte un depurador al proceso de ejecución del cBot llamando al método System.Diagnostics.Debugger.Launch().

1
2
3
4
5
6
var result = System.Diagnostics.Debugger.Launch();

if (result is false)
{
    Print("Debugger launch failed");
}

En este punto, el código en su editor de código de Visual Studio debería verse así:

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

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess, AddIndicators = true)]
    public class SampleRSIcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Source", Group = "RSI")]
        public DataSeries Source { get; set; }

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            var result = System.Diagnostics.Debugger.Launch();

            if (result is false)
            {
                Print("Debugger launch failed");
            }

            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 30)
            {
                Close(TradeType.Sell);
                Open(TradeType.Buy);
            }
            else if (rsi.Result.LastValue > 70)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}

Reconstruyamos nuestro cBot. Haga clic derecho en la solución Sample RSI cBot y haga clic en Reconstruir.

Depurar el cBot

Para demostrar el proceso de depuración, agreguemos un punto de interrupción en nuestro método OnTick(). Haga clic derecho en la línea de código if (rsi.Result.LastValue < 30), haga clic en Punto de interrupción y luego seleccione Insertar punto de interrupción.

Ahora, tiene que volver al Sample RSI cBot en cTrader. Haga clic en Añadir instancia.

Seleccione Localmente y luego haga clic en el botón Añadir instancia.

Haga clic en el icono Iniciar cBot para ejecutar el cBot, luego haga clic en el botón Permitir para concederle derechos de acceso.

Seleccione Sample RSI cBot - Microsoft Visual Studio como su depurador y haga clic en el botón OK.

Al llegar al evento OnTick(), la ejecución se interrumpe en el punto de interrupción que establecimos anteriormente.

Finalmente, puede utilizar todas las funciones de depuración de Visual Studio. Por ejemplo, puede inspeccionar un método en la ventana Watch.

Además, puede realizar las siguientes acciones:

Utilizar la función de paso por encima para mover la ejecución a la siguiente línea.

Arrastrar la línea de ejecución dentro de otra declaración.

Utilizar la función de paso a para entrar en un método y examinar la ejecución del código.

Resumen

Esperamos que la información en nuestro artículo y video le haya ayudado a depurar cBots en Visual Studio. Los principios y operaciones de depuración revisados aquí también se aplican a otros IDE profesionales.