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

Компиляция и сборка алгоритмов в cTrader

Вы можете использовать два типа компиляторов при компиляции/сборке алго cTrader:

  • Встроенный компилятор
  • Компилятор .NET SDK

По умолчанию cTrader использует встроенный компилятор, но мы рекомендуем вам переключиться на компилятор .NET SDK, если он установлен на вашем локальном компьютере.

Компиляция файлов CSPROJ и извлечение сиБотов

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}.

После того как вы запустите сиБот локально, алгоритм будет сохранен в указанном каталоге.

Переключение компиляторов

Чтобы переключиться на другой компилятор, нажмите Settings в левом нижнем углу интерфейса, чтобы открыть окно настроек, затем перейдите на вкладку Algo.

Image title

Откройте выпадающее меню Select compiler и выберите подходящий компилятор из доступных вариантов.

Встроенный компилятор

Встроенный компилятор интегрирован в платформу cTrader Windows. По сравнению с компилятором .NET SDK он имеет ограниченные возможности. Например, встроенный компилятор не поддерживает сторонние пакеты и фреймворки .NET, такие как WinForms и WPF.

Компилятор .NET SDK

Использование компилятора .NET SDK настоятельно рекомендуется для крупных проектов или расширений, использующих сторонние библиотеки .NET. Компилятор .NET SDK также поддерживает дополнительные функции, такие как параметры сборки.

Меню Select compiler позволяет выбрать любой компилятор .NET SDK, установленный на вашем локальном компьютере. Если версии .NET SDK не установлены, вы всегда можете нажать кнопку Install .NET SDK, чтобы перейти на страницу загрузки последней стабильной версии.

Параметры

cTrader предлагает настраиваемые параметры, которые вы можете указать при использовании .NET CLI при сборке ваших сиБотов/индикаторов во внешних IDE. Они определены ниже:

Имя Значение по умолчанию Описание
AlgoName $(MSBuildProjectName) Указывает имя файла .algo.
Это свойство не влияет на AssemblyName.
AlgoBuild True Включает сборку файлов .algo.
AlgoPublish True Включает копирование файлов .algo в каталог MyDocuments текущего пользователя после успешной сборки.
IncludeSource False Включает исходный каталог в целевой файл .algo.
IncludeSymbols False (Release)
True (Debug)
Включает отладочные символы в целевой файл .algo.

Обработка дополнительной ошибки

Если вы ссылаетесь на пакет NuGet cTrader.Automate в вашем проекте библиотеки классов, который не содержит классов алго cTrader (таких как Robot для сиБота), вы столкнетесь с ошибкой "Assembly must contain algo type" при попытке собрать проект. Эта ошибка возникает, поскольку параметр AlgoBuild по умолчанию равен True.

Чтобы исправить проблему, просто установите AlgoBuild в значение False в вашем файле проекта .NET, как показано в примере ниже:

<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>