Ir para o conteúdo

Compilar e criar algoritmos no cTrader

Pode utilizar dois tipos de compiladores ao compilar/criar algoritmos do cTrader:

  • Compilador incorporado
  • Compilador .NET SDK

Por predefinição, o cTrader utiliza o compilador incorporado, mas recomendamos que o altere para o compilador .NET SDK se tiver um instalado na sua máquina local.

Compilar ficheiros CSPROJ e recuperar cBots

O cTrader Algo permite-lhe gerar e guardar algoritmos compilando ficheiros .csproj. Utilize o seguinte código para executar a operação:

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

Se definir AccessRights como None, deve especificar caminhos para diretórios dentro da pasta de dados do algoritmo. Esta configuração significa que os algoritmos não têm permissão para compilar ficheiros fora das suas pastas de dados.

Se definir AccessRights como FullAccess, pode especificar o caminho para qualquer diretório ou localização, tanto para o ficheiro .csproj como para o algoritmo gerado.

Se pretender utilizar um caminho de ficheiro relativo, o diretório base deve existir ao longo deste caminho: ..Documents\Algo\Data\{Tipo de algoritmo}\{Nome do algoritmo}.

Depois de iniciar o cBot localmente, o algoritmo será guardado no diretório especificado.

Mudar de compilador

Para mudar para um compilador diferente, clique em Definições no canto inferior esquerdo da interface para abrir a janela de definições e, em seguida, mude para o separador Algo.

Image title

Abra o menu pendente Selecionar compilador e escolha um compilador adequado entre as opções disponíveis.

Compilador incorporado

O compilador incorporado está integrado na plataforma cTrader Windows. Em comparação com o compilador .NET SDK, tem funcionalidades limitadas. Por exemplo, o compilador incorporado não suporta pacotes e estruturas .NET de terceiros, como WinForms e WPF.

Compilador .NET SDK

A utilização do compilador .NET SDK é fortemente recomendada para projetos grandes ou extensões que utilizem bibliotecas .NET de terceiros. O compilador .NET SDK também suporta funcionalidades adicionais, como parâmetros de compilação.

O menu Selecionar compilador permite escolher qualquer compilador .NET SDK que tenha instalado na sua máquina local. Se não tiver nenhuma versão do .NET SDK instalada, pode sempre clicar no botão Instalar .NET SDK para ser direcionado para a página de transferência da versão estável mais recente.

Parâmetros

O cTrader oferece parâmetros personalizáveis que pode especificar ao utilizar o .NET CLI ao criar os seus cBots/indicadores em IDEs externos. Estes são definidos abaixo:

Nome Valor predefinido Descrição
AlgoName $(MSBuildProjectName) Especifica o nome do ficheiro .algo.
Esta propriedade não afeta o AssemblyName.
AlgoBuild True Permite criar ficheiros .algo.
AlgoPublish True Permite copiar ficheiros .algo para o diretório MyDocuments do utilizador atual após uma compilação bem-sucedida.
IncludeSource False Inclui o diretório de origem no ficheiro .algo de destino.
IncludeSymbols False (Versão)
True (Depuração)
Inclui os símbolos de depuração no ficheiro .algo de destino.

Tratamento de um erro adicional

Se fizer referência ao pacote NuGet cTrader.Automate no seu projeto de biblioteca de classes que não contenha nenhuma classe de algoritmo cTrader (como Robot para um cBot), encontrará o erro "A assemblagem deve conter um tipo de algoritmo" quando tentar compilar o projeto. Este erro surge porque o parâmetro AlgoBuild é igual a True por predefinição.

Para corrigir o problema, basta definir AlgoBuild como False no seu ficheiro de projeto .NET, como se vê no exemplo abaixo:

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