Saltar a contenido

Cómo crear un cBot para cTrader en 5 minutos

En este artículo y su correspondiente vídeo, vamos a describir una forma rápida de crear un cBot en cTrader Algo. El cBot que crearemos implementará una estrategia de operación simple llamada Three white soldiers y three black crows. Puede obtener más información sobre esta estrategia en nuestra base de conocimientos.

Antes de seguir nuestras instrucciones, asegúrese de haber descargado e instalado la aplicación cTrader para Windows o Mac desde el sitio web oficial. Iníciela y navegue hasta la sección cTrader Algo. Puede encontrarla en el panel izquierdo. Haga clic en la pestaña Algo y debería aparecer la sección cTrader Algo.

Añadir un nuevo cBot

Haga clic en el botón Nuevo en cTrader Algo para comenzar a crear un nuevo cBot. Ingrese un nombre, elija un lenguaje de programación entre C# y Python y continúe hasta que se abra el editor de código.

Añadir la configuración del cBot

Antes de comenzar a implementar una estrategia de operación, echaremos un vistazo a los parámetros y métodos básicos de los cBots. También puede consultar nuestra documentación para familiarizarse con lo que hacen los diferentes parámetros y métodos.

  • Parámetros del cBot – permiten definir atributos configurables como el volumen operado o las distancias de stop-loss/take-profit.

  • Métodos del cBot – definen cómo se comporta su cBot cuando ocurren eventos específicos. Hay cuatro eventos principales que debe manejar al desarrollar un cBot de cTrader, y cada uno es gestionado por un método correspondiente proporcionado por cTrader. Estos métodos son OnStart(), OnTick(), OnBar(), OnStop() en C# y on_start(), on_tick(), on_bar_closed(), on_stop() en Python. Tenga en cuenta que el método OnBar() de C# y on_bar_closed() de Python no está incluido en la plantilla de código predeterminada.

La siguiente tabla define estos cuatro métodos en detalle.

C# Python Propósito
OnStart() on_start() Se activa cuando una instancia de cBot comienza a operar. Se utiliza para inicializar cualquier variable que planee usar en su cBot, como indicadores, contadores, manejadores de eventos o temporizadores.
OnTick() on_tick() Se activa en cada tick (actualización de precio) en el gráfico de operaciones en el que se está ejecutando una instancia de cBot. Comúnmente utilizado para lógica de entrada o salida rápida basada en datos en tiempo real. Dentro de este método, puede programar condiciones de entrada y salida personalizadas, así como cualquier otra función auxiliar que necesite ejecutar cuando llegue un nuevo tick.
OnBar() on_bar_closed() Se activa al cierre de cada barra. Dentro de este método, puede programar condiciones de entrada y salida personalizadas o cualquier otra función que necesite ejecutarse en la formación de cada nueva barra.
OnStop() on_stop() Se llama cuando el cBot se detiene. Se utiliza para realizar operaciones finales como cerrar posiciones, guardar el estado y más

Añadir la lógica de operación

Ahora añadiremos el código para nuestra estrategia de operación. Nuestro cBot debería abrir una posición de compra cuando se formen tres barras verdes en el gráfico y una posición de venta cuando haya tres barras rojas consecutivas.

Primero, necesitamos definir los parámetros de nuestro cBot. Estos parámetros serán completamente personalizables desde la interfaz de usuario de cTrader. Definiremos tres parámetros en nuestro cBot.

  1. El volumen de cada operación.
  2. El stop loss en pips.
  3. El take profit en pips.

Pegue el siguiente código en su editor de código justo debajo de las llaves después de la declaración de la clase (public class NewcBot : Robot)

1
2
3
4
5
6
7
8
[Parameter(DefaultValue = 1000)]
public double Volume { get; set; }
        
[Parameter(DefaultValue = 10)]
public double TakeProfit { get; set; }
        
[Parameter(DefaultValue = 10)]
public double StopLoss { get; set; }

Nota

Los cBots de Python utilizan parámetros personalizables declarados en sus archivos .cs.

1
2
3
4
5
6
7
8
[Parameter(DefaultValue = 1000)]
public double Volume { get; set; }
        
[Parameter(DefaultValue = 10)]
public double TakeProfit { get; set; }
        
[Parameter(DefaultValue = 10)]
public double StopLoss { get; set; }

Ahora necesitamos implementar la lógica detrás de nuestra estrategia de operación. Pegue el siguiente código en su método OnBar() o on_bar_closed(). Recuerde que este método se llama cada vez que se forma una nueva barra.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
//Three White Soldiers
if(Bars.ClosePrices.Last(1) > Bars.OpenPrices.Last(1) 
&& Bars.ClosePrices.Last(2) > Bars.OpenPrices.Last(2)  
&& Bars.ClosePrices.Last(3) > Bars.OpenPrices.Last(3))
{
    ExecuteMarketOrder(TradeType.Buy, SymbolName, Volume, "", StopLoss, TakeProfit);
}
            
//Three Black Crows
if(Bars.ClosePrices.Last(1) < Bars.OpenPrices.Last(1) 
&& Bars.ClosePrices.Last(2) < Bars.OpenPrices.Last(2)  
&& Bars.ClosePrices.Last(3) < Bars.OpenPrices.Last(3))
{
    ExecuteMarketOrder(TradeType.Sell, SymbolName, Volume, "", StopLoss, TakeProfit);
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Three White Soldiers
if (close.Last(1) > open_.Last(1) and
    close.Last(2) > open_.Last(2) and
    close.Last(3) > open_.Last(3)):
    api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, api.Volume, "", api.StopLoss, api.TakeProfit)

# Three Black Crows
elif (close.Last(1) < open_.Last(1) and
      close.Last(2) < open_.Last(2) and
      close.Last(3) < open_.Last(3)):
    api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, api.Volume, "", api.StopLoss, api.TakeProfit)

Ahora examinaremos el código más de cerca. cTrader proporciona acceso a las barras históricas del gráfico, lo que nos permite comprobar si las últimas tres barras son todas verdes o todas rojas, respectivamente. En el método OnBar() de C# y on_bar_closed() de Python anterior, primero verificamos si las últimas tres barras fueron todas verdes. Luego evaluamos si estas barras fueron todas rojas.

Si una de las dos condiciones es verdadera, colocamos una orden de mercado utilizando el método ExecuteMarketOrder(). Toma varias entradas (argumentos), siendo las más importantes la dirección de la operación, el símbolo, el volumen operado, el stop loss y el take profit.

En nuestro caso, la dirección de la orden (TradeType.Buy, TradeType.Sell) está determinada por las condiciones de la estrategia de operación. El nombre del símbolo se toma directamente del gráfico en el que se está ejecutando nuestro cBot SymbolName. El volumen de operación, el stop loss y el take profit (C#: Volume, StopLoss, TakeProfit y Python: VolumeInLots, StopLossInPips, TakeProfitInPips) se recuperan todos de los parámetros del cBot que definimos.

Compilar y ejecutar el cBot

Ahora necesitamos comprobar si nuestro cBot se compila correctamente. Por defecto, la ventana de resultados de compilación se encuentra directamente debajo del editor de código. Si no la ve, haga clic en el botón Diseño en la barra superior de la interfaz de usuario de cTrader y seleccione Resultado de compilación. El atajo de teclado para esta acción es Ctrl + W

Después, haga clic en el botón Compilar ubicado en la barra superior de la interfaz de usuario de cTrader. Alternativamente, haga clic derecho en su cBot y haga clic en Compilar en el menú que aparece, o simplemente presione Ctrl + B.

Image title

Si la compilación es exitosa, verá un mensaje verde en el área de Resultado de compilación en la parte inferior del editor de código.

Image title

Alternativamente, si hay problemas con su código, verá un mensaje rojo y un resumen detallado de todos los errores de compilación.

Image title

Después de que su cBot se haya compilado correctamente, puede comenzar a usarlo. Todo lo que necesita hacer es añadir una instancia en un gráfico de operaciones. Para hacerlo, simplemente haga clic en el icono + a la derecha del nombre de su cBot. Verá una lista de todos los símbolos en los que puede ejecutar su cBot.

Image title

Vamos a seleccionar EURUSD. Después de elegir un símbolo, se añadirá una nueva instancia de cBot. Verá un nuevo elemento en la lista de cBots con el nombre del símbolo y el marco temporal en el que le gustaría operar.

También debería ver los parámetros que ha codificado en la pestaña Parámetros directamente debajo del gráfico de operaciones.

Image title

Puede cambiar estos parámetros como desee o simplemente dejarlos en sus valores predeterminados.

Además, verá un botón Reproducir en la parte superior del gráfico de EURUSD.

Image title

Para iniciar su instancia, presione este botón. Alternativamente, una copia de este botón también se encuentra a la derecha de su instancia en la lista de cBots a la izquierda. Cualquiera de estos botones iniciará el cBot.

Después de hacer clic en cualquiera de los botones, debería ver que se vuelve naranja, lo que significa que una instancia de nuestro cBot está ahora en funcionamiento. En la pestaña Registro, también debería ver una nueva línea que indica que el cBot ha comenzado.

Hacer backtesting del cBot

Nuestro cBot puede tardar mucho tiempo en abrir una posición en un gráfico de operaciones real. Vamos a ejecutar un backtesting rápido para verlo en acción con datos históricos. Para hacer esto, abra la pestaña Backtesting.

Image title

Use el control deslizante del calendario cerca de la parte superior de la pantalla para seleccionar el rango de fechas que le gustaría usar para el backtesting. Habilite la opción Modo visual para seguir los resultados del backtesting a medida que ocurren.

Vamos a mover el control deslizante un mes atrás. Haga clic en el botón Reproducir para iniciar el cBot en los datos históricos elegidos.

Después, podrá ver nuevas posiciones abriéndose y/o cerrándose en la pestaña inmediatamente debajo del gráfico de operaciones y a la derecha de la sección Parámetros. Específicamente, después de detectar cualquiera de los dos patrones que hemos codificado, el cBot colocará una orden de compra o de venta.

Ejecutar un backtesting es una forma útil de analizar si su cBot está funcionando correctamente.

Resumen

Esperamos que este artículo haya sido útil para demostrar cómo puede crear un robot de operaciones automatizado usando cTrader.

Image title