BacktestingInPlugins Sample¶
Descripción general ¶
El plugin BacktestingInPlugins Sample permite ejecutar pruebas de estrategia histórica directamente desde la interfaz de la plataforma cTrader utilizando las siguientes funcionalidades clave:
- Crea un diseño de panel estructurado con un menú desplegable, botón de acción y campo de visualización de resultados.
- Lista todos los cBots instalados en el menú desplegable para una fácil selección.
- Ejecuta un backtest en el símbolo establecido utilizando datos históricos cuando se activa.
- Muestra el retorno de la inversión (ROI) y el beneficio neto de los resultados del backtest.

Este plugin se ejecuta en un panel personalizado dentro del Panel de símbolo activo y permanece activo mientras cTrader Windows o Mac está abierto. Se detiene automáticamente cuando la plataforma se cierra o se reinicia.
Creación del plugin ¶
Aprenda cómo crear, editar y construir plugins desde una plantilla o desde cero en nuestra guía paso a paso.
Puede encontrar el código del plugin BacktestingInPlugins Sample en GitHub, o simplemente copiarlo a continuación.
Código de ejemplo
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Nodes;
namespace cAlgo.Plugins
{
[Plugin(AccessRights = AccessRights.None)]
public class BacktestingInPluginsSample : Plugin
{
// Declaring the necessary UI elements
// and the cBot (RobotType) selected in the ComboBox
private Grid _grid;
private ComboBox _cBotsComboBox;
private Button _startBacktestingButton;
private TextBlock _resultsTextBlock;
private RobotType _selectedRobotType;
protected override void OnStart()
{
// Initialising and structuring the UI elements
_grid = new Grid(3, 1);
_cBotsComboBox = new ComboBox();
_startBacktestingButton = new Button
{
BackgroundColor = Color.Green,
CornerRadius = new CornerRadius(5),
Text = "Start Backtesting",
};
_resultsTextBlock = new TextBlock
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Text = "Select a cBot...",
};
_grid.AddChild(_cBotsComboBox, 0, 0);
_grid.AddChild(_startBacktestingButton, 1, 0);
_grid.AddChild(_resultsTextBlock, 2, 0);
var block = Asp.SymbolTab.AddBlock("Backtesting Plugin");
block.Child = _grid;
// Populating the ComboBox with existing cBots
PopulateCBotsComboBox();
// Assigning event handlers to the Button.Click,
// ComboBox.SelectedItemChanged, and Backtesting.Completed events
_startBacktestingButton.Click += StartBacktestingButton_Click;
_cBotsComboBox.SelectedItemChanged += CBotsComboBox_SelectedItemChanged;
Backtesting.Completed += Backtesting_Completed;
}
protected void StartBacktestingButton_Click(ButtonClickEventArgs obj)
{
// Initialising and configuring the backtesting settings
var backtestingSettings = new BacktestingSettings
{
DataMode = BacktestingDataMode.M1,
StartTimeUtc = new DateTime(2023, 6, 1),
EndTimeUtc = DateTime.UtcNow,
Balance = 10000,
};
// Starting backtesting on EURUSD h1
Backtesting.Start(_selectedRobotType, "EURUSD", TimeFrame.Hour, backtestingSettings);
// Disabling other controls and changing
// the text inside the TextBlock
_cBotsComboBox.IsEnabled = false;
_startBacktestingButton.IsEnabled = false;
_resultsTextBlock.Text = "Backtesting in progress...";
}
protected void PopulateCBotsComboBox()
{
// Iterating over the AlgoRegistry and
// getting the names of all installed cBots
foreach (var robotType in AlgoRegistry.OfType<RobotType>())
{
_cBotsComboBox.AddItem(robotType.Name);
}
}
protected void Backtesting_Completed(BacktestingCompletedEventArgs obj)
{
// Attaining the JSON results of backtesting
string jsonResults = obj.JsonReport;
// Converting the JSON string into a JsonNode
JsonNode resultsNode = JsonNode.Parse(jsonResults);
// Attaining the ROI and net profit from backtesting results
_resultsTextBlock.Text = $"ROI: {resultsNode["main"]["roi"]}\nNet Profit: {resultsNode["main"]["netProfit"]}";
// Re-enabling controls after backtesting is finished
_cBotsComboBox.IsEnabled = true;
_startBacktestingButton.IsEnabled = true;
}
protected void CBotsComboBox_SelectedItemChanged(ComboBoxSelectedItemChangedEventArgs obj)
{
// Updating the variable to always contain
// the cBot selected in the ComboBox
_selectedRobotType = AlgoRegistry.Get(obj.SelectedItem) as RobotType;
}
}
}
Opciones de personalización ¶
Este plugin proporciona una interfaz directa para iniciar backtests y ver resultados básicos. La siguiente tabla describe sus componentes clave y sus funciones:
| Parámetro | Descripción | Valores posibles |
|---|---|---|
_grid | Define el diseño de la interfaz del plugin. | (3, 1), (2, 2), etc. |
_startBacktestingButton | Personaliza la apariencia y etiqueta del botón de inicio. | Start Backtesting, Color.Green, new CornerRadius(5) |
_cBotsComboBox.AddItem | Rellena el ComboBox con cBots del registro. | robottype.name |
_resultsTextBlock.Text | Muestra mensajes durante el ciclo de backtesting. | Select a cBot..., Backtesting in progress..., Backtesting results summary, etc. |
CBotsComboBox_SelectedItemChanged | Actualiza el cBot seleccionado para pruebas. | obj.selecteditem |
StartTimeUtc | Fecha y hora de inicio del backtesting en UTC. | new datetime(2023, 6, 1) |
EndTimeUtc | Fecha y hora de finalización del backtesting en UTC. | datetime.utcnow |
DataMode | Define qué representa cada movimiento de punto de datos (1 minuto, 1 hora o 1 día). | backtestingdatamode.m1 |
Balance | Saldo inicial de la cuenta virtual. | 10000, 20000, etc. |
Backtesting.Start | Define en qué símbolo y marco temporal ejecutar los backtests. | eurusd, timeframe.hour |
Backtesting_Completed | Extrae y muestra los resultados de la prueba en la interfaz de usuario. | resultsnode[main][roi], resultsnode[main][netprofit], etc. |
Nota
Asegúrese de tener al menos un cBot instalado en cTrader para que el menú desplegable se rellene correctamente.
Casos de uso ¶
Este plugin proporciona una forma de ejecutar pruebas de estrategia históricas en el Panel de símbolo activo. Simplifica la selección y prueba de cBots, lo que lo hace ideal para la evaluación de estrategias. A continuación se muestran casos prácticos de uso que muestran cómo se puede aplicar el plugin a escenarios de operaciones reales.
| Caso de uso | Escenario | Valor |
|---|---|---|
| Comparación de estrategias | Ejecute backtests en múltiples cBots usando condiciones de prueba idénticas. | Permite la comparación directa del rendimiento en una sola sesión. |
| Revisión rápida del rendimiento | Pruebe cualquier cBot instalado en una configuración de mercado estándar. | Le ayuda a evaluar el rendimiento de un cBot antes de ejecutarlo en una cuenta real. |
| Backtesting con reglas fijas | Valide los cambios del algoritmo iniciando un backtesting predefinido. | Garantiza la consistencia en las condiciones de prueba al depurar o probar versiones de estrategias. |
| Herramienta de información rápida | Vea el ROI y los comentarios sobre beneficios inmediatamente después de probar los cBots instalados. | Ahorra tiempo en comparación con iniciar sesiones de prueba independientes. |
Resumen ¶
Este plugin proporciona una interfaz optimizada para seleccionar un cBot y ejecutar un backtesting histórico utilizando configuraciones predefinidas. Ejecuta la prueba en un símbolo y período de tiempo elegidos, y luego muestra métricas clave de rendimiento como el ROI y el beneficio neto. La estructura permite una validación rápida de la estrategia y es adaptable a varios escenarios de trading.
Para más detalles sobre el desarrollo, consulte nuestra documentación de plugins.