Ir para o conteúdo

BacktestingInPlugins Sample

Visão geral

O plugin BacktestingInPlugins Sample permite executar testes de verificação de estratégias históricas diretamente a partir da interface da plataforma cTrader usando as seguintes funcionalidades principais:

  • Cria um layout de painel estruturado com um menu suspenso, botão de ação e campo de exibição de resultados.
  • Lista todos os cBots instalados no menu suspenso para fácil seleção.
  • Executa um teste de verificação no símbolo definido usando dados históricos quando acionado.
  • Exibe a rentabilidade do investimento (ROI) e o lucro líquido dos resultados do teste de verificação.

Este plugin é executado num painel personalizado dentro do Painel de símbolo ativo e permanece ativo enquanto o cTrader Windows ou Mac estiver aberto. Para automaticamente quando a plataforma é fechada ou reiniciada.

Criação do plugin

Aprenda como criar, editar e compilar plugins a partir de um modelo ou do zero no nosso guia passo a passo.

Pode encontrar o código do plugin BacktestingInPlugins Sample no GitHub, ou simplesmente copiá-lo abaixo.

Código de exemplo
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;
        }
    }
}

Opções de personalização

Este plugin fornece uma interface direta para iniciar testes de verificação e visualizar resultados básicos. A tabela abaixo descreve os seus componentes principais e as suas funções:

Parâmetro Descrição Valores possíveis
_grid Define o layout para a interface do plugin. (3, 1), (2, 2), etc.
_startBacktestingButton Personaliza a aparência e a etiqueta do botão de início. Start Backtesting, Color.Green, new CornerRadius(5)
_cBotsComboBox.AddItem Preenche a ComboBox com cBots do registo. robottype.name
_resultsTextBlock.Text Apresenta mensagens durante o ciclo de teste de verificação. Select a cBot..., Backtesting in progress..., Backtesting results summary, etc.
CBotsComboBox_SelectedItemChanged Atualiza o cBot selecionado para teste. obj.selecteditem
StartTimeUtc Data e hora de início do teste de verificação em UTC. new datetime(2023, 6, 1)
EndTimeUtc Data e hora de fim do teste de verificação em UTC. datetime.utcnow
DataMode Define o que representa cada movimento do ponto de dados (1 minuto, 1 hora ou 1 dia). backtestingdatamode.m1
Balance Saldo inicial da conta virtual. 10000, 20000, etc.
Backtesting.Start Define em que símbolo e intervalo de tempo executar os testes de verificação. eurusd, timeframe.hour
Backtesting_Completed Extrai e mostra os resultados do teste na IU. resultsnode[main][roi], resultsnode[main][netprofit], etc.

Nota

Certifique-se de que pelo menos um cBot está instalado no cTrader para que a lista pendente seja preenchida corretamente.

Casos de uso

Este plugin fornece uma forma de executar testes de estratégia históricos no Painel de símbolo ativo. Simplifica a seleção e o teste de cBots, tornando-o ideal para a avaliação de estratégias. Abaixo estão casos práticos de utilização que mostram como o plugin pode ser aplicado a cenários de negociação reais.

Caso de uso Cenário Valor
Comparação de estratégias Execute testes de verificação em vários cBots utilizando condições de teste idênticas. Permite a comparação direta do desempenho numa única sessão.
Análise rápida do desempenho Teste qualquer cBot instalado numa configuração de mercado padrão. Ajuda-o a avaliar o desempenho de um cBot antes de o executar numa conta real.
Testes de verificação com regras fixas Valide alterações de algoritmos ao iniciar um teste de verificação predefinido. Garante consistência nas condições de teste ao depurar ou testar versões de estratégias.
Ferramenta de insights rápidos Visualize feedback de ROI e lucro imediatamente após testar cBots instalados. Poupa tempo em comparação com o lançamento de sessões de teste separadas.

Resumo

Este plugin fornece uma interface simplificada para selecionar um cBot e executar um teste de verificação histórico usando configurações predefinidas. Executa o teste num símbolo e período temporal escolhidos, e depois exibe métricas-chave de desempenho como ROI e lucro líquido. A estrutura suporta validação rápida de estratégias e é adaptável a vários cenários de negociação.

Para mais detalhes de desenvolvimento, consulte a nossa documentação de plugins.