Przejdź do treści

Kompiluj i buduj algorytmy w cTrader

Możesz użyć dwóch typów kompilatorów podczas kompilowania/budowania algorytmów cTrader:

  • Kompilator wbudowany
  • Kompilator .NET SDK

Domyślnie cTrader używa kompilatora wbudowanego, ale zalecamy zmianę go na kompilator .NET SDK, jeśli masz go zainstalowanego na swoim komputerze lokalnym.

Kompilowanie plików CSPROJ i pobieranie cBotów

cTrader Algo umożliwia generowanie i zapisywanie algorytmów poprzez kompilowanie plików .csproj. Użyj następującego kodu, aby wykonać operację:

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

Jeśli ustawisz AccessRights na None, musisz określić ścieżki do katalogów wewnątrz folderu danych algo. Ta konfiguracja oznacza, że algorytmy nie mogą kompilować plików poza swoimi folderami danych.

Jeśli ustawisz AccessRights na FullAccess, możesz określić ścieżkę do dowolnego katalogu lub lokalizacji zarówno dla pliku .csproj, jak i wygenerowanego algorytmu.

Jeśli zamierzasz użyć względnej ścieżki pliku, katalog bazowy musi istnieć wzdłuż tej ścieżki: ..Documents\Algo\Data\{Algo type}\{Algo name}.

Po uruchomieniu cBota lokalnie algorytm zostanie zapisany w określonym katalogu.

Przełączanie kompilatorów

Aby zmienić kompilator, kliknij Ustawienia w lewym dolnym rogu interfejsu użytkownika, aby otworzyć okno ustawień, a następnie przełącz się na kartę Algo.

Image title

Otwórz menu rozwijane Wybierz kompilator i wybierz odpowiedni kompilator z dostępnych opcji.

Kompilator osadzony

Kompilator osadzony jest wbudowany w platformę cTrader Windows. W porównaniu z kompilatorem .NET SDK ma ograniczone funkcje. Na przykład kompilator osadzony nie obsługuje żadnych pakietów i frameworków .NET innych firm, takich jak WinForms i WPF.

Kompilator .NET SDK

Korzystanie z kompilatora .NET SDK jest zdecydowanie zalecane w przypadku dużych projektów lub rozszerzeń, które wykorzystują biblioteki .NET innych firm. Kompilator .NET SDK obsługuje również dodatkowe funkcje, takie jak parametry kompilacji.

Menu Wybierz kompilator umożliwia wybór dowolnego kompilatora .NET SDK zainstalowanego na komputerze lokalnym. Jeśli nie są zainstalowane żadne wersje .NET SDK, zawsze możesz kliknąć przycisk Zainstaluj .NET SDK, aby przejść do strony pobierania najnowszej stabilnej wersji.

Parametry

cTrader oferuje konfigurowalne parametry, które można określić podczas korzystania z .NET CLI podczas kompilowania cBotów/wskaźników w zewnętrznych IDE. Są one zdefiniowane poniżej:

Nazwa Wartość domyślna Opis
AlgoName $(MSBuildProjectName) Określa nazwę pliku .algo.
Ta właściwość nie wpływa na AssemblyName.
AlgoBuild True Umożliwia kompilowanie plików .algo.
AlgoPublish True Umożliwia kopiowanie plików .algo do katalogu MyDocuments bieżącego użytkownika po pomyślnej kompilacji.
IncludeSource False Dołącza katalog źródłowy do docelowego pliku .algo.
IncludeSymbols False (Release)
True (Debug)
Dołącza symbole debugowania do docelowego pliku .algo.

Obsługa dodatkowego błędu

Jeśli odwołujesz się do pakietu NuGet cTrader.Automate w projekcie biblioteki klas, który nie zawiera żadnych klas algo cTrader (takich jak Robot dla cBota), napotkasz błąd „Assembly must contain algo type" podczas próby kompilacji projektu. Ten błąd pojawia się, ponieważ parametr AlgoBuild domyślnie ma wartość True.

Aby rozwiązać problem, po prostu ustaw AlgoBuild na False w pliku projektu .NET, jak pokazano w poniższym przykładzie:

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