Ir para o conteúdo

Como referenciar bibliotecas de terceiros no cTrader Algo

As bibliotecas de terceiros permitem aos utilizadores expandir e melhorar a funcionalidade dos seus cBots, indicadores e plugins. Uma vez que o cTrader Algo é desenvolvido com .NET 6.0, os utilizadores podem adicionar e usar bibliotecas de terceiros construídas com .NET 6.0 nos seus projetos de algoritmos.

Neste artigo e no vídeo correspondente, aprenderá como referenciar bibliotecas de terceiros na API do cTrader Algo. Usando a biblioteca Discord.Net, demonstraremos como enviar mensagens para um canal do Discord.

Adicione uma referência instalando um pacote NuGet

No nosso primeiro exemplo, planeamos adicionar uma referência no nosso projeto cBot instalando um pacote da biblioteca NuGet. O NuGet é o gestor de pacotes oficial para a plataforma .NET usado para criar, consumir e distribuir pacotes ou bibliotecas.

Nota

Se desenvolver algoritmos no Visual Studio, use o método de adicionar uma referência descrito abaixo. Caso contrário, navegue para a próxima secção deste artigo.

No cTrader Algo, crie um cBot. Clique no botão New, introduza um nome como "Discord Message Example" e, em seguida, clique no botão Create.

A seguir, vá para o website do NuGet, escreva Discord no campo de texto e selecione a biblioteca Discord.Net dos resultados.

Clique no separador Package manager e depois copie o comando aí presente.

Volte ao cTrader e clique em Edit in Visual Studio.

O seu projeto cBot deverá abrir na aplicação Visual Studio no seu computador.

No Visual Studio, abra o menu Tools, selecione NuGet package manager e depois Package manager console.

Cole o comando que copiou anteriormente do website do NuGet e execute-o.

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

Tendo instalado o pacote necessário, podemos prosseguir para desenvolver o nosso exemplo de cBot.

Comece por declarar parâmetros importantes, como o token do bot do Discord e o ID do canal.

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

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

Em seguida, declare um objeto de cliente Discord e um objeto de canal de mensagens.

1
2
DiscordSocketClient _discordSocketClient;
IMessageChannel _channel;

No nosso método OnStart(), escreva um código simples para enviar uma mensagem para o nosso canal quando o cBot iniciar.

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

Pode copiar o código completo abaixo:

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

Agora, crie o cBot.

Volte ao cTrader. Clique em Add instance, especifique os seus parâmetros preferidos na janela e depois clique no botão Add instance.

Introduza o seu token de bot do Discord e o ID do canal.

Inicie a instância do cBot. Quando a janela Access request aparecer, clique em Allow para continuar.

O cBot deve começar a funcionar e deverá ver uma mensagem chegar ao canal do Discord.

Adicione uma referência através da interface do cTrader

Algumas bibliotecas não estão disponíveis como pacotes NuGet. Se planeia usar tais bibliotecas no seu projeto cBot, terá de adicionar os seus ficheiros DLL diretamente como referências.

Aqui, demonstraremos como pode referenciar a mesma biblioteca Discord.Net adicionando os seus ficheiros DLL.

Volte ao Visual Studio e desinstale a biblioteca Discord.Net que instalámos na subsecção anterior. Abra a Consola do Gestor de Pacotes NuGet como fez antes e execute o seguinte comando:

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

Os pacotes do Discord serão removidos como referências no nosso cBot Discord Message Example. Se o cBot for reconstruído agora, a compilação terminará com várias mensagens de erro devido às bibliotecas em falta.

Volte ao cTrader e adicione as bibliotecas necessárias usando a funcionalidade Manage references no topo.

Quando a janela Reference manager aparecer, navegue até Browse e depois clique no botão Browse. Selecione o ficheiro DLL e depois execute a mesma ação para todos os ficheiros DLL que pretende referenciar.

Clique em Apply e compile o cBot novamente.

Agora, quando executar uma instância do cBot, a compilação será concluída sem erros e deverá ver a mensagem chegar ao canal do Discord.

Este artigo demonstrou como referenciar bibliotecas de terceiros no cTrader Algo usando dois métodos diferentes.