Ciclo de vida del cBot
En este artículo y su video adjunto, repasamos la estructura del código y explicamos la lógica detrás de los eventos y el ciclo de vida de un cBot de cTrader.
Como recordatorio, puede acceder a sus cBots en la aplicación Algo en cTrader. Para crear un nuevo cBot, simplemente haga clic en el botón Nuevo cBot o seleccione esta opción en el menú desplegable que se muestra a continuación.

Interpretar la plantilla básica
Después de crear un nuevo cBot, debería ver la siguiente estructura básica en la ventana del editor de código.
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 | |
Tenga en cuenta que solo hay tres eventos mostrados en la plantilla básica; estos eventos son manejados por los métodos OnStart(), OnTick() y OnStop(). Agregaremos dos métodos adicionales (OnBar() y OnException()) y explicaremos cómo funcionan más adelante; primero, discutiremos el método OnStart().
Usar el método OnStart()
El método OnStart() se activa cuando un cBot se inicia por primera vez. Se utiliza para inicializar cualquier variable que planee usar en su cBot, incluidos indicadores, contadores, manejadores de eventos o temporizadores.
Nota
La plantilla de código inicial ya incluye una declaración de código para imprimir un mensaje en el registro cuando se inicia un cBot. Como puede ver, nuestro cBot tiene el parámetro Message, y el método OnStart() pasa el valor de este parámetro al método Print().
Podemos demostrar cómo funciona el método OnStart() simplemente iniciando la instancia del cBot en la aplicación Trade y abriendo la pestaña Log para ver el resultado.

También podemos detener el cBot en cualquier momento, cambiar el valor del parámetro Message en la pestaña Parámetros y reiniciar nuestra instancia. Al iniciar, nuestro nuevo mensaje seguirá imprimiéndose en el registro.


Usar el método OnTick()
El método OnTick() se activa cada vez que cambia el precio de oferta o demanda del símbolo. Dentro de este método, normalmente puede programar condiciones de entrada y salida de posición, así como cualquier otra función auxiliar que necesite ejecutar cuando llega un nuevo tick de datos.
Agregaremos el siguiente código al método OnTick() para que imprima un mensaje en el registro.
1 | |
Como puede ver a continuación, nuestro cBot ahora imprime los precios de oferta y demanda en el registro en cada cambio de precio.

Usar el método OnBar()
El método OnBar() no está incluido en la plantilla de código predeterminada del cBot, por lo que agregaremos el siguiente fragmento de código para añadirlo.
1 2 3 4 | |
El método OnBar() se activa cada vez que se dibuja una nueva barra o vela en el gráfico al que está adjunto un cBot. De manera similar al método OnTick(), puede usar el método OnBar() para programar las condiciones de entrada y salida de posición, así como cualquier otra lógica que deba ejecutarse en la formación de cada nueva barra.
Cómo se activa el método OnBar()
Si tiene un gráfico H1, se forma una nueva barra cada hora, lo que significa que el método OnBar() se llamará una vez por hora. Si tiene un gráfico m1, el mismo método se llamará una vez por minuto.
Nuestro método OnBar() imprimirá "OnBar" en cada nueva barra/vela. Para demostrar cómo funciona, adjuntaremos nuestro cBot a un gráfico m1 y echaremos un vistazo al registro.

Usar el método OnStop()
El método OnStop() se llama cuando el cBot se detiene, ya sea por el usuario o a través del código. Cuando esto sucede, se ejecuta cualquier código dentro del método OnStop(). Esto se puede usar para realizar operaciones finales, como cerrar posiciones.
Agregaremos el siguiente código a nuestro método OnStop() - como de costumbre, nuestro cBot imprimirá el valor del parámetro Message cuando se detenga.
1 | |
En la captura de pantalla siguiente, iniciamos y detenemos una instancia de nuestro cBot para demostrar cómo funciona todo.

Use el método OnException()
El método OnException() proporciona tolerancia a fallos capturando excepciones no controladas, permitiéndole decidir cómo manejarlas. No está incluido en la plantilla de código predeterminada, así que lo añadiremos nosotros mismos utilizando el siguiente fragmento.
1 2 3 4 | |
Para activar el método OnException(), escribiremos un código para capturar una excepción que ocurre cuando intentamos acceder a información sobre una operación que ya no existe. Añadiremos el código siguiente a nuestro método OnStart().
1 | |
El código que hemos escrito en el método OnStart() ejecutará una orden de mercado con los siguientes parámetros configurables.
- El tipo de operación será una orden de compra.
- La operación se ejecutará para el símbolo actual del gráfico al que está adjunto el cBot.
- El volumen de la orden será de 1.000 unidades.
- La etiqueta única adjunta a la orden será "my label".
También añadiremos el siguiente código al método OnTick().
1 2 3 | |
El código que hemos escrito en el método OnTick() encontrará la posición que se abrió en el método OnStart() utilizando el nombre de etiqueta "my label".
Si se encuentra la posición con la misma etiqueta, imprimirá en el registro el ID de posición de la operación abierta. También imprimirá otro mensaje llamado "Message below" como la siguiente línea de código que se ejecuta.
Cuando se inicie nuestro cBot y se llame al método OnTick() y se encuentre la orden, el cBot imprimirá el ID de la orden en el registro y, después del ID de la orden, imprimirá el mensaje "Message below".

Como puede ver, no surgen excepciones y nuestro cBot hace su trabajo perfectamente.
Ahora, sin embargo, cerraremos manualmente la posición abierta por el cBot y haremos pequeños cambios en el código para que se garantice que ocurra una excepción. En el método OnStart(), cambiaremos la etiqueta de la orden a "cTrader". En el método OnTick(), comentaremos la condición que comprueba si existe una posición con la etiqueta "my label".
Aquí está el código final de nuestro cBot - tenga en cuenta que este código siempre activará una excepción.
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 | |
Ejecutaremos el cBot de nuevo y veremos qué sucede.

Lo que sucedió es que se creó una nueva orden de mercado cuando se inició el cBot. La etiqueta adjunta a esta orden era "cTrader". En el método OnTick(), el código intentó obtener una posición con la etiqueta "my label" y como comentamos la línea de código con la condicional. Luego intentó imprimir en el registro el ID de posición.
Esto causó un error de excepción que normalmente habría detenido el cBot en versiones anteriores de cTrader, pero con el nuevo método OnException(), ahora podemos capturar esto y manejar el error. El cBot continuará ejecutándose y podemos registrar el error para que pueda ser corregido.
Resumen
El ciclo de vida del cBot consiste en varios eventos clave que puede manejar a través de los métodos OnStart(), OnTick(), OnStop(), OnBar() y OnException(). Al personalizar cómo responde su cBot a los eventos principales, puede asegurarse de que sus algoritmos se comporten exactamente como se espera.