Ir para o conteúdo

Operações com cBots

Este artigo descreve o ciclo de vida de um cBot no cTrader CLI. Saiba como executar um cBot a partir de um terminal, listar e parar instâncias em execução, alojar um cBot num VPS ou servidor na nuvem com Docker e realizar testes de verificação com dados históricos.

Pré-requisitos

  • O cTrader CLI está instalado.
  • Tem o seu cTrader ID, um ficheiro de credenciais e o número da sua conta preparados.
  • O cBot foi exportado como ficheiro .algo compilado para .NET 8.

Consultar metadados de um cBot

Antes de executar um cBot, utilize metadata para listar os parâmetros que aceita. A saída identifica o nome e o tipo de cada propriedade do cBot.

ctrader-cli metadata <path-to-algo-file>

Utilize os nomes dos parâmetros apresentados nos metadados quando os indicar na linha de comandos ou através de um ficheiro .cbotset.

Executar um cBot

Inicie um cBot com run. O caminho para o ficheiro .algo é o primeiro argumento. --account, --symbol e --period são obrigatórios.

ctrader-cli run <path-to-algo-file> --account=<account-id> --symbol=<symbol> --period=<period>

Existem três formas de fornecer parâmetros.

Origem Quando utilizar Exemplo
Valores predefinidos Os parâmetros predefinidos do cBot já funcionam como pretendido. ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1
Na linha de comandos Substituir um ou dois valores sem criar um ficheiro. ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1 --Periods=15 --ConsolidationPeriods=3
Ficheiro .cbotset Reutilizar um conjunto de valores em várias execuções; exporte o ficheiro a partir da aplicação cTrader para computador. ctrader-cli run /opt/mycbot.algo /opt/mysettings.cbotset --account=1234567 --symbol=EURUSD --period=h1

Duas opções facultativas são importantes para execuções sem supervisão.

Opção Finalidade
--full-access Executa o cBot sem restrições de direitos de acesso quando este precisa de ler ou escrever ficheiros locais ou aceder à rede.
--exit-on-stop Termina o processo cTrader CLI quando o cBot para por si próprio; útil em scripts e contentores.

Executar um cBot num VPS ou servidor na nuvem

Uma ferramenta que funciona apenas num terminal pode ser executada numa pequena instância Linux. Assim, um cBot pode funcionar continuamente a um custo inferior ao de um computador de secretária. A imagem Docker do cTrader CLI é a forma mais portátil de o fazer.

Transfira a imagem mais recente:

docker pull ghcr.io/spotware/ctrader-console:latest

Execute um cBot num contentor. A opção --mount associa uma pasta do anfitrião a uma localização no contentor; as opções -e transmitem a configuração através de variáveis de ambiente:

docker run -d -it \
  --name ctrader.console.run.mybot \
  --mount type=bind,src=/cAlgo/Robots,dst=/mnt/Robots \
  -e CTID='mycid' \
  -e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' \
  -e ACCOUNT='9102302' \
  -e SYMBOL='EURUSD' \
  -e PERIOD='H1' \
  ghcr.io/spotware/ctrader-console:latest run "/mnt/Robots/My bot.algo" --environment-variables
Elemento Significado
--name ctrader.console.run.mybot Atribui um nome ao contentor.
--mount type=bind,src=...,dst=... Associa uma pasta do anfitrião ao caminho /mnt/Robots no contentor.
-e CTID='mycid' Define o cTrader ID como variável de ambiente.
-e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' Define o caminho para o ficheiro de palavra-passe dentro do contentor.
-e ACCOUNT='9102302' Define o número da conta de negociação.
-e SYMBOL='EURUSD' Define o símbolo.
-e PERIOD='H1' Define o intervalo de tempo.
"<path>" Caminho para o ficheiro do cBot dentro do contentor.
--environment-variables Indica ao cTrader CLI que leia a configuração das variáveis de ambiente.

Nota

Todas as funcionalidades do cTrader CLI estão disponíveis na imagem Docker, incluindo testes de verificação e otimização.

Iniciar a partir da aplicação cTrader para computador

Não precisa de dominar a linha de comandos para tirar partido do cTrader CLI.

  1. Na aplicação cTrader para computador, prepare um cBot com os parâmetros da sua preferência.
  2. Clique com o botão direito do rato numa instância local do cBot e selecione Iniciar num processo externo. O cTrader CLI inicia automaticamente e executa a instância de forma independente.
  3. Feche a aplicação para computador para poupar recursos de CPU e RAM. O cBot continua a funcionar no processo cTrader CLI.

Listar e parar cBots

Liste as instâncias de cBot atualmente em execução na conta:

ctrader-cli cbots --ctid=letstrade --password=secret --account=1234567 -q

Pare uma instância em execução utilizando o seu identificador, apresentado na saída de run:

ctrader-cli stop --ctid=letstrade --password=secret --account=1234567 -q --instance=<instance-id>

Para parar todos os cBots em execução de uma só vez, abra a shell interativa e execute stop all yes. O processo cTrader CLI termina quando a última instância para.

Realizar testes de verificação de um cBot

Execute um cBot com dados históricos utilizando backtest. O caminho para o ficheiro .algo é o primeiro argumento e pode ser seguido por um ficheiro .cbotset facultativo. O teste requer um símbolo, um intervalo de tempo e um período de datas:

ctrader-cli backtest <path-to-algo-file> [<path-to-cbotset-file>] --account=<account-id> --symbol=<symbol> --period=<period> --start=<start-date> --end=<end-date> --data-mode=<data-mode>

Opções do contexto de teste

As opções do contexto de teste surgem após a entrada backtest na documentação de referência da CLI. Os únicos parâmetros obrigatórios são --start, --end e --data-mode. As opções facultativas abrangem saldo inicial, comissões, spread, fontes de dados e ficheiros de relatório.

Modos de dados

Valor Descrição
open Utiliza os preços de abertura do intervalo de tempo base; é rápido, mas menos preciso dentro de cada barra.
m1 Utiliza dados de um minuto transferidos do servidor.
m1-csv Utiliza dados de um minuto fornecidos através de --data-file.
tick-csv Utiliza dados de ticks fornecidos através de --data-file.
ticks Utiliza dados de ticks transferidos do servidor; é o modo mais preciso, mas também o mais lento. É obrigatório para intervalos de tempo de ticks, range e Renko.

Dica

Defina --data-dir para uma pasta que se mantenha entre execuções, para que o cTrader CLI reutilize os dados de preços transferidos em vez de os transferir novamente para cada teste de verificação. No Docker, associe esta pasta a um diretório do anfitrião para conservar os dados depois de o contentor parar.

Exemplo prático

Realize um teste de verificação de um cBot de exemplo com um único ficheiro de parâmetros .cbotset:

ctrader-cli backtest "C:/test/sample martingale.algo" C:/test/special-parameters.cbotset \
  --ctid=letstrade --pwd-file=C:/test/password.pwd --account=1234567 --symbol=EURUSD --period=h1 \
  --start="01/01/2025 12:34" --end="31/01/2025 20:56" \
  --balance=10000 --commission=30 --commission-type=UsdPerMillionUsdVolume --spread=1 --data-mode=m1

Resultados do teste de verificação

O cTrader CLI apresenta o progresso continuamente no terminal e, no final, mostra um resumo. O resultado completo fica numa pasta Backtesting junto ao ficheiro .algo, com uma subpasta por execução:

…/data/{cBotName}/{BacktestingInstanceID}/Backtesting
Ficheiro Conteúdo
Eventos (JSON) Todos os eventos de negociação relevantes, como a abertura e o fecho de posições.
Registo (TXT) Início e paragem do cBot, ações de negociação e respetivos resultados.
Parâmetros (.cbotset) Os parâmetros e valores utilizados no teste de verificação.
Relatório (HTML) Um relatório visual com estatísticas de negociação e histórico de ordens, que abre num navegador.

--report e --report-json guardam os relatórios num caminho específico, além da pasta indicada acima.

Comportamento da API Algo no cTrader CLI

Alguns membros da API cTrader Algo comportam-se de forma diferente quando um cBot é executado no cTrader CLI, porque não existe uma interface gráfica.

Membro da API Comportamento no cTrader CLI
MessageBox Devolve MessageBoxResult.None.
Window Todos os métodos são ignorados e não é apresentada qualquer janela.
Notifications.PlaySound Ignored.
Chart.TakeChartshot Devolve null.