Bỏ qua

Biên dịch và xây dựng thuật toán trong cTrader

Bạn có thể sử dụng hai loại trình biên dịch khi biên dịch/xây dựng thuật toán cTrader:

  • Trình biên dịch tích hợp
  • Trình biên dịch .NET SDK

Theo mặc định, cTrader sử dụng trình biên dịch tích hợp nhưng chúng tôi khuyên bạn nên chuyển sang trình biên dịch .NET SDK nếu bạn đã cài đặt nó trên máy tính cục bộ của mình.

Biên dịch tệp CSPROJ và truy xuất cBot

cTrader Algo cho phép bạn tạo và lưu thuật toán bằng cách biên dịch các tệp .csproj. Sử dụng mã sau để thực hiện thao tác:

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

Nếu bạn đặt AccessRights thành None, bạn phải chỉ định đường dẫn đến các thư mục bên trong thư mục dữ liệu thuật toán. Cấu hình này có nghĩa là thuật toán không được phép biên dịch các tệp bên ngoài thư mục dữ liệu của chúng.

Nếu bạn đặt AccessRights thành FullAccess, bạn có thể chỉ định đường dẫn đến bất kỳ thư mục hoặc vị trí nào cho cả tệp .csproj và thuật toán được tạo.

Nếu bạn định sử dụng đường dẫn tệp tương đối, thư mục cơ sở phải tồn tại dọc theo đường dẫn này: ..Documents\Algo\Data\{Loại thuật toán}\{Tên thuật toán}.

Sau khi bạn khởi chạy cBot cục bộ, thuật toán sẽ được lưu trong thư mục đã chỉ định.

Chuyển đổi trình biên dịch

Để chuyển sang trình biên dịch khác, nhấp vào Cài đặt ở góc dưới bên trái của giao diện người dùng để mở cửa sổ cài đặt, sau đó chuyển sang tab Algo.

Image title

Mở danh sách thả xuống Chọn trình biên dịch và chọn trình biên dịch phù hợp từ các tùy chọn có sẵn.

Trình biên dịch tích hợp

Trình biên dịch tích hợp được tích hợp sẵn trong nền tảng cTrader Windows. So với trình biên dịch .NET SDK, nó có các tính năng hạn chế. Ví dụ, trình biên dịch tích hợp không hỗ trợ bất kỳ gói và framework .NET của bên thứ ba nào như WinForms và WPF.

Trình biên dịch .NET SDK

Chúng tôi đặc biệt khuyến nghị sử dụng trình biên dịch .NET SDK cho các dự án lớn hoặc tiện ích mở rộng sử dụng thư viện .NET của bên thứ ba. Trình biên dịch .NET SDK cũng hỗ trợ các tính năng bổ sung như tham số xây dựng.

Menu Chọn trình biên dịch cho phép chọn bất kỳ trình biên dịch .NET SDK nào bạn đã cài đặt trên máy tính cục bộ của mình. Nếu không có phiên bản nào của .NET SDK được cài đặt, bạn luôn có thể nhấp vào nút Cài đặt .NET SDK để được chuyển đến trang tải xuống phiên bản ổn định mới nhất.

Tham số

cTrader cung cấp các tham số có thể tùy chỉnh mà bạn có thể chỉ định khi sử dụng .NET CLI khi xây dựng cBot/chỉ báo trong các IDE bên ngoài. Chúng được định nghĩa dưới đây:

Tên Giá trị mặc định Mô tả
AlgoName $(MSBuildProjectName) Chỉ định tên tệp .algo.
Thuộc tính này không ảnh hưởng đến AssemblyName.
AlgoBuild True Cho phép xây dựng tệp .algo.
AlgoPublish True Cho phép sao chép tệp .algo vào thư mục MyDocuments của người dùng hiện tại sau khi xây dựng thành công.
IncludeSource False Bao gồm thư mục nguồn vào tệp .algo đích.
IncludeSymbols False (Phát hành)
True (Gỡ lỗi)
Bao gồm các ký hiệu gỡ lỗi vào tệp .algo đích.

Xử lý lỗi bổ sung

Nếu bạn tham chiếu gói NuGet cTrader.Automate trong dự án thư viện lớp của bạn mà không chứa bất kỳ lớp thuật toán cTrader nào trong đó (như Robot cho cBot), bạn sẽ gặp lỗi "Assembly must contain algo type" khi cố gắng xây dựng dự án. Lỗi này phát sinh do tham số AlgoBuild bằng True theo mặc định.

Để khắc phục vấn đề này, chỉ cần đặt AlgoBuild thành False trong tệp dự án .NET của bạn như trong ví dụ dưới đây:

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