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

Как добавить ссылки на сторонние библиотеки в cTrader Algo

Сторонние библиотеки позволяют пользователям расширять и улучшать функциональность своих сиБотов, индикаторов и плагинов. Поскольку cTrader Algo разработан с использованием .NET 6.0, пользователи могут добавлять и использовать сторонние библиотеки, созданные с .NET 6.0, в своих алгоритмических проектах.

В этой статье и соответствующем видео вы узнаете, как добавлять ссылки на сторонние библиотеки в API cTrader Algo. На примере библиотеки Discord.Net мы продемонстрируем, как отправлять сообщения в канал Discord.

Добавление ссылки путем установки пакета NuGet

В нашем первом примере мы планируем добавить ссылку в проект сиБота путем установки пакета из библиотеки NuGet. NuGet — это официальный менеджер пакетов для платформы .NET, используемый для создания, использования и распространения пакетов или библиотек.

Примечание

Если вы разрабатываете алгоритмы в Visual Studio, используйте метод добавления ссылки, описанный ниже. В противном случае перейдите к следующему разделу этой статьи.

В cTrader Algo создайте сиБот. Нажмите кнопку New, введите имя, например "Discord Message Example", затем нажмите кнопку Create.

Далее перейдите на сайт NuGet, введите Discord в текстовое поле и выберите библиотеку Discord.Net из результатов.

Нажмите на вкладку Package manager, а затем скопируйте команду оттуда.

Вернитесь в cTrader и нажмите Edit in Visual Studio.

Ваш проект сиБота должен открыться в приложении Visual Studio на вашем компьютере.

В Visual Studio откройте меню Tools, выберите NuGet package manager, затем Package manager console.

Вставьте команду, которую вы скопировали ранее с сайта NuGet, и выполните ее.

1
NuGet\Install-Package Discord.Net -Version 3.16.0

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

Начните с объявления важных параметров, таких как токен бота Discord и ID канала.

1
2
3
4
5
[Parameter("Discord Bot Token")]
public string BotToken { get; set; }

[Parameter("Discord Channel ID")]
public string ChannelID { get; set; }

Затем объявите объект клиента Discord и объект канала сообщений.

1
2
DiscordSocketClient _discordSocketClient;
IMessageChannel _channel;

В нашем методе OnStart() напишите простой код для отправки сообщения в наш канал при запуске сиБота.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
protected override void OnStart()
{
    _discordSocketClient = new DiscordSocketClient();
    _discordSocketClient.LoginAsync(TokenType.Bot, BotToken);
    _discordSocketClient.StartAsync();

    var channelID = Convert.ToUInt64(ChannelID);
    _channel = _discordSocketClient.GetChannelAsync(channelID).Result as IMessageChannel;
    _channel.SendMessageAsync("Example cBot Started");
}

Вы можете скопировать полный код ниже:

 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using Discord.WebSocket;
using Discord;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class DiscordMessageExample : Robot
    {
        [Parameter("Discord Bot Token")]
        public string BotToken { get; set; }

        [Parameter("Discord Channel ID")]
        public string ChannelID { get; set; }

        DiscordSocketClient _discordSocketClient;
        IMessageChannel _channel;

        protected override void OnStart()
        {
            _discordSocketClient = new DiscordSocketClient();
            _discordSocketClient.LoginAsync(TokenType.Bot, BotToken);
            _discordSocketClient.StartAsync();

            var channelID = Convert.ToUInt64(ChannelID);
            _channel = _discordSocketClient.GetChannelAsync(channelID).Result as IMessageChannel;
            _channel.SendMessageAsync("Example cBot Started");
        }

        protected override void OnTick()
        {
            // Handle price updates here
        }

        protected override void OnStop()
        {
            // Handle cBot stop here
        }
    }
}

Теперь соберите сиБот.

Вернитесь в cTrader. Нажмите Add instance, укажите предпочитаемые параметры в окне, а затем нажмите кнопку Add instance.

Введите токен вашего бота Discord и ID канала.

Запустите экземпляр сиБота. Когда появится окно Access request, нажмите Allow, чтобы продолжить.

СиБот должен начать работу, и вы должны увидеть сообщение, поступившее в канал Discord.

Добавление ссылки через интерфейс cTrader

Некоторые библиотеки недоступны в виде пакетов NuGet. Если вы планируете использовать такие библиотеки в своем проекте сиБота, вам необходимо добавить их DLL-файлы напрямую в качестве ссылок.

Здесь мы продемонстрируем, как можно добавить ссылку на ту же библиотеку Discord.Net, добавив ее DLL-файлы.

Вернитесь в Visual Studio и удалите библиотеку Discord.Net, которую мы установили в предыдущем подразделе. Откройте консоль диспетчера пакетов NuGet, как вы делали ранее, и выполните следующую команду:

1
NuGet\Uninstall-Package Discord.Net -Version 3.16.0

Пакеты Discord будут удалены как ссылки в нашем сиБоте Discord Message Example. Если сейчас пересобрать сиБот, сборка завершится с несколькими сообщениями об ошибках из-за отсутствующих библиотек.

Вернитесь в cTrader и добавьте необходимые библиотеки, используя функцию Manage references вверху.

Когда появится окно Reference manager, перейдите в Browse, затем нажмите кнопку Browse. Выберите DLL-файл и затем выполните то же действие для всех DLL-файлов, на которые вы хотите добавить ссылки.

Нажмите Apply и снова соберите сиБот.

Теперь, когда вы запустите экземпляр сиБота, сборка будет завершена без ошибок, и вы должны увидеть сообщение, поступившее в канал Discord.

В этой статье показано, как добавлять ссылки на сторонние библиотеки в cTrader Algo двумя различными методами.