跳转至

如何调试 cBot

cTrader 允许开发者通过其内置编辑器创建、修改或处理算法。 然而,一些开发者已经熟悉不同的环境,或者可能更喜欢在专业的集成开发环境 (IDE) 中工作。

在本文及其对应的视频中,我们将演示如何在 Visual Studio 中调试 cBot。

在 Visual Studio 中打开 cBot

在 cTrader 中进入 Algo 应用程序并导航到 cBots 选项卡。 出于演示目的,让我们调试 Sample RSI cBot。

找到 Sample RSI cBot 并点击它。 代码编辑器应出现在右侧。

点击 在 Visual Studio 中编辑。 如果您的计算机上安装了 Visual Studio,它应该会打开 cBot 代码。

在 Visual Studio 中启用调试

如果 Visual Studio 中的代码编辑器没有自动显示 cBot 代码,您需要找到并点击 Sample RSI cBot 解决方案中的 C# (.cs) 文件。

选择 Debug 配置模式。

现在,您需要修改 cBot 代码以允许调试。

首先将 cBot 的 AccessRights 设置为 FullAccess

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

通过调用 System.Diagnostics.Debugger.Launch() 方法将调试器附加到 cBot 运行进程。

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

让我们重新构建我们的 cBot。 右键点击 Sample RSI cBot 解决方案,然后点击 Rebuild

调试 cBot

为了演示调试过程,让我们在 OnTick() 方法中添加一个断点。 右键点击 if (rsi.Result.LastValue < 30) 这行代码,点击 Breakpoint,然后选择 Insert breakpoint

现在,您需要回到 cTrader 中的 Sample RSI cBot。 点击 Add instance

选择 Locally,然后点击 Add instance 按钮。

点击 Start cBot 图标以运行 cBot,然后点击 Allow 按钮授予其访问权限。

选择 Sample RSI cBot - Microsoft Visual Studio 作为您的调试器,然后点击 OK 按钮。

当到达 OnTick() 事件时,执行会因我们之前设置的断点而中断。

最后,您可以使用所有 Visual Studio 调试功能。 例如,您可以在 Watch 窗口中检查方法。

此外,您还可以执行以下操作:

使用单步跳过功能将执行移动到下一行。

将执行行拖到另一个语句中。

使用单步进入功能进入方法并检查代码的执行。

摘要

我们希望本文和视频中的信息能帮助您在 Visual Studio 中调试 cBot。 这里介绍的调试原则和操作也适用于其他专业 IDE。