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
.algocompilado 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.
- En la aplicación de escritorio de cTrader, prepara un cBot con los parámetros que prefieras.
- 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.
- 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. |