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
.algocompilado 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.
- Na aplicação cTrader para computador, prepare um cBot com os parâmetros da sua preferência.
- 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.
- 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. |