Saltar a contenido

Operaciones con cBots

Este artículo explica el ciclo de vida de un cBot en cTrader CLI. Aprenderás a ejecutar un cBot desde el terminal, listar y detener las instancias en ejecución, alojar un cBot en un VPS o servidor en la nube mediante Docker y realizar backtests con datos históricos.

Requisitos previos

  • Tienes cTrader CLI instalado.
  • Tienes preparados tu cTrader ID, un archivo de credenciales y tu número de cuenta.
  • El cBot se ha exportado como un archivo .algo compilado para .NET 8.

Consultar los metadatos de un cBot

Antes de ejecutar un cBot, utiliza metadata para listar los parámetros que admite. La salida muestra el nombre y el tipo de cada propiedad del cBot.

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

Utiliza los nombres de los parámetros que aparecen en la salida de metadatos cuando los indiques desde la línea de comandos o mediante un archivo .cbotset.

Ejecutar un cBot

Inicia un cBot con run. La ruta del archivo .algo es el primer argumento. --account, --symbol y --period son obligatorios.

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

Hay tres formas de indicar los parámetros.

Origen Cuándo utilizarlo Ejemplo
Valores predeterminados Los parámetros predeterminados del cBot ya funcionan como necesitas. ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1
Desde la línea de comandos Sobrescribir uno o dos valores sin crear un archivo. ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1 --Periods=15 --ConsolidationPeriods=3
Archivo .cbotset Reutilizar un conjunto de valores en distintas ejecuciones; exporta el archivo desde la aplicación de escritorio de cTrader. ctrader-cli run /opt/mycbot.algo /opt/mysettings.cbotset --account=1234567 --symbol=EURUSD --period=h1

Hay dos opciones facultativas importantes para las ejecuciones sin supervisión.

Opción Finalidad
--full-access Ejecuta el cBot sin restricciones de permisos de acceso cuando necesita leer o escribir archivos locales o acceder a la red.
--exit-on-stop Finaliza el proceso de cTrader CLI cuando el cBot se detiene por sí solo; resulta útil en scripts y contenedores.

Ejecutar un cBot en un VPS o servidor en la nube

Una herramienta que solo necesita un terminal funciona bien en una pequeña instancia de Linux. Así, puedes ejecutar un cBot de forma continua a menor coste que en un ordenador de escritorio. La imagen Docker de cTrader CLI es la forma más portátil de hacerlo.

Descarga la imagen más reciente:

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

Ejecuta un cBot en un contenedor. La opción --mount vincula una carpeta del equipo anfitrión con el contenedor; las opciones -e transmiten la configuración mediante variables de entorno:

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 Asigna un nombre al contenedor.
--mount type=bind,src=...,dst=... Vincula una carpeta del equipo anfitrión con la ruta /mnt/Robots del contenedor.
-e CTID='mycid' Establece el cTrader ID como variable de entorno.
-e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' Establece la ruta al archivo de contraseña dentro del contenedor.
-e ACCOUNT='9102302' Establece el número de cuenta de operaciones.
-e SYMBOL='EURUSD' Establece el símbolo.
-e PERIOD='H1' Establece el período de tiempo.
"<path>" Ruta al archivo del cBot dentro del contenedor.
--environment-variables Indica a cTrader CLI que lea la configuración desde las variables de entorno.

Nota

Todas las funciones de cTrader CLI están disponibles en la imagen Docker, incluidos el backtesting y la optimización.

Iniciar desde la aplicación de escritorio de cTrader

No necesitas saber utilizar la línea de comandos para aprovechar cTrader CLI.

  1. En la aplicación de escritorio de cTrader, prepara un cBot con los parámetros que prefieras.
  2. Haz clic con el botón derecho en una instancia local del cBot y selecciona Iniciar en un proceso externo. cTrader CLI se inicia automáticamente y ejecuta la instancia de forma independiente.
  3. Cierra la aplicación de escritorio para ahorrar recursos de CPU y RAM. El cBot sigue ejecutándose en el proceso de cTrader CLI.

Listar y detener cBots

Lista las instancias de cBot que se están ejecutando en la cuenta:

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

Detén una instancia en ejecución mediante su identificador, que aparece en la salida de run:

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

Para detener todos los cBots en ejecución a la vez, abre la consola interactiva y ejecuta stop all yes. El proceso de cTrader CLI finaliza cuando se detiene la última instancia.

Realizar un backtest de un cBot

Ejecuta un cBot con datos históricos mediante backtest. La ruta al archivo .algo es el primer argumento, seguido opcionalmente de un archivo .cbotset. La prueba necesita un símbolo, un período de tiempo y un intervalo de fechas:

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>

Opciones del entorno de pruebas

Las opciones del entorno de pruebas se describen en la entrada backtest de la documentación de referencia de CLI. Las únicas entradas obligatorias son --start, --end y --data-mode. Las opciones adicionales permiten configurar el saldo inicial, las comisiones, el spread, las fuentes de datos y los archivos de informe.

Modos de datos

Valor Descripción
open Utiliza los precios de apertura del período base; es rápido, pero menos preciso dentro de cada barra.
m1 Utiliza datos de un minuto descargados del servidor.
m1-csv Utiliza datos de un minuto proporcionados mediante --data-file.
tick-csv Utiliza datos de ticks proporcionados mediante --data-file.
ticks Utiliza datos de ticks descargados del servidor; es el modo más preciso, pero también el más lento. Es obligatorio para los períodos de ticks, barras de rango y Renko.

Consejo

Configura --data-dir con una carpeta que se conserve entre ejecuciones para que cTrader CLI reutilice los datos de precios descargados en lugar de descargarlos de nuevo en cada backtest. En Docker, vincula esa carpeta a un directorio del equipo anfitrión para conservar los datos después de detener el contenedor.

Ejemplo práctico

Realiza un backtest de un cBot de ejemplo con un solo archivo 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 del backtest

cTrader CLI muestra el progreso continuamente en el terminal y, al finalizar, presenta un resumen. El resultado completo se guarda en una carpeta Backtesting junto al archivo .algo, con una subcarpeta por ejecución:

…/data/{cBotName}/{BacktestingInstanceID}/Backtesting
Archivo Contenido
Eventos (JSON) Cada evento importante de trading, como la apertura y el cierre de posiciones.
Registro (TXT) Inicio y detención del cBot, acciones de trading y resultados.
Parámetros (.cbotset) Los parámetros y valores utilizados en el backtest.
Informe (HTML) Un informe visual con estadísticas de trading e historial de órdenes que se abre en un navegador web.

--report y --report-json guardan los informes en la ruta especificada, además de en la carpeta anterior.

Comportamiento de la API de Algo en cTrader CLI

Algunos miembros de la API de cTrader Algo se comportan de forma diferente cuando un cBot se ejecuta en cTrader CLI, ya que no hay interfaz gráfica.

Miembro de la API Comportamiento en cTrader CLI
MessageBox Devuelve MessageBoxResult.None.
Window Se ignoran todos los métodos y no se muestra ninguna ventana.
Notifications.PlaySound Ignored.
Chart.TakeChartshot Devuelve null.