跳转至

在 cTrader 中编译和构建算法

编译/构建 cTrader 算法时,您可以使用两种类型的编译器:

  • 嵌入式编译器
  • .NET SDK 编译器

默认情况下,cTrader 使用嵌入式编译器,但如果您的本地机器上已安装 .NET SDK,我们建议您将其更改为 .NET SDK 编译器。

编译 CSPROJ 文件并检索 cBot

cTrader Algo 允许您通过编译 .csproj 文件来生成和保存算法。 使用以下代码执行操作:

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

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.FullAccess)]
    public class Compilation : Robot
    {

        protected override void OnStart()
        {
            CompilationOptions options = new CompilationOptions
            {
                IncludeSourceCode = true,
                OutputAlgoFilePath = @"C:\{preferred path}\NameOfAlgo.algo"
            };

            CompilationResult resultSync = Compiler.Compile(@"C:\{path to project}\NameOfCbot.csproj", options);
            Print(resultSync.Succeeded);
        }
    }
}

如果将 AccessRights 设置为 None,则必须指定算法数据文件夹内的目录路径。 这种配置意味着不允许算法在其数据文件夹之外编译文件。

如果将 AccessRights 设置为 FullAccess,则可以为 .csproj 文件和生成的算法指定任何目录或位置的路径。

如果您打算使用相对文件路径,基本目录必须存在于此路径中:..Documents\Algo\Data\{Algo type}\{Algo name}

在本地启动 cBot 后,算法将保存在指定目录中。

切换编译器

要更改为不同的编译器,请单击用户界面左下角的设置以打开设置窗口,然后切换到算法选项卡。

Image title

打开选择编译器下拉菜单,从可用选项中选择合适的编译器。

嵌入式编译器

嵌入式编译器内置于 cTrader Windows 平台。 与 .NET SDK 编译器相比,它的功能有限。 例如,嵌入式编译器不支持任何第三方 .NET 包和框架,如 WinForms 和 WPF。

.NET SDK 编译器

对于大型项目或使用第三方 .NET 库的扩展,强烈建议使用 .NET SDK 编译器。 .NET SDK 编译器还支持其他功能,如构建参数。

选择编译器菜单允许选择您在本地机器上安装的任何 .NET SDK 编译器。 如果未安装任何版本的 .NET SDK,您随时可以单击安装 .NET SDK按钮,进入最新稳定版本的下载页面。

参数

cTrader 提供可自定义的参数,您可以在使用外部 IDE 构建 cBot/指标时在使用 .NET CLI 时指定这些参数。 它们定义如下:

名称 默认值 描述
AlgoName $(MSBuildProjectName) 指定 .algo 文件名。
此属性不影响 AssemblyName
AlgoBuild True 启用构建 .algo 文件。
AlgoPublish True 启用在成功构建后将 .algo 文件复制到当前用户的 MyDocuments 目录。
IncludeSource False 将源目录包含到目标 .algo 文件中。
IncludeSymbols False(发布)
True(调试)
将调试符号包含到目标 .algo 文件中。

处理额外错误

如果您在不包含任何 cTrader 算法类(如 cBot 的 Robot)的类库项目中引用 cTrader.Automate NuGet 包,当您尝试构建项目时,将遇到"程序集必须包含算法类型"错误。 这个错误是因为 AlgoBuild 参数默认等于 True

要解决此问题,只需在 .NET 项目文件中将 AlgoBuild 设置为 False,如下例所示:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AlgoBuild>false</AlgoBuild>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="cTrader.Automate" Version="1.*-*" />
</ItemGroup>
</Project>