Ir para o conteúdo

Como depurar um cBot

O cTrader permite que os programadores criem, modifiquem ou trabalhem com algoritmos através do seu editor incorporado. No entanto, alguns programadores já estão familiarizados com um ambiente diferente ou podem preferir trabalhar num ambiente de desenvolvimento integrado (IDE) profissional.

Neste artigo e no vídeo correspondente, iremos demonstrar como pode depurar um cBot no Visual Studio.

Abrir um cBot no Visual Studio

Aceda à aplicação Algo no cTrader e navegue até ao separador cBots. Para fins de demonstração, vamos depurar o Sample RSI cBot.

Localize o Sample RSI cBot e clique nele. O editor de código deverá aparecer à direita.

Clique em Editar no Visual Studio. Se tiver o Visual Studio instalado no seu computador, este deverá abrir o código do cBot.

Ativar a depuração no Visual Studio

Se o editor de código no Visual Studio não mostrar automaticamente o código do cBot, tem de localizar e clicar no ficheiro C# (.cs) na solução Sample RSI cBot.

Selecione o modo de configuração Debug.

Agora, tem de modificar o código do cBot para permitir a depuração.

Comece por definir os AccessRights do cBot para FullAccess.

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

Anexe um depurador ao processo de execução do cBot chamando o 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");
}

Neste momento, o código no seu editor de código do Visual Studio deverá ter este aspeto:

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

Vamos reconstruir o nosso cBot. Clique com o botão direito do rato na solução Sample RSI cBot e clique em Reconstruir.

Depurar o cBot

Para demonstrar o processo de depuração, vamos adicionar um ponto de interrupção no nosso método OnTick(). Clique com o botão direito do rato na linha de código if (rsi.Result.LastValue < 30), clique em Ponto de interrupção e, em seguida, selecione Inserir ponto de interrupção.

Agora, tem de voltar ao Sample RSI cBot no cTrader. Clique em Adicionar instância.

Selecione Localmente e, em seguida, clique no botão Adicionar instância.

Clique no ícone Iniciar cBot para executar o cBot e, em seguida, clique no botão Permitir para conceder direitos de acesso.

Selecione Sample RSI cBot - Microsoft Visual Studio como depurador e clique no botão OK.

Ao chegar ao evento OnTick(), a execução é interrompida pelo ponto de interrupção que definimos anteriormente.

Por fim, pode utilizar todas as funções de depuração do Visual Studio. Por exemplo, pode inspecionar um método na janela Inspeção.

Além disso, pode realizar as seguintes ações:

Utilizar a função de passagem para mover a execução para a linha seguinte.

Arrastar a linha de execução para dentro de outra instrução.

Utilizar a função de entrada para entrar num método e examinar a execução do código.

Resumo

Esperamos que as informações do nosso artigo e vídeo o tenham ajudado a depurar cBots no Visual Studio. Os princípios e operações de depuração aqui analisados também se aplicam a outros IDEs profissionais.