Перейти к содержанию

Как отладить сиБота

cTrader позволяет разработчикам создавать, изменять или работать с алгоритмами через встроенный редактор. Однако некоторые разработчики уже знакомы с другой средой или могут предпочесть работу в профессиональной интегрированной среде разработки (IDE).

В этой статье и соответствующем видео мы покажем, как можно отладить сиБота в Visual Studio.

Откройте сиБота в Visual Studio

Перейдите в приложение Algo в cTrader и откройте вкладку сиБоты. Для демонстрации давайте отладим Sample RSI cBot.

Найдите Sample RSI cBot и нажмите на него. Справа должен появиться редактор кода.

Нажмите Редактировать в Visual Studio. Если на вашем компьютере установлена Visual Studio, она должна открыть код сиБота.

Включите отладку в Visual Studio

Если редактор кода в Visual Studio не показывает автоматически код сиБота, вам нужно найти и нажать на файл C# (.cs) в решении Sample RSI cBot.

Выберите режим конфигурации Debug.

Теперь вам нужно изменить код сиБота, чтобы разрешить отладку.

Начните с установки AccessRights сиБота на FullAccess.

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

Подключите отладчик к запущенному процессу сиБота, вызвав метод System.Diagnostics.Debugger.Launch().

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

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

На этом этапе код в вашем редакторе кода Visual Studio должен выглядеть так:

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

Давайте пересоберем нашего сиБота. Щелкните правой кнопкой мыши решение Sample RSI cBot и нажмите Rebuild.

Отладьте сиБота

Чтобы продемонстрировать процесс отладки, давайте добавим точку останова в наш метод OnTick(). Щелкните правой кнопкой мыши строку кода if (rsi.Result.LastValue < 30), нажмите Breakpoint, а затем выберите Insert breakpoint.

Теперь вам нужно вернуться к Sample RSI cBot в cTrader. Нажмите Добавить экземпляр.

Выберите Локально, а затем нажмите кнопку Добавить экземпляр.

Нажмите значок Запустить сиБота, чтобы запустить сиБота, затем нажмите кнопку Разрешить, чтобы предоставить ему права доступа.

Выберите Sample RSI cBot - Microsoft Visual Studio в качестве отладчика и нажмите кнопку OK.

При достижении события OnTick() выполнение прерывается точкой останова, которую мы установили ранее.

Наконец, вы можете использовать все функции отладки Visual Studio. Например, вы можете проверить метод в окне Watch.

Кроме того, вы можете выполнить следующие действия:

Используйте функцию step over, чтобы переместить выполнение на следующую строку.

Перетащите строку выполнения внутрь другого оператора.

Используйте функцию step into, чтобы войти в метод и изучить выполнение кода.

Обзор

Мы надеемся, что информация в нашей статье и видео помогла вам отладить сиБотов в Visual Studio. Принципы и операции отладки, рассмотренные здесь, также применимы к другим профессиональным IDE.