Saltar a contenido

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.