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.