Introducción a cTrader Automate y los cBots
cTrader Automate es el entorno de desarrollo integrado (IDE) de la plataforma cTrader que permite crear robots de trading algorítmico, conocidos como cBots, utilizando el lenguaje de programación C# sobre .NET. A diferencia de MQL5 en MetaTrader o Pine Script en TradingView, cTrader Automate ofrece un framework moderno con tipado fuerte, acceso completo a la API REST de cTrader, ejecución multihilo real y depuración remota desde Visual Studio.
El trading algorítmico ha pasado de ser una herramienta exclusiva de fondos de cobertura institucionales a estar al alcance de cualquier operador minorista con conocimientos básicos de programación. En 2026, la barrera de entrada para crear sistemas automatizados es más baja que nunca, gracias a plataformas como cTrader que ofrecen entornos de desarrollo gratuitos y documentación extensa. Un cBot bien diseñado puede operar 24/7 sin intervención humana, eliminar sesgos emocionales y ejecutar estrategias complejas que serían imposibles de gestionar manualmente. Sin embargo, esta potencia conlleva la responsabilidad de implementar controles de riesgo rigurosos y realizar pruebas exhaustivas antes de cualquier despliegue en producción.
Si es nuevo en el desarrollo de algoritmos cuantitativos, le recomendamos leer primero nuestra guía de gestión de riesgo cuantitativa para comprender los fundamentos que todo cBot debe incorporar antes de operar en cualquier mercado.
En esta guía aprenderá a crear su primer cBot desde cero, entender la estructura fundamental del código y desplegarlo en el simulador de cTrader para realizar pruebas de backtesting. Todo el contenido tiene fines estrictamente educativos bajo el marco del Decreto 2555 de 2010, operando exclusivamente en cuentas demo.
Requisitos Previos para Desarrollar su cBot
Antes de comenzar a escribir código, asegúrese de contar con los siguientes elementos:
- Una cuenta de cTrader (demo) creada en un broker que soporte cTrader — si aún no conoce cómo funciona, lea nuestra guía de cTrader Copy Trading
- La plataforma cTrader instalada en su ordenador (Windows, macOS o Web)
- Conocimientos básicos de programación en C#: variables, funciones, condicionales
- Opcional: Visual Studio Community 2022+ para depuración avanzada y edición de código
Si actualmente usa MetaTrader y desea comparar plataformas, consulte nuestra guía para instalar MetaTrader 5 y evaluar las diferencias entre ambos ecosistemas.

Estructura Fundamental de un cBot
Un cBot en cTrader Automate sigue una estructura de herencia basada en la interfaz IUserRobot. Todo cBot debe heredar de la clase Robot e implementar los métodos fundamentales que definen su comportamiento. A continuación se presenta la estructura base con un ejemplo práctico de cruce de medias móviles:
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC)]
public class MiPrimerCBot : Robot
{
// Parámetros configurables desde la interfaz de cTrader
[Parameter("Volumen (Lotes)", DefaultValue = 0.01)]
public double Volumen { get; set; }
[Parameter("Periodo EMA Rapida", DefaultValue = 9)]
public int PeriodoRapido { get; set; }
[Parameter("Periodo EMA Lenta", DefaultValue = 21)]
public int PeriodoLento { get; set; }
private MovingAverage emaRapida;
private MovingAverage emaLenta;
protected override void OnStart()
{
emaRapida = Indicators.MovingAverage(Bars.ClosePrices,
PeriodoRapido, MovingAverageType.Exponential);
emaLenta = Indicators.MovingAverage(Bars.ClosePrices,
PeriodoLento, MovingAverageType.Exponential);
Print("cBot iniciado correctamente");
}
protected override void OnBar()
{
if (Trade.IsExecuting)
return;
double ultimaRapida = emaRapida.Result.Last(1);
double ultimaLenta = emaLenta.Result.Last(1);
double anteriorRapida = emaRapida.Result.Last(2);
double anteriorLenta = emaLenta.Result.Last(2);
if (anteriorRapida <= anteriorLenta && ultimaRapida > ultimaLenta)
{
if (Trade.PositionCount == 0)
{
ExecuteMarketOrder(TradeType.Buy, SymbolName,
Volumen, "Compra EMA");
Print("Señal de compra ejecutada");
}
}
else if (anteriorRapida >= anteriorLenta && ultimaRapida < ultimaLenta)
{
if (Trade.PositionCount == 0)
{
ExecuteMarketOrder(TradeType.Sell, SymbolName,
Volumen, "Venta EMA");
Print("Señal de venta ejecutada");
}
}
}
protected override void OnStop()
{
Print("cBot detenido. Total operaciones: "
+ Trade.PositionCount);
}
}
}
/*
MIT License
Copyright (c) 2026 Mahdi Goodarzi — Gueta Quant
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
ADVERTENCIA: Este código se proporciona exclusivamente con fines educativos.
No constituye asesoría de inversión ni recomendación de trading. Operar en
mercados financieros implica riesgo de pérdida de capital. Realice siempre
pruebas exhaustivas en cuentas demo antes de usar cualquier algoritmo con
capital real. Cumplimiento Decreto 2555 de 2010 — Superintendencia Financiera
de Colombia.
*/El cBot hereda de la clase Robot, que proporciona acceso a propiedades fundamentales como Trade para gestión de órdenes, Bars para datos históricos OHLC, Indicators para indicadores técnicos y Symbol para información del instrumento actual.

Desglose Detallado del Código
Namespaces y Herencia
La línea using cAlgo.API importa las bibliotecas esenciales. Todo cBot hereda de la clase Robot, que proporciona acceso a objetos como Trade para la gestión de órdenes, Bars para datos históricos de precios, Indicators para indicadores técnicos y Symbol para la información del símbolo actual. El namespace cAlgo.Robots agrupa todos los cBots dentro del ecosistema de cTrader.
Parámetros Configurables
Los atributos [Parameter] exponen variables en la interfaz de usuario de cTrader, permitiendo configurar el cBot sin modificar el código fuente. Cada parámetro puede incluir valores por defecto, descripciones y rangos mínimos/máximos. Esto permite que cualquier operador ajuste la estrategia según sus preferencias de riesgo sin conocimientos de programación.
Eventos Principales del Ciclo de Vida
El método OnStart() se ejecuta una única vez al cargar el cBot y es ideal para inicializar indicadores y variables. OnBar() se ejecuta al cierre de cada nueva vela, siendo el lugar adecuado para estrategias basadas en marcos temporales discretos. OnTick() se ejecuta en cada cambio de precio, útil para scalping y estrategias de alta frecuencia. OnStop() permite realizar tareas de limpieza al detener el robot.
La elección del evento adecuado es crucial para el rendimiento de su cBot. Si su estrategia opera en gráficos de 1 hora o superior, OnBar() es la opción correcta, ya que solo se ejecuta una vez por vela, consumiendo menos recursos computacionales. Para estrategias de scalping en marcos de 1 minuto o menor, OnTick() es necesario para capturar cada fluctuación del precio. Sin embargo, debe tener precaución: un bucle de procesamiento pesado dentro de OnTick() puede ralentizar la plataforma si el código no está optimizado. Una práctica recomendada es utilizar OnBar() como valor predeterminado y migrar a OnTick() solo cuando la lógica de la estrategia lo exija explícitamente. Además, cTrader ofrece el método OnPositionOpened() y OnPositionClosed() para reaccionar específicamente a cambios en las posiciones, lo que permite un control más granular sin necesidad de verificar el estado en cada tick.

Gestión de Riesgo en su cBot
Un cBot profesional debe incluir control de riesgo riguroso. La gestión de riesgo es el componente más importante de cualquier sistema algorítmico. A continuación se presenta un fragmento de código que implementa cálculo de volumen basado en porcentaje de riesgo, un estándar en la industria cuantitativa:
using System;
using cAlgo.API;
namespace cAlgo.Robots
{
public partial class GestorRiesgo : Robot
{
[Parameter("Riesgo Maximo (%)", DefaultValue = 2.0,
MinValue = 0.1, MaxValue = 5.0)]
public double RiesgoMaximo { get; set; }
[Parameter("Stop Loss (ATR Multiplicador)",
DefaultValue = 2.5, MinValue = 1.0, MaxValue = 5.0)]
public double StopLossATR { get; set; }
[Parameter("Volumen Maximo (Lotes)", DefaultValue = 1.0)]
public double VolumenMaximo { get; set; }
private double CalcularVolumen(double stopDistancia)
{
double riesgoEnUSD = Account.Balance
* (RiesgoMaximo / 100);
double valorPorPip = Symbol.PipValue;
double volumenCalculado = riesgoEnUSD
/ (stopDistancia / Symbol.PipSize * valorPorPip);
double volumenNormalizado = Symbol
.NormalizeVolume(volumenCalculado);
return Math.Min(volumenNormalizado, VolumenMaximo);
}
protected override void OnBar()
{
if (Account.Equity < Account.Balance * 0.85)
{
Print("Circuito de seguridad activado: "
+ "Equity por debajo del 85%");
Stop();
return;
}
}
}
}
/*
MIT License — Ver términos completos en el bloque anterior.
ADVERTENCIA: La gestión de riesgo aquí presentada es un ejemplo
educativo. No garantiza la protección contra pérdidas. El trading
algorítmico implica riesgos sustanciales. Pruebe siempre en cuenta
demo y ajuste los parámetros según su perfil de riesgo personal.
Cumplimiento Decreto 2555 de 2010 — SFC.
*/El cálculo de posición se basa en la fórmula estándar: Tamaño = (Capital × Riesgo%) / (Distancia Stop × Valor del Pip). Este enfoque garantiza que cada operación arriesgue un porcentaje fijo del capital, independientemente de la volatilidad del mercado. El circuito de seguridad (Equity Circuit Breaker) detiene el cBot automáticamente si la pérdida total supera el 15%, proporcionando una capa adicional de protección.
Para profundizar en estrategias de dimensionamiento de posiciones, consulte nuestra guía de tamaño de posición en trading.
| Parámetro | Valor Recomendado | Función |
|---|---|---|
| Riesgo Máximo (%) | 0.5% – 2.0% | Porcentaje del capital a arriesgar por operación |
| Stop Loss (ATR Multiplicador) | 1.5 – 3.0 | Distancia del stop basada en la volatilidad del ATR |
| Volumen Máximo (Lotes) | 0.1 – 1.0 | Límite superior para evitar sobreexposición |
| Circuito de Equity | 85% – 90% | Detiene el robot si el equity cae por debajo del umbral |
Compilación, Backtesting y Evaluación de Resultados
Compilar el cBot
Abra cTrader y diríjase a la pestaña cTrader Automate. Haga clic en Nuevo cBot y pegue el código en el editor. Presione Compilar y el compilador mostrará cualquier error de sintaxis. Si la compilación es exitosa, el cBot aparecerá en su lista de robots disponibles para asignar a cualquier gráfico.
Ejecutar Backtesting
Arrastre su cBot desde la lista de Automate a cualquier gráfico. Configure los parámetros en la ventana emergente, seleccione Backtesting en la barra superior, defina el rango de fechas y el marco temporal, y ejecute la simulación. cTrader genera un reporte detallado con las siguientes métricas:
- Net Profit: Ganancia o pérdida total durante el período simulado
- Profit Factor: Ratio entre ganancias y pérdidas (debe ser superior a 1.5)
- Sharpe Ratio: Rendimiento ajustado por riesgo (superior a 1.0 es aceptable)
- Max Drawdown: Caída máxima desde el pico de capital (idealmente inferior a 5%)
- Total Trades: Número total de operaciones ejecutadas durante la simulación

Validación fuera de muestra y forward-testing
Una vez que haya obtenido resultados prometedores en backtesting, el siguiente paso es la validación fuera de muestra. Consiste en reservar un período de datos históricos que no se utilizó durante la fase de optimización —por ejemplo, el 20% final del rango de fechas— y ejecutar el backtesting sobre ese segmento sin modificar ningún parámetro. Si los resultados se mantienen consistentes con los del período de entrenamiento, la estrategia tiene mayor probabilidad de funcionar en condiciones reales. El forward-testing, por su parte, implica ejecutar el cBot en una cuenta demo con datos en vivo durante un mínimo de 30 a 60 días. Esta etapa permite observar el comportamiento del robot frente a condiciones de mercado no vistas anteriormente, incluyendo eventos de alta volatilidad como noticias macroeconómicas o gaps de precios. Solo después de superar ambas fases de validación debería considerar la posibilidad de migrar el cBot a una cuenta real, y siempre con un capital que esté dispuesto a perder por completo.
Mejores Prácticas para el Desarrollo de cBots
Para garantizar que su cBot sea robusto y confiable, siga estas recomendaciones basadas en estándares de la industria cuantitativa:
- Empiece simple: Un cBot con lógica probada es superior a uno complejo sin validación
- Valide en múltiples activos: Pruebe su robot en diferentes pares de divisas y marcos temporales
- Evite el sobreajuste (overfitting): No optimice parámetros excesivamente para datos pasados
- Incluya siempre stop loss: Ninguna operación debe ejecutarse sin protección de riesgo
- Use simulación prolongada: Pruebe al menos 2-3 años de datos históricos en múltiples condiciones de mercado
- Documente el código: Los comentarios claros facilitan el mantenimiento y la depuración del cBot
Preguntas Frecuentes
¿Qué conocimientos de C# necesito para crear un cBot?
Necesita conocimientos básicos de C#: variables, funciones, condicionales y bucles. No se requiere experiencia previa en trading algorítmico, aunque entender conceptos como herencia de clases y eventos facilita el proceso. El framework de cTrader Automate está diseñado para ser accesible incluso para programadores con nivel intermedio.
¿Puedo usar mi cBot en una cuenta real de cTrader?
Sí, una vez compilado exitosamente en cTrader Automate, puede ejecutar su cBot en cuentas demo y reales. Se recomienda probar el robot en una cuenta demo durante al menos 60 días antes de considerar su uso con capital real, y siempre bajo supervisión de las políticas de su broker. Asegúrese de que su broker regulado en Colombia ofrezca soporte para cTrader.
¿Qué ventajas tiene cTrader Automate frente a MetaTrader para desarrollar robots?
cTrader Automate ofrece C# con .NET, tipado fuerte, API REST completa, ejecución multihilo real y depuración remota desde Visual Studio. A diferencia de MQL5, su sintaxis es más moderna y permite integrar bibliotecas NuGet estándar para análisis estadístico avanzado. Además, la infraestructura ECN de cTrader reduce la latencia de ejecución.
🔗 Explora más herramientas en GitHub:Descarga el código fuente completo de 44 herramientas cuantitativas (22 MQL4/MQL5, 11 Pine v6, 11 cBots C#) — MQL4/MQL5 compilan en CI; Pine v6 y cBots C# con revisión estática —EAs para MT4/MT5,cBots para cTradere indicadores Pine Script v6. Todo 100% open source bajo licencia AGPLv3.
Por